===== DexIndexOverflowExceptionについて ===== メソッド数が65k(65536)を超えると下記のビルドエラーが発生します。\\ ライブラリ等のメソッド数も含まれるため、大きめのライブラリをいくつか使用しているとわりと遭遇する。\\ UNEXPECTED TOP-LEVEL EXCEPTION: 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ライブラリで対応する ===== ProGuardの他に、サポートライブラリで対応することも出来ます。\\ こちらはメソッドの定義ファイルを分割することで、65k以上のメソッドを使用可能にしてるみたいでProguardとは考え方が違うようです。\\ サポートライブラリはビルドツールv21.1.0以上から利用可能です。\\ ・build.gradle android { buildToolsVersion "21.1.0" defaultConfig { ... // Enabling multidex support. multiDexEnabled true } } dependencies { compile 'com.android.support:multidex:1.0.0' } Applicationクラスを実装している場合は、継承をMultiDexApplicationに変更し、attachBaseContextをOverrideする。\\ ・MyApp.java public class MyApp extends MultiDexApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } Applicationクラスを実装していない場合は、AndroidManifestのにMultiDexApplicationを指定する。\\ ・AndroidManifest.xml ... ===== multidexビルドが遅い場合の対応 ===== minSdkVersion が21 以上の場合と21 未満の場合では、multidex の仕組みが異なり ます。 minSdkVersion 21 以上であればART 環境で実行されることが保証できるため、ARTが もっている複数のdexファイルを一つのoat ファイルにまとめる機能を前提とすることが できます。そのため、クラス間の依存を気にせずに複数のdexファイルへ分割を行うこと ができます。 minSdkVersion 21 未満の場合はDalvik 環境で実行される可能性があるため、ひとつ目 のdex ファイルのみでアプリを起動し、その中の処理でふたつ目以降のdexファイルを読 み込む処理を実行する必要があります。ひとつ目のdex ファイルに入れておかなければな らないクラスとふたつ目以降のdexファイルでも問題のないクラスを、クラスの依存関係 を解析したうえで適切に振り分ける必要があります。 この解析処理は時間がかかるため、minSdkVersionが21未満のアプリでmultidexを有 効化する場合は別途minSdkVersionが21のProduct Flavorを追加し普段の開発はこの追 加したProduct Flavorで行うのがお勧めです。\\ (引用: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 ===== http://developer.android.com/intl/ja/tools/building/multidex.html\\ http://qiita.com/hirano/items/5071fce400bd212f2dcd\\