Java sıfırdan farklı çıkış değeri 2 ile tamamlandı - Android Gradle


135

Android uygulamamı yürütürken bu hatayı alıyorum (temizledim ve sonra oluşturdum, ancak hata hala mevcut)

  • Senkronizasyon: Tamam
  • Proje Yap: Tamam
  • Temiz: Tamam
  • Çalıştır: Hata

Hata: Görev için yürütme başarısız oldu: app: dexDebug '.com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:' komut 'C: \ Program Files \ Java \ jdk1.7.0 işlemi _25 \ bin \ java.exe '' sıfır olmayan çıkış değeri 2 ile bitti

Gradle dosyam:

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: "DosyaTree derlemek (dir: 'libs', şunları içerir: ['* .jar'])" görmedim iki kez kütüphanelerimi derleme, bu yüzden sadece yorum:

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

ve iyi çalışıyor.


2
@JaredBurrows Benim durumumda benim app kütüphaneleri iki kez derleme .. bir "fileTree derlemek" (tüm libs dizini derler) ve "**** derlemek" oldu.
Maverick.pe

Lütfen bir cevap gönderebilir ve doğru olarak işaretleyebilir misiniz?
Jared Burrows

@JaredBurrows bitti. Teşekkürler
Maverick.pe

lütfen buradaki yazıma bir göz
Sanjoy Saha

Aynı hatayla karşılaşıyorum ama gradle dosyamda çok fazla derleme yok. Lütfen yardım et. Bu soruyu gönderdim: stackoverflow.com/questions/34558251/… Android geliştirmede tamamen yeniyim.
Ayusch

Yanıtlar:


205

Bu sorun büyük olasılıkla Android tarafından uygulanan 65K yöntemleri dex sınırını aşmasından kaynaklanmaktadır. Bu sorun, projeyi temizleyerek ve bazı kullanılmayan kitaplıkları ve yöntemleri build.gradle, veya multidex desteği ekleyerek bağımlılıklardan kaldırarak çözülebilir .

Bu nedenle, kitaplıkları ve yöntemleri saklamanız gerekiyorsa, grade config'te bildirerek multi dex desteğini etkinleştirebilirsiniz.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Multidex desteği ve 65K'dan fazla yöntemle uygulama geliştirme hakkında daha fazla bilgiyi buradan edinebilirsiniz .


memnun oldum, size yardımcı oldu. @David
minhazur

2
Bana çok yardımcı oldu
Aayushi

4
Ve sonra başlangıç ​​sınıfındaki yöntemi geçersiz kılın: @Override korumalı void attachBaseContext (Bağlam tabanı) {super.attachBaseContext (base); MultiDex.install (bu); }
Gent Berani

Vay canına, harika çalışıyor. Bunun sorun olabileceğini hiç düşünmemiştim.
Neela

Hataya tam olarak neyin neden olduğunu görmek istiyorsanız, projenizi aşağıdaki gibi gradle terminali yoluyla oluşturmayı deneyin ./gradlew assembleDebug --stacktrace --debug. Benim durumumda bu hatayı gördümcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef

93

Benim için sorun, build.gradle gereksiz bir complie kütüphane kodu koymuştu

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

65k'den fazla yönteme neden oldu, bu nedenle kaldırıldı, eşitleme eşitledi, projeyi temizledi ve sonra tekrar koştu ve sonra bu hata durdu. Ben sadece haritalar ve gcm gerekiyordu bu yüzden bu satırları koymak ve proje senkronize

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

Merhaba insanlar ben yine bu sorunla karşılaştı ve bu kez yapı araçları sürümünü değiştirme nedeniyle oldu ve gerçekten multidex etkinleştirmek için gerekli .. bu yüzden bu benim app's build.gradle dosyasını ekledi ..

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

Ve Application sınıfını genişleten bir sınıf oluşturun ve bu yöntemi sınıfın içine ekleyin.

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

OnCreate yöntemine de dahil et

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

2
Bu en iyi çözümdür, sadece gerçekten kullandığınız kütüphaneleri dahil etmelisiniz.
Roisgoen

2
benim için çalışıyor!! "com.google.android.gms: play-services: 7.5.0 '" derlemek için "com.google.android.gms: play-services-identity: 8.1.0" derlemek "com.google.android'i değiştirin. gms: play-services-plus: 8.1.0 "
Oscar Calderon

1
İyi olanı, ayrıca bakınız: developers.google.com/android/guides/setup - çeşitli bireysel kütüphanelerin bir listesini sağlayın.
Ed Manners

@ edsappfactory.com ben söz, kullanılan ve değiştirildi.
Amit Tumkur

32

Birisi hala bununla mücadele ediyor ve hiçbir fikri yoksa, neden oluyor ve nasıl düzeltilir. Aslında bu hata

Hata: ': app: dexDebug' görevi için yürütme başarısız oldu. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: 'C: \ Program Files \ Java \ jdkx.x.x_xx \ bin \ java.exe' 'işlemini tamamlayın sıfır olmayan çıkış değeri 2

olması için birçok neden olabilir, ancak JDK sürümünüzle ilgili bir şey kesinlikle olmayabilir, bu nedenle zamanınızı yanlış yönde harcamayın. Bunun gerçekleşmesinin iki temel nedeni bunlar

  1. Aynı kitaplık veya jar dosyanız birkaç yer içeriyor ve bazıları birbiriyle çakışıyor.
  2. 65k yöntem sınırını aşmak üzeresiniz veya zaten aştınız

İlk durum aşağıdaki gibi düzeltilebilir: Hangi bağımlılıkları birden çok kez eklediğinizi öğrenin. Bunu yapmak için android studio terminalinde aşağıdaki komutu çalıştırın

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

bu tüm bağımlılıkları döndürecektir, ancak lib klasöründen eklediğiniz jar dosyaları yıldız işareti (*) ile işaretlenmiş yinelemeden kurtulmaya çalışır, bu her zaman mümkün değildir, ancak bazı durumlarda yine de yapabilirsiniz, bu modülleri hariç tutmaya çalışın birçok kez dahil edilir, bunu böyle yapabilirsiniz

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

İkinci durumda, yöntem sınırı önerisini aştığınızda, bunu yapmanın bir yolu yoksa, içerilen kitaplıkları (not ilk çözüm gibi geliyor) kaldırarak bunu en aza indirmeye çalışmak, defaultConfig öğenize multiDexEnabled true değerini ekler

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

Bu artışlar yöntem sınırı ama bunun sebebi olası performans sorunları nedeniyle yapılacak en iyi şey değildir ÖNEMLİ sadece ekleyerek multiDexEnabled trueiçin defaultConfigçalışan tüm cihazlarda aslında yeterli değildir android <5 Lolipop beklenmedik davranış ve neden olacaktır NoClassDefFoundError. nasıl çözüleceği burada açıklanmıştır


18

Ben (o zamana kadar) "compile fileTree (dir: 'libs', içerir: ['* .jar'])" libs klasöründe jar uzantısı olan tüm derlemek bilmiyordum , bu yüzden sadece yorum (veya silmek) hatları:

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

ve iyi çalışıyor. Yine de teşekkürler! Benim hatam.


5
ya da başka bir şekilde: compile fileTree(dir: 'libs', include: ['*.jar'])sınıfta yorum yapın . Bana yardımcı oldu.
Tomasz Mularczyk

bu konuda başka bir çözüm var mı? her kavanoz dosyasını derlemedim ama bunun yerine sadece bu satırı kullandı compile fileTree(dir: 'libs', include: ['*.jar'])ama yine de aynı hatayı gösteriyor.
Kairi San

9

Aynı sorunu yaşadım ve gereksiz olan kütüphaneyi kaldırmayı düzelttim

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

Bu kütüphaneyi kaldırdım ve projeyi sorunsuz çalıştırabildim.


SlidingMenu sınıfını eklemeye çalışıyordum ve bunu ana sınıfımdan kaldırmak benim için çalıştı. Teşekkürler! :)
Lucas Senechal

6

Benimki hata ayıklama yapıları için multiDex etkinleştirilerek çözüldü.

defaultConfig {
multiDexEnabled true
}

6

Gömülü JDK'yı (32bit'te) Reddediyorum çünkü gömülü JDK 64bit

Projenize sağ tıklayın -> Modül Ayarını Aç -> SDK Konumu -> Gömülü JDk kullan seçeneğinin işaretini kaldırın ve JDK Yolunuzu ayarlayın, örneğin Ubuntu / usr / lib / jvm / java-8-openjdk-i386


1
Bence bu işe yarar çünkü gömülü JDK 64 bit. 32bit makinemde de aynı problem vardı.
Lukas Novak

Bu, 32 bit makinemdeki sorunu düzeltti. echo $JAVA_HOMEiçin yol
SANBI örnekleri

Evet, bunun makinemin 32 bit olmasıyla ilgisi olduğunu biliyordum. Teşekkür ederim Zacharia - günümü kurtardı!
Ilonpilaaja

5

Olası sorun: Dex 65k yöntem sınırını aştınız, sorun oluşmadan önce bir kütüphane veya birkaç yöntem eklediniz mi?


1
Birkaç değil .. sadece birkaç yöntem.
Maverick.pe

Hm, projenin önceki sürümünü oluşturmaya çalışın veya mümkünse kullanılmayan kütüphaneyi (
leri

Benim de birkaç
yöntemim var

3

SDK'nızı zaten güncellediyseniz ve ayrıca google-play-services kullanıyorsanız, bağımlılıkla ilgilenmeniz gerekir, çünkü aşağıdakilerle ilgili bir tür çatışma vardır:

Aşağıdakileri izleyin: 'com.google.android.gms: play-services: +' Compile ile değiştir 'derleyin' com.google.android.gms: play-services: 6.5.87 '

Not: İşte '6.5.87' google-play-service sürümüdür. Umarım yardımcı olur ..


2

Projenizdeki .jar dosyası çakışmaları olduğunu düşünüyorum.

Ben libs klasöründen android-support-v4.jar kaldırıldı ve çalışma !!!

projeniz hata veriyorsa build.gradle dosyanızı kontrol edin

bağımlılıklar {

}


2

Benim durumumda sorun, eklediğim yeni kütüphanenin (not bağımlılığı) diğer bazı bağımlılıklara dayanması ve temel bağımlılıklardan ikisinin derleme komut dosyamdaki diğer kitaplıkların / bağımlılıkların bazı bağımlılıkları ile çakışması / çatışmasıydı. Özellikle, Apache Commons'ı Validator(e-posta doğrulaması için) ekledim ve bağımlılıklarından ikisi (Apache Commons Loggingve Apache Commons Collections) Robolectric tarafından kullanılanlarla çelişiyordu (çünkü derleme yolumda aynı kütüphanelerin farklı sürümleri mevcuttu). Bu yüzden modulesyeni bağımlılık ( Validator) eklerken bağımlılıkların ( ) çakışan sürümlerini hariç tuttum :

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

Gradle modüllerinizin bağımlılıklarını görebilirsiniz (projenizde yalnızca bir modül olabilir) aşağıdaki gradle komutunu kullanarak (Projenizi Android Studio / Intellij'de oluşturduysanız sizin için oluşturulan gradle sarıcısını kullanıyorum Fikir). Bu komutu projenizin kök dizininde çalıştırın:

./gradlew: MODÜL ADINIZ: bağımlılıklar

Bu excludeyönergeleri ekledikten ve çalıştırmayı denedikten sonra, bunun duplicate fileiçin NOTICE.txtLogging ve Collections gibi bazı apache commons kütüphaneleri tarafından kullanılan bir hata aldım . Paketleme sırasında bu metin dosyasını hariç tutmak zorunda kaldım. Build.gradle, ekledim:

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

Yeni kitaplığın (. Validator) Bağımlılıklarının / modüllerinin biraz daha eski sürümleriyle çalışabileceği ortaya çıktı (bunlar zaten başka bir kitaplık (Robolectric) tarafından oluşturma yoluma aktarıldı). Bu özel kütüphanede durum böyleydi, ancak diğer kütüphaneler temeldeki bağımlılıkların en son API'sını kullanıyor olabilir (bu durumda çakışan modüle / bağımlılığa dayanan diğer kütüphanelerin, daha yeni bir sürüm (modülün eski sürümünü hariç tutarak / bu kütüphanelerin girişleri altındaki bağımlılık)).


1

Benim durumumda, 2 veya daha fazla kütüphane çakışması (aynı kütüphane ancak farklı sürümler) olduğunda bu hatayı aldım. Bağımlılık bloğunda uygulama build.gradle kontrol edin.


1

Kesinlikle işe yarayacak iki alternatif var:

  1. Projenizi temizleyin ve inşa edin.

Yukarıdaki yöntem işe yaramadıysa, bir sonrakini deneyin.

  1. Uygulama düzeyinde build.gradle dosyasını ekleyin

    defaultConfig {   
    
    multiDexEnabled true
    
    }

ikisini de denedim, ama yeni bir hata var Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, ne yapmalıyım?
Kairi San


bu hata, projenizde yinelenen / aynı paketler nedeniyle
oluşuyor

1

Son sürüme benim Java SDK güncellenmesi 1.7.0_79ve güncellenmesi SDK Locationaltından Project Structurebenim için sorun çözüldü.


1

Benim sorunum, sahip olmanın dışında

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: 'Komut' / 'Kütüphane' / Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / İçindekiler / Ana Sayfa / bin / java '', sıfır olmayan çıkış değeri 2 ile tamamlandı

Ben de bu iz vardı:

Yakalanmamış çeviri hatası: java.lang.IllegalArgumentException: zaten eklendi: Lcom / mypackage / ClassX;

Sorun, iki farklı kütüphanede aynı sınıfı eklememdi. Sınıf / jar dosyasını kütüphanelerden birinden kaldırarak proje düzgün çalışır


Tam olarak, aynı problem, aynı sınıf imzası var, neyse ki benim sınıfımdı, bu yüzden yeniden düzenledim. Buraya cevap yazdım: stackoverflow.com/a/35045501/3397345
Davideas

1

Benim için tüm PlayStore bağımlılıklarını ekliyordum

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

Ama ben sadece google harita gerekli, bu yüzden daha spesifik yaptı ve hata çözüldü.

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


0

benim durumumda 23.0.0 rc3 ve ben 22.0.1 olarak değiştirildi ve benim sorun çözüldü inşa araçları sürümü oldu .


0

Cihazınızı PC'ye bağlamak için düşük kaliteli bir kablo / arızalı kablo kullanıyor olabilirsiniz, kabloyu değiştirdim ve benim için çalıştı.


0

Bu hata, daha fazla sayıda kütüphane kullanmasından kaynaklanmaktadır. Benim durumumda 'compile' com.google.android.gms: play-services-9.4.0 'bu hataya neden oldu. Bu hatayı önlemek için gerekli kütüphaneleri kullanın. Örneğin Google Haritalar uygulamasını kullanmak için Ardından 'com.google.android.gms: play-services-maps: 9.4.0' derlemesini kullanın. google play hizmetleri bağımlılığı eklenirken yalnızca gerekli kitaplıkları belirtin. varsayılan olarak tüm kitaplıkları içerir.


0

gradle.buildDosyanızda Bunu kullanın

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

Ve iyi çalışıyor.


0

Hataya tam olarak neyin neden olduğunu görmek istiyorsanız, projenizi aşağıdaki gibi gradle terminali yoluyla oluşturmayı deneyin ./gradlew assembleDebug --stacktrace --debug. Benim durumumda aşağıdaki hatayı gördümcom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Bu, Google Haritalar'ı projeme entegre etmeye çalıştığımda oldu. Düzeltmek için, dahil ettiğim kütüphaneleri kontrol ettim

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

Basitçe olarak değiştirdim

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

ve problem gitti


0

Projemi dönüştürdükten sonra aynı hatayla karşılaştım Kotlin. Benim sorunum jre konumum sırasında geçersiz bir yola değiştirildi (bunun neden olabileceğini merak ediyorum ... bana zaman kaybettirdi). Bunu yaparak düzeltildi:

File > Project Structure > SDK Location 

İşaretlenmemiş Use embedded JDKeski JDK yüklemesine işaret ediyordu seçeneği, ve doğru birini seçtiniz:

/home/my_user/jdk1.8.0_101

Bunu değiştirdikten sonra hata kayboldu


0

BENİM İÇİN ÇALIŞTI :)

daha önce 7 oldu java en son sürüm 8 yükseltti ve sonra projekt üzerine sağ tıklayarak AÇIK MODÜL AYARI gidin ve / usr / lib / jvm / java-8-oracle yeni java 8 yüklü jdk yolunu değiştirdi . Ve stüdyoyu yeniden başlat

java 8 klasör adı için check / usr / lib / jvm

Ubuntu kullanıyorumresim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.