Android MultiDex nedir?


111

MultiDex hakkında birçok gönderi var. Ben hataları dahil çözüldü, bazen yaşamış multiDexEnabled trueiçindedefaultConfig benim build.gradle bölümünde.

Peki bu özellik tam olarak nedir? Kullanmanın senaryoları nelerdir?

Yanıtlar:


166

Belgelerden alıntı yapmak :

Android uygulama (APK) dosyaları, uygulamanızı çalıştırmak için kullanılan derlenmiş kodu içeren Dalvik Yürütülebilir (DEX) dosyaları biçiminde yürütülebilir bayt kodu dosyaları içerir. Dalvik Yürütülebilir özelliği, Android çerçeve yöntemleri, kitaplık yöntemleri ve kendi kodunuzdaki yöntemler dahil olmak üzere, tek bir DEX dosyasında başvurulabilecek toplam yöntem sayısını 65.536 ile sınırlar. Bu sınırı aşmak, uygulama oluşturma sürecinizi multidex yapılandırması olarak bilinen birden fazla DEX dosyası oluşturacak şekilde yapılandırmanızı gerektirir.

Yani özellik şudur: karmaşık uygulamanızın derlenmesine izin verir. Bunu kullanma senaryoları, 64K DEX yöntemi referans sınırına ulaşılması nedeniyle uygulamanızın derlenememesi durumudur. Bu, aşağıdaki gibi bir yapı hatası olarak görünür:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

2
Bunun kod tabanının ne kadar büyük olduğu hakkında bir fikriniz var mı (LOC veya kaba ekran sayısı)? 5-6 ekranlı basit bir uygulamada bu sınıra mı ulaşacaksınız yoksa gerçekten çok daha ileride mi (yani: 10-20 ekran) onu
vurmanız

20
@Marchy: Genellikle, çok fazla kitaplık eklemekten gelir. Kütüphanesiz bir projenin bu sınıra ulaşması zordur.
CommonsWare

3
Yaklaşık 5 Google destek kitaplığının yanı sıra Fabric.io ve 2 veya 3 başka üçüncü taraf kitaplığı kullanan küçük bir uygulamam var ve multi-dex kullanmam gerekiyor.
c.dunlap

1
multidex'i etkinleştirmenin herhangi bir dezavantajı var mı? neden varsayılan olarak doğru olmasına izin vermiyorsunuz?
Rafael Lima

1
@RafaelLima: Android 5.0 öncesi cihazlar için multidex'in yarı arka portunda güvenlik sorunları var. IIRC, henüz yüklenmemiş bir DEX dosyasında bulunan sınıfları kullanmaya çalışıyorsanız, uygulamanızla ilgili bazı sorunlara da neden olabilir.
CommonsWare

43

Bu kadar basit

Tek bir .dex dosyası 65.536 yönteme (referanslara) sahip olabilir, bu nedenle referans sayısı 65.536'yı aşarsa, multidex'i kullanırsınız.

Daha Fazla Açıklama!

Bir android uygulama programı bir .dex dosyasına derlenir ve bu dosya da tek bir .apk dosyasına sıkıştırılır.
DVM (Dalvik Sanal Makinesi), bayt kodlarını yürütmek için .dex dosyası / dosyalarını kullanır.

Referans sayısının 65.536 sınırı aşmasına ne sebep olur?
Sizin tarafınızdan yazılan yöntemler + Android Framework yöntemleri + Üçüncü taraf kitaplığı (örneğin Volley, Retrofit, Facebook SDK vb.) Yöntemleri.
"Bir yerde"
Uygulama Uyumluluğu okudum 24.2.1, 16.5k yöntem içerir
Google Play Hizmetleri GCM 9.6.1, 16.7k yöntem içerir
Yani, Uygulama Uyumluluğu 24.2.1'e sahip basit bir Merhaba dünya uygulaması oluşturduysanız, zaten 1/4 tek dex yöntemi sınırını aşmanın yolu


7

Android'de MultiDex nedir?

Dex , Google'ın sanal makine işlemcisinin (Dalvik) Android Uygulamalarını işlemek için kullandığı Dalvik Executable'ın kısaltmasıdır. Android, küçük ve basit uygulamalar göz önünde bulundurularak oluşturuldu ve tek bir Dalvik Yürütülebilir dosyasındaki kısıtlamalar, 65.536 yöntemde kod referanslarının çatısını sabitledi. Bu sorun ve Dalvik makinesinin kod yürütme biçiminden dolayı Monkey Patch veya MultiDex entegrasyonuna kadar bazı derleme ve çağırma sorunları vardı . Android Studio'daki MultiDex entegrasyonu , Android Geliştiricilerine 65.536'dan fazla yöntemle bir kod tabanı derleme ve yürütme yeteneği sağlar!


1

Android geliştirici resmi sitesi kabul ediliyor.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
Cevap için teşekkürler. Bu, 2015 yılından kalma bir soru, o zamandan beri pek çok şey değişti.
Roberto Tellez Ibarra

-2

Aynı zamanda, Google'ın (ve diğerlerinin) DRM'yi, geliştirici olmayanların çoğu için sorunlara neden olduğu kod parçalarına geniş vine uygulamasına izin verir.

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.