DexException:新しいインデックス65536を非ジャンボ命令にマージできません


84

なんらかの理由で、私のアプリが突然AndroidStudioからビルドされなくなりました。

私は得続けています

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!

同じアプリケーションがコマンドラインから正常に構築されている間。メソッド参照数を確認しましたが、恐ろしい64kをはるかに下回っています。

現在、AS0.8.11を使用しています。

回答:


57

project.propertiesにこの行を追加してみてください

dex.force.jumbo = true

dexファイル内の文字列の制限をインクリメントします。そして、あなたのプロジェクトはおそらくコンパイルされるでしょう。

注:ジャンボセットの場合も、単一のdex内のメソッドに対してのみ64Kの別の制限があります。将来この制限が発生した場合は、いくつかの依存関係を削除する必要があります。

アップデート-GooglePlay開発者サービス6.5(12-08-14)

バージョン6.5で、GoogleはついにGooglePlay開発者サービスをバンドル解除しました。したがって、これからは、APIを選択的に実行可能ファイルにコンパイルすることが可能になります。

例:

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

他のすべての個別のGooglePlay開発者サービスAPIについては、d.android.comのこのページを確認してください。

アップデート(2015年4月21日):https//developer.android.com/tools/building/multidex.html


11
するために追加project.properties:私は私のGradleのビルドスクリプトを更新しましたので、ここで説明したようではない仕事をしたstackoverflow.com/questions/17320088/...
Martynas Jurkus

1
dex.force.jumboプロパティとdexOptionsを追加するという両方の解決策を実行しましたが、それでも同じエラーが発生します。別のオプション?
フアンサラビア2015年


@HareshChhelanaに感謝します。どういうわけかそれは働き始めました..しかし、私は本当に特別なことは何もしませんでした。このオプションなしでプロジェクトをコンパイルしている同僚がいますが、今ではうまくいっています。ありがとう!
フアンサラビア2015年

1
全体ではなく、Google Playのサービスをコンパイルするの、私は65K DEX限界以下とどまること、有用であることが「基本」のバンドルを使用した:compile 'com.google.android.gms:play-services-base:7.3.0'
KIP2

245

build.gradleでjumboModeプロパティを設定します。

android {
    ...
    dexOptions {
        jumboMode true
    }

}

私はこれも便利だと思いました:パッケージごとのdexメソッド数の表示


12
ありがとう!それは私にも役立ちます。しかし、この「ジャンボモード」とはどういう意味ですか?
yital9 2016年

3
@ yital9ジャンボモードの詳細については、stackoverflow.com
Albert Vila Calvo

このブロックの理由を説明してください
eC Droid 2017

プロガードのため、リリースビルドが正常に機能するため、この内部デバッグビルドタイプのみを追加しました。この変更後、デバッグビルドは正常に機能しました。これでいいですか?
ガーネット

1
これは私にとってはうまくいきます。変更するbuild.gradleは、com.android.dex.DexExceptionをスローするモジュールである必要があることに注意してください。
フランシスベーコン

54

これは私にとってはうまくいきます。私は得ていたcom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

これが機能しない場合は、別の問題であるdexのメソッド参照制限に達している可能性があります。multidexまたはproGuardのいずれかを使用する必要があります。


それは私のための仕事です。ありがとう!!! しかし、「jumboMode」とは何ですか?説明してもらえますか?@Sayooj
DG

13

これは、マージされるdexファイルに65536を超える文字列がある場合のマージのバグです。新しいインデックスはconst-string命令に適合できず、dexマージは、サイズが異なる場合は命令の変更をサポートしないため、const-string / jumbo命令に拡張できません。これはで修正されました。 jb-mr1に新しいオプション--force-jumboを追加します。このバグは"dex.force.jumbo=true"、project.propertiesに追加することで修正できます。


1
@DeepakSharma jumboModeを有効にした後、プロジェクトをクリーンアップする必要があります
Lilo

-1

最新のAndroidStudioと、Android Studioコンパイラ設定で「強制ジャンボ」フラグをオンにすると、この問題は解消されます。


3
可能であれば、あなたの答えにいくつかの詳細を追加してください、plz。
shA.t 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.