web-dev-qa-db-ja.com

マルチデックスのデメリットAndroidアプリケーション

最近、Dalvik65Kメソッドの制限について読みました。メソッド呼び出しリストは最初の65536メソッド参照しか呼び出せないことを理解しました。これに取り組むために、私たちは多くの解決策を持っています。そのうちの1つは、Androidのサポートライブラリを使用して.dexファイルをクラスの数[classes.dex、classes1.dex ...]に分割するマルチデックスです。

私が理解できなかったのは、Androidアプリケーションがこのマルチデックスによって苦しむ欠点と、参照されるメソッドの数を最小限に抑えるために多くの努力を払う必要がある理由です。

基本的に私の理解では、メソッド数を減らすには、モジュール化を減らす必要があります。これにより、コードが少し読みにくくなり、サードパーティライブラリのコードを削除するために費やされた時間数が残ります。メソッド数を減らしていますか価値がありますか??

24
adnaan.zohran

Multidexについて考えすぎています。代わりに、アプリケーションをプロファイリングして、アプリにパフォーマンスの問題があるかどうかを観察して特定する必要があります。

マルチデキシングはコードのサイズをほとんど増加させません。主要なサイズとパフォーマンスの問題はアニメーション/画像/オーディオ/ビデオリソースにあり、サイズを増加させてパフォーマンスを低下させます。

多くのサードパーティライブラリを含めると、最終的に64kの制限を超え、今日のほとんどすべてのアプリケーションはマルチデックスになります。ユーザーは今日、多くのサードパーティライブラリとの統合を必要とする多機能アプリを要求しています。

速度が最も重要なアニメーション/ゲームプログラミングを行っている場合にのみ、より多くのメソッド呼び出しが有害になる可能性がありますが、これはマルチデックスとは関係ありません。

起動時間はマルチデックスに影響しますが、アプリロジックを変更して、他のコストのかかるライブラリやリソースの読み込みを遅らせることで、確実に改善できます。

メソッド数を減らしていますか価値があります ??

[〜#〜] no [〜#〜]

モバイルアプリのテストと変更は公開後の大きな課題であるため、理想的には、より多くのメソッドを使用してコードをモジュール化する必要があります。バグのデバッグと削除は、multidexサイズとそのパフォーマンスへの影響よりもコストがかかります。画面が小さく、ブランドが異なり、UIが異なるため、ユーザーはコンピューターに比べて電話のアプリに腹を立てます。コードを複数の個別のテスト済みライブラリに分割すると、ユーザーの需要に対応しやすくなります。

27
Akash Kava

主な欠点は、dex/apkのサイズが大きいことです。 Dexファイルには、そのdexファイル内のすべてのクラス間で共有される定数のプールがあります。クラスが複数のdexファイルに分割されている場合、これらの共有定数は、それらが使用されている各dexファイルで複製する必要があります。

6
JesusFreke

マルチデックス自体はパフォーマンスの悪い用語です。アプリケーションがマルチデックスの場合、アプリケーションを実行するAndroid内部プロセスに負担がかかることを意味します。

すべてのAndroidアプリケーションは単一のプロセス(タスク)内で実行されます。マルチデックスの場合、プロセスが部分に分割され、小さなAndroid =プロセッサ、コードの記述方法に関係なく。

私はaakashkavaに同意します。これは、今日Androidプロセッサのパフォーマンスが非常に優れており、Android RAMは優れていますが、そうではありません。つまり、マルチデキシングを無視する必要があります。

1
Jayesh L

マルチデックスの一般的に言われている欠点は次のとおりです。APKサイズの増加、アプリの起動が遅くなる可能性、メモリフットプリントの増加。

その理由は、一部のデータ(StringDataなど)を共有できないため、複数のDEXファイルに同時に部分的に保存する必要があるためです。 StringDataは、コードからロードされた文字列リテラル、クラス、メソッド、フィールド名で構成され、通常、DEXファイル全体の最大20%を占めます。

しかし実際の欠点(APKサイズ以外)は、アプリを実行しているAndroidバージョンに大きく依存します。

GoogleはAndroidランタイム(ART)を最適化して、これらの欠点を取り除きました。Android O(API 26)は、事前検証済みのDEXファイルを保存するためのVDEXコンテナを導入しました。 Android P Googleはプリコンパイラ(コード名CompactDex)をさらに最適化し、共有データセクションをVDEXコンテナに追加して、複数のDEXファイルで使用されるデータを重複排除しました。したがって、multidexを実行する際の不利な点はほとんどありません。 Android Pランタイムのアプリ。

出典: Androidランタイム(Google I/O '18) の新機能

1
G00fY