この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
dexindexoverflowexception_通称65k問題_の対応 [2015/11/30 09:34] sou |
dexindexoverflowexception_通称65k問題_の対応 [2015/12/02 10:03] (現在) sou [MultiDexのSupportライブラリで対応する] |
||
|---|---|---|---|
| ライン 5: | ライン 5: | ||
| com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 | com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 | ||
| + | ===== ProGuardを有効にする ===== | ||
| + | ProGuardを有効にすることで、使用していないメソッドの削除と最適化を行うことが出来ます。\\ | ||
| + | |||
| + | android { | ||
| + | buildTypes { | ||
| + | release { | ||
| + | // Proguardを有効にする | ||
| + | minifyEnabled true | ||
| + | // Proguardルールファイル proguard-rules-debug.pro を指定する。 | ||
| + | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-debug.pro' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| ===== MultiDexのSupportライブラリで対応する ===== | ===== MultiDexのSupportライブラリで対応する ===== | ||
| - | サポートライブラリはビルドツールv21.1.0以上から利用出来ます。\\ | + | ProGuardの他に、サポートライブラリで対応することも出来ます。\\ |
| + | こちらはメソッドの定義ファイルを分割することで、65k以上のメソッドを使用可能にしてるみたいでProguardとは考え方が違うようです。\\ | ||
| + | サポートライブラリはビルドツールv21.1.0以上から利用可能です。\\ | ||
| ・build.gradle | ・build.gradle | ||
| android { | android { | ||
| ライン 34: | ライン 49: | ||
| Applicationクラスを実装していない場合は、AndroidManifestの<application>にMultiDexApplicationを指定する。\\ | Applicationクラスを実装していない場合は、AndroidManifestの<application>にMultiDexApplicationを指定する。\\ | ||
| ・AndroidManifest.xml | ・AndroidManifest.xml | ||
| - | <application> | + | <application |
| ... | ... | ||
| android:name="android.support.multidex.MultiDexApplication"> | android:name="android.support.multidex.MultiDexApplication"> | ||
| ライン 43: | ライン 58: | ||
| minSdkVersion が21 以上の場合と21 未満の場合では、multidex の仕組みが異なり | minSdkVersion が21 以上の場合と21 未満の場合では、multidex の仕組みが異なり | ||
| ます。 | ます。 | ||
| - | minSdkVersion 21 以上であればART 環境で実行されることが保証できるため、ART が | + | minSdkVersion 21 以上であればART 環境で実行されることが保証できるため、ARTが |
| - | もっている複数のdex ファイルを一つのoat ファイルにまとめる機能を前提とすることが | + | もっている複数のdexファイルを一つのoat ファイルにまとめる機能を前提とすることが |
| - | できます。そのため、クラス間の依存を気にせずに複数のdex ファイルへ分割を行うこと | + | できます。そのため、クラス間の依存を気にせずに複数のdexファイルへ分割を行うこと |
| ができます。 | ができます。 | ||
| minSdkVersion 21 未満の場合はDalvik 環境で実行される可能性があるため、ひとつ目 | minSdkVersion 21 未満の場合はDalvik 環境で実行される可能性があるため、ひとつ目 | ||
| - | のdex ファイルのみでアプリを起動し、その中の処理でふたつ目以降のdex ファイルを読 | + | のdex ファイルのみでアプリを起動し、その中の処理でふたつ目以降のdexファイルを読 |
| み込む処理を実行する必要があります。ひとつ目のdex ファイルに入れておかなければな | み込む処理を実行する必要があります。ひとつ目のdex ファイルに入れておかなければな | ||
| - | らないクラスとふたつ目以降のdex ファイルでも問題のないクラスを、クラスの依存関係 | + | らないクラスとふたつ目以降のdexファイルでも問題のないクラスを、クラスの依存関係 |
| を解析したうえで適切に振り分ける必要があります。 | を解析したうえで適切に振り分ける必要があります。 | ||
| - | この解析処理は時間がかかるため、minSdkVersion が21 未満のアプリでmultidex を有 | + | この解析処理は時間がかかるため、minSdkVersionが21未満のアプリでmultidexを有 |
| - | 効化する場合は別途minSdkVersion が21 のProduct Flavor を追加し普段の開発はこの追 | + | 効化する場合は別途minSdkVersionが21のProduct Flavorを追加し普段の開発はこの追 |
| - | 加したProduct Flavor で行うのがお勧めです。\\ | + | 加したProduct Flavorで行うのがお勧めです。\\ |
| (引用:Android実践プログラミング) | (引用:Android実践プログラミング) | ||
| + | |||
| + | ===== ビルド時にJavaヒープがOutOfMemoryを起こす場合 ===== | ||
| + | ・Android Studioの設定を変更する\\ | ||
| + | 32bitの場合\\ | ||
| + | IDEルート\bin\studio.exe.vmoptions\\ | ||
| + | 64bitの場合\\ | ||
| + | IDEルート\bin\studio64.exe.vmoptions\\ | ||
| + | 上記をエディタで開き、「-XX:MaxPermSize=512m」に設定\\ | ||
| + | |||
| + | ・ビルド時のdexオプションを設定する\\ | ||
| + | android { | ||
| + | dexOptions { | ||
| + | incremental true | ||
| + | jumboMode true | ||
| + | javaMaxHeapSize "4g" | ||
| + | } | ||
| + | } | ||
| ===== 参考URL ===== | ===== 参考URL ===== | ||
| http://developer.android.com/intl/ja/tools/building/multidex.html\\ | http://developer.android.com/intl/ja/tools/building/multidex.html\\ | ||
| + | http://qiita.com/hirano/items/5071fce400bd212f2dcd\\ | ||
| + | |||