Java kết thúc với giá trị thoát không bằng 2 - Android Gradle


135

Tôi đang gặp lỗi này khi thực thi ứng dụng Android của mình (Tôi đã xóa nó và sau đó xây dựng nó, nhưng lỗi vẫn còn)

  • Đồng bộ hóa: OK
  • Lập dự án: OK
  • Sạch sẽ
  • Chạy: Lỗi

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: dexDebug' _25 \ bin \ java.exe '' kết thúc với giá trị thoát khác không 2

Tập tin lớp của tôi:

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')
}

EDIT: Tôi không thấy "compile fileTree (dir: 'libs', bao gồm: ['* .jar'])" nó đã biên dịch hai lần thư viện của tôi, vì vậy tôi chỉ nhận xét:

//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')

và nó hoạt động tốt.


2
@JaredBurrows Vấn đề trong trường hợp của tôi là ứng dụng của tôi đã biên dịch hai lần các thư viện .. một trên "compile fileTree" (biên dịch tất cả thư mục libs của bạn) và "biên dịch ****".
Maverick.pe

Bạn có thể xin vui lòng gửi một câu trả lời và đánh dấu nó chính xác?
Jared Burrows

@JaredBurrows xong. Cảm ơn
Maverick.pe

vui lòng kiểm tra bài viết của tôi ở đây stackoverflow.com/a/33387368/740372
Sanjoy Saha

Tôi có cùng một lỗi nhưng tập tin lớp của tôi không có quá nhiều biên dịch. Xin vui lòng giúp đỡ. Tôi đã đăng câu hỏi này: stackoverflow.com/questions 432558251 / Tôi Tôi hoàn toàn mới đối với sự phát triển của Android.
Ayusch

Câu trả lời:


205

Vấn đề này hoàn toàn có thể do vượt quá giới hạn 65 nghìn phương thức dex do Android áp đặt. Vấn đề này có thể được giải quyết bằng cách làm sạch dự án và loại bỏ một số thư viện và phương thức không sử dụng khỏi các phụ thuộc trong build.gradle, HOẶC bằng cách thêm hỗ trợ multidex.

Vì vậy, nếu bạn phải giữ các thư viện và phương thức, thì bạn có thể kích hoạt hỗ trợ multi dex bằng cách khai báo nó trong cấu hình gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Bạn có thể đọc thêm về hỗ trợ multidex và phát triển ứng dụng với hơn 65 nghìn phương pháp tại đây .


rất vui vì điều đó đã giúp bạn @ David
minhazur

2
Cảm ơn bạn rất nhiều nó đã giúp tôi
Aayushi

4
Và sau đó ghi đè phương thức trong lớp khởi động: @Override được bảo vệ void AttachBaseContext (cơ sở ngữ cảnh) {super.attachBaseContext (cơ sở); MultiDex.install (cái này); }
Gent Berani

Wow, nó hoạt động rất tốt. Không bao giờ nghĩ rằng đây có thể là vấn đề.
Neela

Nếu bạn muốn xem chính xác điều gì gây ra lỗi, hãy thử xây dựng dự án của bạn thông qua thiết bị đầu cuối lớp, như thế này ./gradlew assembleDebug --stacktrace --debug. Tôi đã thấy lỗi này trong trường hợp của mìnhcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

Đối với tôi, vấn đề là, tôi đã đặt mã thư viện tuân thủ không cần thiết vào build.gradle

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

đã gây ra hơn 65 nghìn phương thức, vì vậy đã xóa nó, đồng bộ hóa lớp, dự án được làm sạch, và sau đó chạy lại và sau đó lỗi này dừng lại. Tôi chỉ cần bản đồ và gcm vì vậy tôi đặt những dòng này và dự án được đồng bộ hóa

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

Xin chào mọi người, tôi lại gặp phải vấn đề này và lần này là do thay đổi phiên bản công cụ xây dựng và nó thực sự yêu cầu tôi kích hoạt multidex..tôi đã thêm các tệp build.gradle của ứng dụng này ..

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'
}

Và tạo một lớp mở rộng lớp Ứng dụng và bao gồm phương thức này bên trong lớp ..

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

cũng bao gồm trong phương thức OnCreate

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

2
Đây là giải pháp tốt nhất, bạn chỉ nên bao gồm các thư viện bạn thực sự đang sử dụng.
Roisgoen

2
làm việc cho tôi !! thay đổi "biên dịch 'com.google.android.gms: play-services: 7.5.0'" để biên dịch "com.google.android.gms: play-services-nhận dạng: 8.1.0" biên dịch "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon

1
Một cái hay, cũng tham khảo: developers.google.com/android/guides/setup - cung cấp danh sách các thư viện riêng lẻ khác nhau.
Ed Manners

@ edsappfactory.com tôi đã giới thiệu rằng, được sử dụng và sửa đổi.
Amit Tumkur

32

Chỉ trong trường hợp nếu ai đó vẫn đang vật lộn với điều này và không có manh mối tại sao điều này xảy ra và làm thế nào để khắc phục. Trong thực tế lỗi này

Lỗi: Thực thi không thành công cho nhiệm vụ ': app: dexDebug'. > com.android.ide.common. Process.ProcessException: org.gradle. process.i INTERNal.ExecException: Process 'lệnh' C: \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe '' đã kết thúc với giá trị thoát không bằng 2

có thể có nhiều lý do để xảy ra nhưng chắc chắn không có gì liên quan đến phiên bản JDK của bạn vì vậy đừng lãng phí thời gian của bạn sai hướng. Đây là hai lý do chính cho điều này xảy ra

  1. Bạn có cùng thư viện hoặc tệp jar bao gồm một số vị trí và một số trong số chúng xung đột với nhau.
  2. Bạn sắp hoặc đã vượt quá giới hạn phương pháp 65k

Trường hợp đầu tiên có thể được sửa chữa như sau: Tìm hiểu những phụ thuộc mà bạn đã bao gồm nhiều lần. Để thực hiện việc này, hãy chạy lệnh sau trong thiết bị đầu cuối android studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

điều này sẽ trả về tất cả các phụ thuộc nhưng các tệp jar mà bạn đưa vào từ thư mục lib cố gắng loại bỏ trùng lặp được đánh dấu bằng dấu hoa thị (*), điều này không phải lúc nào cũng có thể nhưng trong một số trường hợp bạn vẫn có thể làm điều đó, sau đó hãy cố gắng loại trừ các mô-đun được bao gồm nhiều lần, bạn có thể làm như thế này

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

Đối với trường hợp thứ hai khi bạn vượt quá đề xuất giới hạn phương thức là cố gắng giảm thiểu nó bằng cách xóa các thư viện đi kèm (ghi chú nghe giống như giải pháp đầu tiên) nếu không có cách nào để thêm đaDexEnables đúng vào defaultConfig của bạn

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

điều này làm tăng giới hạn phương thức nhưng nó không phải là điều tốt nhất để làm vì các vấn đề hiệu năng có thể QUAN TRỌNG chỉ thêm multiDexEnabled truevào defaultConfiglà không đủ trên thực tế trên tất cả các thiết bị chạy Android <5 Lollipop, nó sẽ dẫn đến hành vi không mong muốn và NoClassDefFoundError. làm thế nào để giải quyết nó được mô tả ở đây


18

Tôi không biết (lúc đó) rằng "biên dịch fileTree (dir: 'libs', bao gồm: ['* .jar'])" biên dịch tất cả những gì có phần mở rộng jar trên thư mục libs, vì vậy tôi chỉ nhận xét (hoặc xóa) dòng:

//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')

và nó hoạt động tốt. Dẫu sao cũng xin cảm ơn! Lỗi của tôi.


5
hoặc cách khác xung quanh: bình luận compile fileTree(dir: 'libs', include: ['*.jar'])trong lớp. Nó đã giúp tôi.
Tomasz Mularchot

Có giải pháp nào khác liên quan đến vấn đề này không? Tôi đã không biên dịch từng tệp jar nhưng thay vào đó chỉ sử dụng dòng này compile fileTree(dir: 'libs', include: ['*.jar'])nhưng nó vẫn hiển thị cùng một lỗi.
Kairi San

9

Tôi đã có cùng một vấn đề và tôi đã sửa bỏ thư viện không cần thiết

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

Tôi đã xóa thư viện đó và tôi có thể chạy dự án mà không gặp vấn đề gì.


Tôi đã cố gắng thêm lớp trượtMothy và loại bỏ lớp này khỏi lớp chính của tôi làm việc cho tôi. Cảm ơn! :)
Lucas Senechal

6

Của tôi đã được giải quyết bằng cách kích hoạt multiDex cho các bản dựng gỡ lỗi.

defaultConfig {
multiDexEnabled true
}

6

Tôi từ chối JDK nhúng (trong 32 bit) vì JDK nhúng là 64 bit

Nhấp chuột phải vào Dự án của bạn -> Mở Cài đặt mô-đun -> Vị trí SDK -> Bỏ chọn Sử dụng JDk được nhúng sau đó đặt Đường dẫn JDK của bạn, ví dụ: trong Ubuntu / usr / lib / jvm / java-8-openjdk-i386


1
Tôi nghĩ rằng điều này hoạt động vì JDK nhúng là 64 bit. Tôi đã có vấn đề tương tự trên máy 32 bit của tôi.
Lukas Novak

Điều này đã khắc phục sự cố trên máy 32 bit của tôi. echo $JAVA_HOMEcho đường dẫn
mẫu SANBI

Có, tôi biết nó phải làm với máy của tôi là 32 bit. Cảm ơn bạn, Zacharia - đã cứu ngày của tôi!
Ilonpilaaja

5

Vấn đề có thể xảy ra: Bạn đã vượt quá giới hạn phương thức 65k của dex, có thể bạn đã thêm một số thư viện hoặc một số phương pháp trước khi xảy ra sự cố?


1
Không phải vài .. chỉ là một vài phương pháp.
Maverick.pe

Hừm, cố gắng xây dựng phiên bản dự án trước đó hoặc xóa các thư viện không sử dụng nếu có thể và thực hiện xây dựng lại
Artem Zinnatullin

Tôi cũng có một vài phương pháp
Bowman han

3

Nếu bạn đã cập nhật SDK của mình và Bạn cũng đang sử dụng google-play-services thì bạn cần quan tâm đến sự phụ thuộc vì có một số loại xung đột với:

Thực hiện theo các bước bên dưới: biên dịch 'com.google.android.gms: play-services: +' Thay thế bằng biên dịch 'com.google.android.gms: play-services: 6.5.87'

Lưu ý: Ở đây '6.5.87' là phiên bản dịch vụ google-play. Tôi mong nó sẽ có ích..


2

Tôi nghĩ đó là xung đột của tập tin .jar trong dự án của bạn.

Tôi đã gỡ bỏ android-support-v4.jar khỏi thư mục libs và nó đang hoạt động !!!

nếu dự án của bạn có lỗi, hãy kiểm tra tệp build.gradle của bạn

phụ thuộc {

}


2

Trong trường hợp của tôi, vấn đề là thư viện mới (phụ thuộc lớp) mà tôi đã thêm đang phụ thuộc vào một số phụ thuộc khác và hai trong số các phụ thuộc cơ bản đó đã xung đột / xung đột với một số phụ thuộc của các thư viện / phụ thuộc khác trong tập lệnh xây dựng của tôi. Cụ thể, tôi đã thêm Apache Commons Validator(để xác thực email) và hai trong số các phụ thuộc của nó (Apache Commons Loggingvà Apache Commons Collections) đã mâu thuẫn với những thứ được sử dụng bởi Robolectric (vì các phiên bản khác nhau của cùng các thư viện đã có trong đường dẫn xây dựng của tôi). Vì vậy, tôi đã loại trừ các phiên bản phụ thuộc xung đột đó ( modules) khi thêm phụ thuộc mới (the Validator):

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

Bạn có thể thấy các phụ thuộc của (các) mô-đun lớp của bạn (bạn có thể chỉ có một mô-đun trong dự án của mình) bằng cách sử dụng lệnh gradle sau (Tôi sử dụng trình bao bọc lớp được tạo cho bạn nếu bạn đã tạo dự án của mình trong Android Studio / Intellij Ý tưởng). Chạy lệnh này trong thư mục gốc của dự án của bạn:

./gradlew: Your-MODULE-NAME: phụ thuộc

Sau khi thêm các excludechỉ thị đó và thử lại để chạy, tôi đã duplicate filegặp lỗi cho NOTICE.txtmột số thư viện commache commons như Logging và Coll Collection. Tôi đã phải loại trừ tập tin văn bản đó khi đóng gói. Trong bản build.gradle của tôi, tôi đã thêm:

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

Hóa ra thư viện mới (the Validator) có thể hoạt động với các phiên bản phụ thuộc / mô-đun cũ hơn một chút (đã được nhập vào đường dẫn xây dựng của tôi bởi một thư viện khác (Robolectric)). Đây là trường hợp với thư viện cụ thể này, nhưng các thư viện khác có thể đang sử dụng API mới nhất của các phụ thuộc cơ bản (trong trường hợp đó bạn phải thử xem liệu các thư viện khác dựa trên mô-đun / phụ thuộc xung đột có thể hoạt động với phiên bản mới hơn (bằng cách loại trừ phiên bản cũ hơn của mô-đun / phụ thuộc theo các mục của các thư viện đó)).


1

Trong trường hợp của tôi, tôi đã gặp lỗi này khi có 2 hoặc nhiều thư viện xung đột (cùng một thư viện nhưng các phiên bản khác nhau). Kiểm tra build.gradle ứng dụng của bạn trong khối phụ thuộc.


1

Có hai lựa chọn thay thế sẽ hoạt động chắc chắn:

  1. Làm sạch dự án của bạn và sau đó xây dựng.

Nếu phương pháp trên không hiệu quả, hãy thử tiếp theo.

  1. Thêm tệp sau vào tệp build.gradle ở cấp ứng dụng

    defaultConfig {   
    
    multiDexEnabled true
    
    }

Tôi đã thử cả hai, nhưng tôi có một lỗi mới Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, tôi nên làm gì tiếp theo?
Kairi San


lỗi này xảy ra do các gói trùng lặp / giống nhau trong dự án của bạn
Udit Kapahi

1

Cập nhật SDK Java của tôi lên phiên bản mới nhất 1.7.0_79và cập nhật phần SDK Locationdưới đã Project Structuregiải quyết vấn đề cho tôi.


1

Vấn đề của tôi là ngoài việc có

com.android.build.api.transform.TransformException: com.android.ide.common. Process.ProcessException: org.gradle. Process.i INTERNal.ExecException: Process 'lệnh' /L Library / Java / JavaVirtualMachines / jd.X .jdk / Nội dung / Trang chủ / bin / java '' kết thúc với giá trị thoát khác không 2

Tôi cũng có dấu vết này:

Lỗi dịch chưa được mã hóa: java.lang.IllegalArgumentException: đã thêm: Lcom / mypackage / ClassX;

Vấn đề là tôi đã thêm cùng một lớp trong hai thư viện khác nhau. Xóa tệp class / jar khỏi một trong các thư viện, dự án chạy đúng


Chính xác, tôi có cùng một vấn đề, cùng chữ ký lớp, may mắn thay đó là lớp của tôi nên tôi đã tái cấu trúc nó. Tôi đã viết câu trả lời ở đây: stackoverflow.com/a/35045501/3397345
Davideas

1

Đối với tôi, tôi đã thêm toàn bộ phụ thuộc của Playstore

biên dịch 'com.google.android.gms: play-services: 8.4.0'

Nhưng tôi chỉ cần google map, vì vậy tôi đã làm cho nó cụ thể hơn và lỗi đã được giải quyết.

biên dịch 'com.google.android.gms: play-services-maps: 8.4.0'


0

trong trường hợp của tôi, vấn đề là phiên bản công cụ xây dựng là 23.0.0 RC3 và tôi đã thay đổi thành 22.0.1 và vấn đề của tôi đã được khắc phục.


0

Bạn có thể đang sử dụng cáp chất lượng thấp / cáp bị lỗi để kết nối thiết bị của bạn với PC, tôi đã thay thế cáp và nó hoạt động với tôi.


0

Lỗi này là do sử dụng số lượng thư viện nhiều hơn. Trong trường hợp của tôi 'biên dịch' com.google.android.gms: play-services-9.4.0 'đã gây ra lỗi này. Để tránh lỗi này, hãy sử dụng các thư viện cần thiết. Ví dụ: nếu bạn muốn để sử dụng Bản đồ trong ứng dụng của bạn. Sau đó, hãy sử dụng biên dịch 'com.google.android.gms: play-services-maps: 9.4.0'. Trong khi thêm phụ thuộc vào dịch vụ google play chỉ định các thư viện cần thiết.


0

Trong gradle.buildtập tin của bạn , sử dụng này

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

Và nó hoạt động tốt.


0

Nếu bạn muốn xem chính xác điều gì gây ra lỗi, hãy thử xây dựng dự án của bạn thông qua thiết bị đầu cuối lớp, như thế này ./gradlew assembleDebug --stacktrace --debug. Tôi đã thấy lỗi sau trong trường hợp của tôicom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Điều này xảy ra khi tôi đang cố gắng giao phó Google Maps cho dự án của mình. Để sửa nó, tôi chỉ cần kiểm tra các thư viện tôi đang đưa vào

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

Tôi chỉ đơn giản là thay đổi nó thành

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

và vấn đề đã biến mất


0

Tôi đã có cùng một lỗi sau khi chuyển đổi dự án của tôi thành Kotlin. Vấn đề của tôi là vị trí jre của tôi đã bị thay đổi thành một đường dẫn không hợp lệ trong quá trình này (tôi tự hỏi tại sao điều này có thể xảy ra ... khiến tôi lãng phí thời gian). Đã sửa nó bằng cách này:

File > Project Structure > SDK Location 

Bỏ Use embedded JDKchọn tùy chọn đã trỏ đến bản cài đặt JDK cũ và chọn đúng tùy chọn:

/home/my_user/jdk1.8.0_101

Sau khi thay đổi, lỗi này biến mất


0

ĐÃ LÀM CHO TÔI :)

Tôi đã nâng cấp java lên phiên bản 8 mới nhất trước đó là 7 và sau đó vào OPEN MODULE SETTING nhấp chuột phải vào proj ect và thay đổi đường dẫn jdk thành / usr / lib / jvm / java-8-orory cài đặt java 8 mới. Và khởi động lại studio

đăng ký / usr / lib / jvm cho tên thư mục java 8

Tôi đang sử dụng Ubuntunhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.