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


84

알 수없는 이유로 내 앱이 갑자기 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을 사용하고 있습니다.

답변:


57

이 줄을 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


11
에 추가 project.properties: 내 Gradle을 빌드 스크립트를 업데이트 있도록 여기에 설명하지 작업을했다 stackoverflow.com/questions/17320088/...
Martynas Jurkus

1
dex.force.jumbo 속성과 dexOptions를 추가하는 두 가지 솔루션을 모두 수행했지만 여전히 동일한 오류가 발생합니다. 다른 옵션?
Juan Saravia


감사합니다 @HareshChhelana. 왠지 왠지 작동하기 시작했는데 .. 나는 정말 특별한 일을하지 않았다. 이 옵션없이 프로젝트를 컴파일하는 동료가 있지만 지금은 저에게 효과적입니다. 감사!
Juan Saravia

1
전체 Google Play 서비스를 컴파일하는 대신 'base'번들을 사용하여 65K dex 한도 미만으로 유지하는 것이 유용하다는 것을 compile 'com.google.android.gms:play-services-base:7.3.0'
알았습니다

245

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

android {
    ...
    dexOptions {
        jumboMode true
    }

}

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


12
감사! 나에게도 효과가 있습니다. 그러나이 "jumboMode"는 무엇을 의미합니까?
yital9

3
@ 여기 점보 모드에 대한 자세한 배울 수 yital9 : stackoverflow.com/a/30517283/4034572
알버트 빌라 칼보

이 블록의 이유를 설명해주십시오
eC Droid

proguard로 인해 릴리스 빌드가 잘 진행되므로 디버그 빌드 유형 만 내부에 추가했습니다. 이 수정 후 디버그 빌드가 정상적으로 진행되었습니다. 괜찮아?
가넷

1
이것은 나를 위해 작동합니다. 변경할 build.gradle은 com.android.dex.DexException을 발생시키는 모듈이어야합니다.
Francis Bacon

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 merger는 크기가 다른 경우 명령어 변경을 지원하지 않으므로 const-string / jumbo 명령어로 확장 할 수 없습니다. 새 옵션을 추가하여 jb-mr1 : --force-jumbo.이 버그는 "dex.force.jumbo=true"project.properties 에 추가 하여 수정할 수 있습니다 .


1
@DeepakSharma 당신은 jumboMode 활성화 한 후 프로젝트를 청소해야
릴로

-1

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


3
가능하다면 답변에 몇 가지 세부 사항을 추가하십시오.
shA.t
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.