Java는 0이 아닌 종료 값 2로 완료되었습니다-Android Gradle


135

내 Android 앱을 실행하는 동안이 오류가 발생합니다 (청소 후 빌드했지만 오류는 여전히 존재합니다)

  • 동기화 : OK
  • 프로젝트 만들기 : OK
  • 청소 : OK
  • 실행 : 오류

오류 : 작업 ': app : dexDebug'.com.android.ide.common.process.ProcessException에 대한 실행 실패 : org.gradle.process.internal.ExecException : 프로세스 'command'C : \ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe ''0이 아닌 종료 값 2로 완료

내 gradle 파일 :

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

편집 : "compile fileTree (dir : 'libs', include : [ '* .jar'])"를 보지 못했습니다. 라이브러리를 두 번 컴파일하고 있으므로 주석으로 처리하십시오.

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

잘 작동합니다.


2
@JaredBurrows 내 경우의 문제는 내 응용 프로그램이 라이브러리를 두 번 컴파일하고 있다는 것입니다. "compile fileTree"(하나의 모든 libs 디렉토리를 컴파일)와 "compile ****"에 하나.
Maverick.pe

답변을 게시하고 올바른 것으로 표시해 주시겠습니까?
Jared Burrows

@JaredBurrows 완료. 감사합니다
Maverick.pe

내 게시물을 여기에서 확인하십시오. stackoverflow.com/a/33387368/740372
Sanjoy Saha

동일한 오류가 발생하지만 gradle 파일에 너무 많은 컴파일이 없습니다. 도와주세요. 이 질문을 게시했습니다 : stackoverflow.com/questions/34558251/… 나는 안드로이드 개발에 완전히 익숙하지 않습니다.
Ayusch

답변:


205

이 문제는 Android에서 부과 한 65K 메소드 덱스 한계를 초과했기 때문일 수 있습니다. 이 문제는 프로젝트를 청소하고, build.gradle 종속성에서 일부 사용되지 않는 라이브러리와 방법을 제거하여, 하나 해결 될 수있다 또는 multidex 지원을 추가하여.

따라서 라이브러리와 메소드를 유지해야하는 경우 gradle 구성에서 선언하여 멀티 덱스 지원을 사용할 수 있습니다.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

멀티 덱스 지원 및 65K 이상의 방법으로 앱 개발에 대한 자세한 내용은 여기를 참조하십시오 .


다행이다, 그것은 당신을 도왔다. @ 데이비드
minhazur

2
정말 도움이되어 주셔서 감사합니다.
Aayushi

4
그리고 시작 클래스의 메소드를 대체 한 후 : @Override protected void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (this); }
Gent Berani

와우, 잘 작동합니다. 이것이 문제가 될 것이라고 생각하지 마십시오.
Neela

정확히 오류의 원인을 확인하려면 다음과 같이 gradle 터미널을 통해 프로젝트를 빌드하십시오 ./gradlew assembleDebug --stacktrace --debug. 내 경우 에이 오류를 보았습니다com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

나에게 문제는 build.gradle에 불필요한 컴플라이언스 라이브러리 코드를 넣었다는 것입니다.

dependencies {
    compile 'com.google.android.gms:play-services:7.5.0'
}

이로 인해 65k 개가 넘는 메소드가 발생하여 제거하고, 등급 동기화, 프로젝트를 정리 한 다음 다시 실행 한 후이 오류가 중지되었습니다. 나는지도와 gcm 만 필요했기 때문에이 라인을 넣고 프로젝트를 동기화했습니다.

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

안녕하세요 사람들이 다시이 문제를 겪었고 이번에는 빌드 도구 버전을 변경했기 때문에 멀티 덱스를 활성화해야했습니다. 그래서이 앱의 build.gradle 파일을 추가했습니다.

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

그리고 Application 클래스를 확장하고이 메소드를 클래스 안에 포함하는 클래스를 작성하십시오.

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

OnCreate 메소드에도 포함

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

2
이것이 가장 좋은 해결책이므로 실제로 사용중인 라이브러리 만 포함해야합니다.
Roisgoen

2
나를 위해 일한다 !! "com.google.android.gms : play-services : 7.5.0" "을"com.google.android.gms : play-services-identity : 8.1.0 "으로 컴파일하도록 변경하여"com.google.android를 컴파일하십시오. gms : play-services-plus : 8.1.0 "
Oscar Calderon

1
좋은 점은 developers.google.com/android/guides/setup을 참조하십시오 -다양한 개별 라이브러리 목록을 제공 하십시오 .
Ed Manners

@ edsappfactory.com 나는 그것을 사용하고 수정했다고 언급했다.
Amit Tumkur

32

누군가가 여전히이 문제로 어려움을 겪고 있으며 왜 이것이 일어나고 고칠 수 있는지 실마리가 없다면. 실제로이 오류

오류 : ': app : dexDebug'작업에 대한 실행이 실패했습니다. > com.android.ide.common.process.ProcessException : org.gradle.process.internal.ExecException : 'command'C : \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe '프로세스 완료 0이 아닌 종료 값 2

여러 가지 이유가있을 수 있지만 JDK 버전과 관련이있는 것은 아니므로 잘못된 방향으로 시간을 낭비하지 마십시오. 이것이 일어나는 두 가지 주요 이유

  1. 여러 위치에 포함 된 동일한 라이브러리 또는 jar 파일이 있으며 그 중 일부는 서로 충돌합니다.
  2. 65k 메소드 한계에 도달했거나 이미 초과했습니다.

첫 번째 경우는 다음과 같이 수정 될 수 있습니다. 여러 번 포함시킨 종속성을 찾으십시오. 이 작업을 수행하려면 Android Studio 터미널에서 다음 명령을 실행하십시오.

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

이것은 모든 의존성을 반환하지만 lib 폴더에 포함 된 jar 파일은 별표 (*)로 표시된 중복을 제거하려고 시도하지만 항상 가능한 것은 아니지만 일부 경우 여전히 모듈을 제외하려고 시도 할 수 있습니다 여러 번 포함되어 있습니다. 이렇게 할 수 있습니다

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

방법 제한을 초과하는 두 번째 경우 제안 방법은 multiDexEnabled true를 defaultConfig에 추가 할 수없는 경우 포함 된 라이브러리 (첫 번째 솔루션과 같은 소리)를 제거하여 최소화하는 것입니다.

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

이 증가 방법에 제한이 있지만, 때문에 가능한 성능 문제의 할 수있는 최선의 일이 아니다 중요 에만 추가 multiDexEnabled truedefaultConfig실행하는 모든 장치에서 실제로 충분하지 않다 안드로이드 <5 롤리팝은 예상치 못한 행동과 발생합니다 NoClassDefFoundError. 그것을 해결하는 방법은 여기 에 설명되어 있습니다


18

나는 그때까지 "파일 fileree (dir : 'libs', include : [ '* .jar']) 포함 '을 몰랐다 .libs 폴더에 jar 확장명을 가진 모든 것을 컴파일하십시오. 윤곽:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

잘 작동합니다. 어쨌든 고마워! 내 잘못이야.


5
또는 다른 방법 : compile fileTree(dir: 'libs', include: ['*.jar'])gradle의 주석 . 그것은 나를 도왔다.
Tomasz Mularczyk

이 문제와 관련하여 다른 해결책이 있습니까? 각 jar 파일을 컴파일하지 않고 대신이 줄을 사용 compile fileTree(dir: 'libs', include: ['*.jar'])했지만 여전히 동일한 오류가 표시됩니다.
Kairi San

9

나는 같은 문제가 있었고 불필요한 라이브러리 제거를 수정했습니다.

compile fileTree(dir: 'libs', include: ['*.jar'])

해당 라이브러리를 제거했으며 문제없이 프로젝트를 실행할 수 있습니다.


슬라이딩 메뉴 클래스를 추가하려고 시도하고 메인 gradle에서 이것을 제거하는 것이 저에게 효과적이었습니다. 감사! :)
Lucas Senechal

6

디버그 빌드에 multiDex를 활성화하여 문제를 해결했습니다.

defaultConfig {
multiDexEnabled true
}

6

임베디드 JDK가 64 비트 이므로 임베디드 JDK를 거부합니다 (32 비트).

프로젝트-> 모듈 설정 열기 -> SDK 위치 -> 임베디드 JDk 사용을 선택 취소하고 JDK 경로를 설정하십시오 (예 : Ubuntu / usr / lib / jvm / java-8-openjdk-i386)


1
임베디드 JDK가 64 비트이기 때문에 이것이 효과가 있다고 생각합니다. 32 비트 컴퓨터에서 같은 문제가 발생했습니다.
루카스 노박

이로 인해 32 비트 시스템의 문제가 해결되었습니다. echo $JAVA_HOME경로 :
SANBI 샘플

예, 32 비트 컴퓨터와 관련이 있다는 것을 알고있었습니다. 감사합니다, Zacharia-저의 하루를 구했습니다!
Ilonpilaaja

5

가능한 문제 : dex 65k 메소드 한계를 초과했습니다. 문제가 발생하기 전에 라이브러리 나 여러 메소드를 추가했을 수 있습니까?


1
몇 개가 아니라 몇 가지 방법 만 있습니다.
Maverick.pe

흠, 가능하면 이전 버전의 프로젝트를 빌드하거나 사용하지 않는 라이브러리를 제거하고 다시 빌드하십시오
Artem Zinnatullin

나도 몇 가지 방법이있다
bowman han

3

SDK를 이미 업데이트했고 google-play-services도 사용하는 경우 다음과 같은 충돌이 있기 때문에 종속성을 관리해야합니다.

다음을 따르십시오 : 'com.google.android.gms : play-services : +'컴파일 'com.google.android.gms : play-services : 6.5.87'컴파일으로 대체

참고 : 여기 '6.5.87'은 Google Play 서비스 버전입니다. 도움이 되길 바랍니다 ..


2

프로젝트에서 .jar 파일의 충돌이라고 생각합니다.

libs 폴더와 그 작동에서 android-support-v4.jar을 제거했습니다 !!!

프로젝트에 오류가 발생하면 build.gradle 파일을 확인하십시오.

의존성 {

}


2

필자의 경우 문제는 내가 추가 한 새로운 라이브러리 (그라 데 의존성)가 다른 종속성에 의존하고 있었고 그 기본 종속성 중 2 개가 내 빌드 스크립트에서 다른 라이브러리 / 종속성의 일부 종속성과 충돌 / 충돌하고 있다는 것입니다. 특히, 나는 Validator이메일 검증을 위해 Apache Commons를 추가 했으며, 두 가지 종속성 (Apache Commons Logging및 Apache Commons Collections)이 Robolectric이 사용하는 것과 충돌했습니다 (빌드 경로에 동일한 라이브러리의 다른 버전이 있기 때문에). 따라서 modules새로운 종속성 ()을 추가 할 때 충돌하는 버전의 종속성 ( )을 제외했습니다 Validator.

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

다음 gradle 명령을 사용하여 gradle 모듈 (프로젝트에 하나의 모듈 만있을 수 있음)의 종속성을 볼 수 있습니다 (Android Studio / Intellij에서 프로젝트를 만든 경우 생성 된 gradle 래퍼를 사용합니다) 생각). 프로젝트의 루트 디렉토리에서이 명령을 실행하십시오.

./gradlew : YOUR-MODULE-NAME : 종속성

해당 exclude지시문을 추가 하고 실행을 다시 시도한 후 로깅 및 콜렉션과 같은 일부 Apache 공통 라이브러리에서 사용되는 duplicate file오류가 발생했습니다 NOTICE.txt. 패키징 할 때 해당 텍스트 파일을 제외해야했습니다. 내 build.gradle에서 다음을 추가했습니다.

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

새로운 라이브러리 ( Validator)는 약간 오래된 버전의 종속성 / 모듈 (이미 다른 라이브러리 (Robolectric)에 의해 내 빌드 경로로 가져온)에서 작동 할 수 있음이 밝혀졌습니다 . 이것은이 특정 라이브러리의 경우이지만 다른 라이브러리는 기본 종속성의 최신 API를 사용하고있을 수 있습니다 (이 경우 충돌하는 모듈 / 종속성에 의존하는 다른 라이브러리가 최신 버전 (이러한 라이브러리 항목에서 이전 버전의 모듈 / 종속성을 제외하여).


1

제 경우에는 2 개 이상의 라이브러리 충돌 (동일한 라이브러리이지만 다른 버전)이있을 때이 오류가 발생했습니다. 종속성 블록에서 앱 build.gradle을 확인하십시오.


1

확실하게 작동하는 두 가지 대안이 있습니다.

  1. 프로젝트를 정리 한 다음 빌드하십시오.

위의 방법으로 문제가 해결되지 않으면 다음을 시도하십시오.

  1. 앱 레벨에서 build.gradle 파일에 다음을 추가하십시오.

    defaultConfig {   
    
    multiDexEnabled true
    
    }

두 가지를 모두 시도했지만 새 오류가 발생했습니다 Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class. 다음에 어떻게해야합니까?
Kairi San


이 오류는 프로젝트의 중복 / 같은 패키지로 인해 발생합니다
Udit Kapahi

1

Java SDK를 최신 버전 1.7.0_79으로 업데이트하고 SDK Location아래를 업데이트하면 Project Structure문제가 해결되었습니다.


1

내 문제는

com.android.build.api.transform.TransformException : com.android.ide.common.process.ProcessException : org.gradle.process.internal.ExecException : Process 'command'/Library/Java/JavaVirtualMachines/jdk1.X.X_XX 0이 아닌 종료 값 2로 완료된 .jdk / Contents / Home / bin / java ''

나는 또한이 흔적을 가지고 있었다 :

잡히지 않은 번역 오류 : java.lang.IllegalArgumentException : 이미 추가됨 : Lcom / mypackage / ClassX;

문제는 두 개의 다른 라이브러리에 동일한 클래스를 추가한다는 것입니다. 라이브러리 중 하나에서 클래스 / jar 파일을 제거하면 프로젝트가 올바르게 실행됩니다.


정확히, 나는 같은 문제, 같은 클래스 서명을 얻었습니다. 다행히도 클래스였습니다. 그래서 리팩토링했습니다. 나는 여기에 답변을 썼다 : stackoverflow.com/a/35045501/3397345
Davideas

1

나를 위해 전체 플레이 스토어 종속성을 추가하고있었습니다.

'com.google.android.gms : play-services : 8.4.0'컴파일

그러나 Google지도 만 필요했기 때문에 더 구체적으로 만들었고 오류가 해결되었습니다.

'com.google.android.gms : play-services-maps : 8.4.0'컴파일


0

내 경우에는 23.0.0 rc3의 빌드 도구 버전이 22.0.1로 변경되어 문제가 해결되었습니다.


0

장치를 PC에 연결하기 위해 저품질 케이블 / 결함 케이블을 사용하고있을 수 있습니다. 케이블을 교체했는데 저에게 도움이되었습니다.


0

이 오류는 더 많은 수의 라이브러리를 사용하기 때문에 발생합니다. 내 경우 'compile'com.google.android.gms : play-services-9.4.0 '이 오류를 일으켰습니다.이 오류를 피하려면 필요한 라이브러리를 사용하십시오. 예를 들어 Google Play 서비스 종속성을 추가하는 동안 필요한 라이브러리 만 지정하십시오. 기본적으로 모든 라이브러리를 포함합니다 .Google Play 서비스 종속성을 추가하는 동안 기본적으로 모든 라이브러리가 포함됩니다.


0

귀하의 gradle.build파일에서 이것을 사용하십시오

"compile fileTree(dir: 'libs', include: ['*.jar'])"

그리고 잘 작동합니다.


0

정확히 오류의 원인을 확인하려면 다음과 같이 gradle 터미널을 통해 프로젝트를 빌드하십시오 ./gradlew assembleDebug --stacktrace --debug. 내 경우에 다음과 같은 오류가 발생했습니다.com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Google지도를 내 프로젝트에 통합하려고 할 때 발생했습니다. 문제를 해결하기 위해 포함 된 라이브러리를 간단히 확인했습니다.

compile 'com.google.android.gms:play-services:9.8.0'

나는 단순히 그것을

compile 'com.google.android.gms:play-services-maps:9.8.0'

그리고 문제는 사라졌다


0

프로젝트를로 변환 한 후 동일한 오류가 발생했습니다 Kotlin. 내 문제는 프로세스 중에 내 jre 위치가 잘못된 경로로 변경되었다는 것입니다 (왜 이런 일이 일어날 수 있는지 궁금합니다 ... 시간이 낭비되었습니다). 이를 수행하여 수정했습니다.

File > Project Structure > SDK Location 

Use embedded JDK이전 JDK 설치를 가리키는 옵션을 선택 취소하고 올바른 것을 선택하십시오.

/home/my_user/jdk1.8.0_101

이것을 변경하면 오류가 사라졌습니다.


0

나를 위해 일했다 :)

나는 7이었고, 다음으로 이동 이전에 최신 버전 8 자바 업그레이드 PROJ에 OPEN 모듈 설정을 마우스 오른쪽 버튼으로 클릭 요법과 JDK의 경로를 변경를 / usr / lib 디렉토리 / JVM을 / 자바-8-오라클 설치 한 새 자바 (8). 그리고 스튜디오를 다시 시작하십시오

Java 8 폴더 이름은 / usr / lib / jvm을 확인하십시오.

우분투를 사용하고 있습니다여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.