Java selesai dengan nilai keluar bukan nol 2 - Android Gradle

135

Saya mendapatkan kesalahan ini saat menjalankan aplikasi Android saya (saya membersihkannya dan kemudian membuatnya, tetapi kesalahan tersebut masih ada)

  • Sinkronisasi: Oke
  • Buat Proyek: OK
  • Bersih: OK
  • Jalankan: Kesalahan

Kesalahan: Eksekusi gagal untuk tugas ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' selesai dengan nilai keluar bukan nol 2

File gradle saya:

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: Saya tidak melihat "kompilasi fileTree (dir: 'libs', include: ['* .jar'])" itu mengkompilasi dua kali perpustakaan saya, jadi saya hanya berkomentar:

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

dan itu bekerja dengan baik.

Maverick.pe
sumber
2
@JaredBurrows Masalah dalam kasus saya adalah bahwa aplikasi saya mengkompilasi dua kali perpustakaan .. satu di "kompilasi fileTree" (mengkompilasi semua direktori libs Anda) dan "kompilasi ****".
Maverick.pe
Bisakah Anda memposting jawaban dan menandainya dengan benar?
Jared Burrows
@JaredBurrows selesai. Terima kasih
Maverick.pe
silakan lihat posting saya di sini stackoverflow.com/a/33387368/740372
Sanjoy Saha
Saya mengalami kesalahan yang sama tetapi file gradle saya tidak memiliki banyak kompilasi. Tolong bantu. Saya memposting pertanyaan ini: stackoverflow.com/questions/34558251/… Saya benar-benar baru dalam pengembangan android.
Ayusch

Jawaban:

205

Masalah ini sangat mungkin karena melebihi batas 65K metode dex yang diberlakukan oleh Android. Masalah ini dapat diselesaikan baik dengan membersihkan proyek, dan menghapus beberapa pustaka dan metode yang tidak digunakan dari dependensi di build.gradle, ATAU dengan menambahkan dukungan multidex.

Jadi, Jika Anda harus menyimpan pustaka dan metode, Anda dapat mengaktifkan dukungan multi dex dengan mendeklarasikannya di konfigurasi gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Anda dapat membaca lebih lanjut tentang dukungan multidex dan mengembangkan aplikasi dengan lebih dari 65 ribu metode di sini .

minhazur.dll
sumber
senang itu, itu membantu Anda. @ David
minhazur
2
Terima kasih banyak, ini membantu saya
Aayushi
4
Dan setelah itu ganti metode di kelas startup: @Override protected void attachBaseContext (Context base) {super.attachBaseContext (base); MultiDex.install (ini); }
Gent Berani
Wow, berhasil dengan baik. Tidak pernah terpikir bahwa ini mungkin masalahnya.
Neela
Jika Anda ingin melihat apa yang sebenarnya menyebabkan kesalahan, coba buat proyek Anda melalui terminal gradle, seperti ini ./gradlew assembleDebug --stacktrace --debug. Saya telah melihat kesalahan ini dalam kasus sayacom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef
93

Bagi saya masalahnya adalah, saya telah meletakkan kode perpustakaan complie yang tidak perlu di build.gradle

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

yang menyebabkan lebih dari 65 ribu metode, jadi hapus, sinkronisasi gradle, bersihkan proyek, lalu jalankan lagi dan kesalahan ini berhenti. Saya hanya membutuhkan peta dan gcm jadi saya meletakkan garis-garis ini dan proyek yang disinkronkan

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

Hai orang-orang, saya lagi mengalami masalah ini dan kali ini karena mengubah versi alat build dan itu benar-benar mengharuskan saya untuk mengaktifkan multidex .. jadi saya menambahkan ini file build.gradle aplikasi saya ..

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

Dan buat kelas yang memperluas kelas Aplikasi dan menyertakan metode ini di dalam kelas ..

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

juga termasuk dalam metode OnCreate juga

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}
Amit Tumkur
sumber
2
Ini adalah solusi terbaik, Anda hanya boleh menyertakan pustaka yang sebenarnya Anda gunakan.
Roisgoen
2
bekerja untuk saya !! ubah "compile 'com.google.android.gms: play-services: 7.5.0'" menjadi compile "com.google.android.gms: play-services-identity: 8.1.0" compile "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon
1
Bagus, lihat juga: developers.google.com/android/guides/setup - berikan daftar berbagai perpustakaan individu.
Ed Manners
@ edsappfactory.com saya merujuk itu, digunakan dan dimodifikasi.
Amit Tumkur
32

Untuk berjaga-jaga jika seseorang masih berjuang dengan ini dan tidak tahu mengapa ini terjadi dan bagaimana cara memperbaikinya. Ternyata kesalahan ini

Kesalahan: Eksekusi gagal untuk tugas ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe '' selesai dengan nilai keluar bukan nol 2

dapat memiliki banyak alasan untuk terjadi tetapi tentu saja bukan sesuatu yang terkait dengan versi JDK Anda jadi jangan buang waktu Anda ke arah yang salah. Ini adalah dua alasan utama terjadinya hal ini

  1. Anda memiliki perpustakaan atau file jar yang sama termasuk beberapa tempat dan beberapa di antaranya saling bertentangan.
  2. Anda akan atau sudah melampaui batas metode 65k

Kasus pertama dapat diperbaiki sebagai berikut: Cari tahu dependensi mana yang telah Anda sertakan beberapa kali. Untuk melakukan ini jalankan perintah berikut di terminal android studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

ini akan mengembalikan semua dependensi tetapi file jar yang Anda sertakan dari folder lib mencoba menghilangkan duplikasi yang ditandai dengan asterisk (*), ini tidak selalu memungkinkan tetapi dalam beberapa kasus Anda masih dapat melakukannya, setelah ini coba untuk mengecualikan modul yang disertakan berkali-kali, Anda dapat melakukannya seperti ini

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

Untuk kasus kedua saat Anda melebihi saran batas metode adalah mencoba meminimalkannya dengan menghapus pustaka yang disertakan (catatan terdengar seperti solusi pertama) jika tidak ada cara untuk melakukannya, tambahkan multiDexEnabled true ke defaultConfig Anda

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

batas metode meningkat ini, tapi itu bukan hal terbaik untuk dilakukan karena kemungkinan masalah kinerja PENTING menambahkan hanya multiDexEnabled trueuntuk defaultConfigtidak cukup bahkan pada semua perangkat yang menjalankan Android <5 Lollipop itu akan menghasilkan perilaku tak terduga dan NoClassDefFoundError. bagaimana mengatasinya dijelaskan di sini

Vilen
sumber
18

Saya tidak tahu (saat itu) bahwa "kompilasi fileTree (dir: 'libs', include: ['* .jar'])" mengkompilasi semua yang memiliki ekstensi jar di folder libs, jadi saya hanya mengomentari (atau menghapus) ini garis:

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

dan itu bekerja dengan baik. Terima kasih! Salahku.

Maverick.pe
sumber
5
atau sebaliknya: beri komentar compile fileTree(dir: 'libs', include: ['*.jar'])dalam gradle. Itu telah membantu saya.
Tomasz Mularczyk
apakah ada solusi lain terkait masalah ini? saya tidak mengkompilasi setiap file jar tetapi hanya menggunakan baris ini compile fileTree(dir: 'libs', include: ['*.jar'])tetapi masih menunjukkan kesalahan yang sama.
Kairi San
9

Saya memiliki masalah yang sama dan saya memperbaiki menghapus perpustakaan yang tidak perlu

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

Saya menghapus perpustakaan itu dan saya dapat menjalankan proyek tanpa masalah.

Alexiscanny
sumber
Saya mencoba untuk menambahkan kelas slidingMenu dan menghapus ini dari kelas utama saya berhasil untuk saya. Terima kasih! :)
Lucas Senechal
6

Milik saya diselesaikan dengan mengaktifkan multiDex untuk build debug.

defaultConfig {
multiDexEnabled true
}
Armin
sumber
6

Saya Tolak JDK Tertanam (dalam 32bit) karena JDK yang disematkan adalah 64bit

Klik kanan Proyek Anda -> Buka Pengaturan Modul -> Lokasi SDK -> Hapus centang Gunakan JDk tertanam kemudian atur Jalur JDK Anda, misalnya di Ubuntu / usr / lib / jvm / java-8-openjdk-i386

ugali lembut
sumber
1
Saya pikir ini berfungsi karena JDK yang disematkan adalah 64bit. Saya memiliki masalah yang sama pada mesin 32bit saya.
Lukas Novak
Ini memperbaiki masalah pada mesin 32-bit saya. echo $JAVA_HOMEuntuk jalur
sampel SANBI
Ya, saya tahu itu ada hubungannya dengan mesin saya yang 32-bit. Terima kasih, Zacharia - menyelamatkan hariku!
Ilonpilaaja
5

Kemungkinan masalah: Anda telah melebihi batas metode dex 65k, mungkinkah Anda menambahkan beberapa pustaka atau beberapa metode sebelum masalah terjadi?

Artem Zinnatullin
sumber
1
Tidak banyak .. hanya beberapa metode.
Maverick.pe
Hm, coba buat versi proyek sebelumnya atau hapus pustaka yang tidak digunakan jika memungkinkan dan lakukan rekondisi
Artem Zinnatullin
Saya hanya punya beberapa metode juga
pemanah han
3

Jika Anda telah memperbarui SDK Anda dan Anda juga menggunakan layanan-google-maka Anda perlu menjaga ketergantungan karena ada beberapa jenis konflik dengan:

Ikuti di bawah ini: kompilasi 'com.google.android.gms: play-services: +' Replace by compile 'com.google.android.gms: play-services: 6.5.87'

Catatan: Di sini '6.5.87' adalah versi layanan google-play. Saya harap ini akan membantu ..

Maddy
sumber
2

Saya pikir itu konflik file .jar dalam proyek Anda.

Saya telah menghapus android-support-v4.jar dari folder libs dan berfungsi !!!

jika proyek Anda memberikan kesalahan, periksa file build.gradle Anda

ketergantungan {

}

Samir Mangroliya
sumber
2

Dalam kasus saya, masalahnya adalah bahwa pustaka baru (ketergantungan gradle) yang saya tambahkan mengandalkan beberapa dependensi lain dan dua dari dependensi yang mendasarinya saling bertentangan / bentrok dengan beberapa dependensi library / dependensi lain dalam skrip build saya. Secara khusus, saya menambahkan Apache Commons Validator(untuk validasi email), dan dua dependensinya (Apache Commons Loggingdan Apache Commons Collections) berkonflik dengan yang digunakan oleh Robolectric (karena versi berbeda dari pustaka yang sama hadir di jalur build saya). Jadi saya mengecualikan versi dependensi ( modules) yang bertentangan tersebut saat menambahkan dependensi baru (the Validator):

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

Anda dapat melihat dependensi modul gradle Anda (Anda mungkin hanya memiliki satu modul dalam proyek Anda) menggunakan perintah gradle berikut (saya menggunakan gradle wrapper yang dibuat untuk Anda jika Anda telah membuat proyek di Android Studio / Intellij Ide). Jalankan perintah ini di direktori root proyek Anda:

./gradlew: YOUR-MODULE-NAME: dependensi

Setelah menambahkan excludearahan tersebut dan mencoba kembali untuk menjalankan, saya mendapat pesan duplicate filekesalahan NOTICE.txtyang digunakan oleh beberapa perpustakaan apache commons seperti Logging dan Koleksi. Saya harus mengecualikan file teks itu saat mengemas. Di build.gradle saya, saya menambahkan:

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

Ternyata pustaka baru (the Validator) dapat bekerja dengan versi yang sedikit lebih lama dari dependensi / modulnya (yang sudah diimpor ke jalur build saya oleh pustaka lain (Robolectric)). Ini adalah kasus dengan pustaka khusus ini, tetapi pustaka lain mungkin menggunakan API terbaru dari dependensi yang mendasarinya (dalam hal ini Anda harus mencoba untuk melihat apakah pustaka lain yang bergantung pada modul / ketergantungan yang berkonflik dapat bekerja dengan versi yang lebih baru (dengan mengecualikan versi modul / dependecy yang lebih lama di bawah entri perpustakaan itu)).

Javad Sadeqzadeh
sumber
1

Dalam kasus saya, saya mendapat kesalahan ini ketika ada 2 atau lebih perpustakaan konflik (perpustakaan yang sama tetapi versi berbeda). Periksa aplikasi Anda build.gradle di blok dependensi.

Phuc Tran
sumber
1

Ada dua alternatif yang pasti berhasil:

  1. Bersihkan proyek Anda lalu bangun.

Jika metode di atas tidak berhasil, coba yang berikutnya.

  1. Tambahkan baris berikut ke file build.gradle di tingkat aplikasi

    defaultConfig {   
    
    multiDexEnabled true
    
    }
    
Udit Kapahi
sumber
saya mencoba keduanya, tetapi saya mendapat kesalahan baru Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, apa yang harus saya lakukan selanjutnya?
Kairi San
kesalahan ini terjadi karena duplikat / paket yang sama dalam proyek Anda
Udit Kapahi
1

Memperbarui Java SDK saya ke versi terbaru 1.7.0_79dan memperbarui yang di SDK Locationbawah Project Structurememecahkan masalah bagi saya.

TheIT
sumber
1

Masalah saya adalah selain memiliki

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Proses 'perintah' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Contents / Home / bin / java '' selesai dengan nilai keluar bukan nol 2

Saya memiliki jejak ini juga:

Kesalahan terjemahan tidak tertangkap: java.lang.IllegalArgumentException: sudah ditambahkan: Lcom / mypackage / ClassX;

Masalahnya adalah saya menambahkan kelas yang sama di dua perpustakaan yang berbeda. Dengan menghapus file kelas / jar dari salah satu perpustakaan, proyek akan berjalan dengan baik

mromer
sumber
Persis, saya mendapat masalah yang sama, tanda tangan kelas yang sama, untungnya itu adalah kelas saya jadi saya refactor. Saya menulis jawabannya di sini: stackoverflow.com/a/35045501/3397345
Davideas
1

Bagi saya, saya menambahkan seluruh dependensi playstore

kompilasi 'com.google.android.gms: play-services: 8.4.0'

Tetapi saya hanya membutuhkan peta google, jadi saya membuatnya lebih spesifik dan kesalahan telah teratasi.

kompilasi 'com.google.android.gms: play-services-maps: 8.4.0'

Ajji
sumber
0

dalam kasus saya masalah adalah membangun versi alat yang 23.0.0 rc3 dan saya berubah menjadi 22.0.1 dan masalah saya diperbaiki.

maks
sumber
0

Anda mungkin menggunakan kabel berkualitas rendah / kabel cacat untuk menghubungkan perangkat Anda ke PC, saya mengganti kabel dan itu berfungsi untuk saya.

Mushtaq Jameel
sumber
0

Kesalahan ini karena menggunakan lebih banyak jumlah perpustakaan. Dalam kasus saya 'kompilasi' com.google.android.gms: play-services-9.4.0 'menyebabkan kesalahan ini.Untuk menghindari kesalahan ini gunakan perpustakaan yang diperlukan. Misalnya jika Anda ingin untuk menggunakan Maps di aplikasi Anda. Kemudian gunakan compile 'com.google.android.gms: play-services-maps: 9.4.0'. sementara menambahkan ketergantungan layanan google play, tentukan library yang diperlukan saja. secara default mencakup semua library.

Rajesh.k
sumber
0

Di gradle.buildfile Anda , Gunakan ini

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

Dan itu bekerja dengan baik.

Rishabh Mahatha
sumber
0

Jika Anda ingin melihat apa yang sebenarnya menyebabkan kesalahan, coba buat proyek Anda melalui terminal gradle, seperti ini ./gradlew assembleDebug --stacktrace --debug. Saya telah melihat kesalahan berikut dalam kasus sayacom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Ini terjadi ketika saya mencoba memasukkan Google Maps ke proyek saya. Untuk memperbaikinya, saya cukup memeriksa perpustakaan yang saya sertakan

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

Saya hanya mengubahnya menjadi

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

dan masalah hilang

NecipAllef
sumber
0

Saya mengalami kesalahan yang sama setelah mengonversi proyek saya ke Kotlin. Masalah saya adalah lokasi jre saya diubah ke jalur yang tidak valid selama proses (saya bertanya-tanya mengapa ini bisa terjadi ... membuat saya membuang waktu). Perbaiki dengan melakukan ini:

File > Project Structure > SDK Location 

Hapus centang Use embedded JDKopsi, yang mengarah ke instalasi JDK lama, dan pilih yang benar:

/home/my_user/jdk1.8.0_101

Setelah mengubah ini, kesalahan tersebut menghilang

voghDev
sumber
0

BEKERJA UNTUK SAYA :)

saya mengupgrade java ke versi 8 terbaru sebelumnya 7 dan kemudian pergi ke OPEN MODULE SETTING klik kanan pada proyek dan mengubah jalur jdk ke / usr / lib / jvm / java-8-oracle , java 8 baru diinstal. Dan mulai ulang studio

periksa di / usr / lib / jvm untuk nama folder java 8

Saya menggunakan ubuntumasukkan deskripsi gambar di sini

jayant singh
sumber