Edited at

ビルド時に Unable to execute dex: method ID not in [0, 0xffff]: 65536 が出た場合の対処

More than 3 years have passed since last update.

Android Studio 1.5.1で確認しています。

Android Studio上で、ライブラリを追加したとたん、以下のタスクから進まなくなりました。

:app:transformClassesWithDexForDebug

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2

AndroidStudio上のエラーメッセージを見てもまったくわからないので

http://ja.stackoverflow.com/questions/8020/androidstudiogradle%E3%81%A7%E3%83%93%E3%83%AB%E3%83%89%E3%82%A8%E3%83%A9%E3%83%BC-process-finished-with-non-zero-exit-value-2

↑を参考にコマンドラインからビルドしてみました。

bash <ANDROID_STUDIO_HOME>/gradle/gradle-<version>/bin/gradle :app:assembleDebug

例:私の環境の場合

cd [プロジェクトのディレクトリ]

bash /Applications/Android\ Studio.app/Contents/gradle/gradle-2.8/bin/gradle :app:assembleDebug

と、以下のメッセージをゲットしました。

:app:transformClassesWithDexForDebug

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)

:app:transformClassesWithDexForDebug FAILED

どうやらライブラリを追加した結果、メソッド数の上限を超えてしまった模様。

ていうかメソッド数に上限なんてあったのね。

公式サイトを見ながら対処

Building Apps with Over 65K Methods

http://developer.android.com/intl/ja/tools/building/multidex.html

build.gradleを修正


build.gradle

android {

compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true
}
...
}

dependencies {
compile 'com.android.support:multidex:1.0.0'
}


Manifestのアプリケーションも修正


AndroidManifest.xml

    <application

...
android:name="android.support.multidex.MultiDexApplication">
...
</application>

私の環境ではこれで解消しました。

参考になれば。