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

  • 26
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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>

私の環境ではこれで解消しました。
参考になれば。