DexException: 65536 yeni indeksi jumbo olmayan bir talimatla birleştirilemez


84

Bilinmeyen bir nedenden dolayı uygulamam aniden Android Studio'dan oluşturulmayacak.

Almaya devam ediyorum

> 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!

Aynı uygulama komut satırından başarıyla oluşturulurken. Yöntem referanslarının sayısını kontrol ettim ve korkunç 64k'nin çok altında.

Şu anda AS 0.8.11 kullanıyorum.

Yanıtlar:


57

Bu satırı projenize eklemeye çalışın. Özellikler

dex.force.jumbo = true

Bir dex dosyalarındaki dizeler için sınırı artıran. Ve projeniz muhtemelen derlenecek.

Not: Ayrıca jumbo setle, yalnızca tek bir dex'teki yöntemler için başka bir 64K sınırı vardır. Gelecekte bu sınırı alırsanız, bazı bağımlılıkları kaldırmanız gerekecektir.

Güncelleme - Google Play Hizmetleri 6.5 (12-08-14)

6.5 sürümüyle Google nihayet Google Play Hizmetlerini ayrıştırdı. Bundan böyle, API'leri seçilerek yürütülebilir dosyanıza derlemeniz mümkün olacak.

Misal :

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

Diğer tüm ayrı Google Play Hizmetleri API'leri için d.android.com adresindeki bu sayfayı kontrol edin .

Güncelleme (21-04-2015): https://developer.android.com/tools/building/multidex.html


11
project.properties
Öğesine

1
Her iki çözümü de yaptım: dex.force.jumbo özelliği ve dexOptions ekledim ama yine de aynı hatayı alıyorum. Başka seçenek?
Juan Saravia


Teşekkürler @HareshChhelana. Nedense çalışmaya başladı .. ama gerçekten özel bir şey yapmadım. Projeyi bu seçenekler olmadan derleyen bazı iş arkadaşlarım var, ama şimdi benim için çalışıyor. Teşekkürler!
Juan Saravia

1
Google Play Hizmetlerinin tamamını derlemek yerine, 65K dex sınırının altında kalmak için 'temel' paketi kullanmanın yararlı olduğunu buldum:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

Build.gradle içinde jumboMode özelliğini ayarlayın:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

Bunu da yararlı buldum: Pakete göre dex yöntemi sayısını gösterme .


12
Teşekkürler! Benim için de çalışıyor. Peki bu "jumboMode" ne anlama geliyor?
yital9

3
@ Burada jumbo modu hakkında daha fazla bilgi edinebilirsiniz yital9: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

lütfen bu engellemenin nedenini açıklayın
eC Droid

Proguard nedeniyle sürüm yapısı iyi gittiğinden bunu tek başına hata ayıklama derleme türünü ekledim. Bu değişiklikten sonra hata ayıklama yapısı iyi gitti. Bu iyi mi?
garnet

1
Bu benim için çalışıyor. Değiştirilecek build.gradle'ın com.android.dex.DexException'ı atan modül olması gerektiğini unutmayın.
Francis Bacon

54

Bu benim için çalışıyor. Alıyordumcom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Bu işe yaramazsa, dex'te farklı bir sorun olan yöntem referans sınırına ulaşmış olabilirsiniz. Multidex veya proGuard kullanmanız gerekir.


Benim için çalışıyor. Teşekkürler!!! ama 'jumboMode' nedir? Lütfen bana açıklar mısın? @Sayooj
DG

13

Bu, birleştirilmekte olan dex dosyalarının 65536'dan fazla dizeye sahip olması durumunda birleşme hatasıdır. Yeni dizin bir const-string talimatına sığamaz ve dex birleşmesi, farklı boyutlarda olan talimatların değiştirilmesini desteklemez, bu nedenle bir const-string / jumbo talimatına genişletilemez. jb-mr1 yeni bir seçenek ekleyerek: --force-jumbo.Bu hata "dex.force.jumbo=true"project.properties dosyasına eklenerek düzeltilebilir .


1
@DeepakSharma jumboMode'u etkinleştirdikten sonra projenizi temizlemelisiniz
Lilo

-1

En son Android Studio ve Android Studio derleyici ayarlarında "jumbo zorla" seçeneği işaretlendiğinde, bu sorun ortadan kalkar.


3
Mümkünse cevabınıza bazı ayrıntılar ekleyin, lütfen.
shA.t
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.