以前のリビジョンの文書です
メソッド数が65k(65536)を超えると下記のビルドエラーが発生します。
ライブラリ等のメソッド数も含まれるため、大きめのライブラリをいくつか使用しているとわりと遭遇する。
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
サポートライブラリはビルドツール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の<application>にMultiDexApplicationを指定する。
・AndroidManifest.xml
<application> ... android:name="android.support.multidex.MultiDexApplication"> ... </application>
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実践プログラミング)