ユーザ用ツール

サイト用ツール


dexindexoverflowexception_通称65k問題_の対応

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
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\\
 +
dexindexoverflowexception_通称65k問題_の対応.1448843682.txt.gz · 最終更新: 2015/11/30 09:34 by sou