[android] DexException : 새 인덱스 65536을 점보가 아닌 명령어로 병합 할 수 없습니다.

알 수없는 이유로 내 앱이 갑자기 Android Studio에서 빌드되지 않습니다.

계속 받고 있어요

> 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보다 훨씬 낮습니다.

지금은 AS 0.8.11을 사용하고 있습니다.



답변

이 줄을 project.properties에 추가하십시오.

dex.force.jumbo = true

dex 파일의 문자열 제한을 증가시킵니다. 그리고 당신의 프로젝트는 아마도 컴파일 될 것입니다.

참고 : 또한 점보 세트를 사용하면 단일 dex의 메서드에 대해서만 64K로 제한됩니다. 나중에이 제한이 발생하면 일부 종속성을 제거해야합니다.

업데이트-Google Play 서비스 6.5 (12-08-14)

버전 6.5에서 Google은 마침내 Google Play 서비스를 번들 해제했습니다. 이제부터는 API를 선택적으로 실행 파일로 컴파일 할 수 있습니다.

예 :

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

다른 모든 개별 Google Play 서비스 API 는 d.android.com 에서이 페이지를 확인 하세요.

업데이트 (2015 년 4 월 21 일) :
https://developer.android.com/tools/building/multidex.html


답변

build.gradle에서 jumboMode 속성을 설정합니다.

android {
    ...
    dexOptions {
        jumboMode true
    }

}

나는 또한 이것이 유용하다는 것을 발견했다 : Show dex method count by package .


답변

이것은 나를 위해 작동합니다. 나는 얻고 있었다com.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

이것이 작동하지 않으면 다른 문제인 dex의 메서드 참조 제한에 도달했을 수 있습니다. multidex 또는 proGuard를 사용해야합니다.


답변

병합중인 dex 파일에 65536 개 이상의 문자열이있을 때 병합의 버그입니다. 새로운 인덱스는 const-string 명령어에 맞지 않으며, dex merger는 크기가 다른 경우 명령어 변경을 지원하지 않으므로 const-string / jumbo 명령어로 확장 할 수 없습니다. 새 옵션을 추가하여 jb-mr1 : –force-jumbo.이 버그는 "dex.force.jumbo=true"project.properties 에 추가 하여 수정할 수 있습니다 .


답변

최신 Android Studio 및 Android Studio 컴파일러 설정에서 “force jumbo”플래그를 선택하면이 문제가 사라집니다.


답변