Apa itu Android MultiDex?

111

Ada banyak postingan tentang MultiDex. Saya pernah mengalami, terkadang, kesalahan diselesaikan termasuk multiDexEnabled truedi defaultConfigbagian build.gradle saya.

Tapi, sebenarnya apa sih fitur ini? Apa skenario untuk menggunakannya?

Roberto Tellez Ibarra
sumber

Jawaban:

166

Mengutip dokumentasi :

File aplikasi Android (APK) berisi file bytecode yang dapat dieksekusi dalam bentuk file Dalvik Executable (DEX), yang berisi kode terkompilasi yang digunakan untuk menjalankan aplikasi Anda. Spesifikasi Dalvik Executable membatasi jumlah total metode yang dapat dirujuk dalam satu file DEX menjadi 65.536, termasuk metode framework Android, metode library, dan metode dalam kode Anda sendiri. Untuk melewati batas ini, Anda harus mengonfigurasi proses build aplikasi Anda untuk menghasilkan lebih dari satu file DEX, yang dikenal sebagai konfigurasi multidex.

Jadi, fiturnya adalah: memungkinkan aplikasi kompleks Anda untuk dikompilasi. Skenario untuk menggunakannya adalah ketika aplikasi Anda gagal untuk mengompilasi karena mencapai batas referensi metode 64K DEX. Ini muncul sebagai kesalahan versi, seperti:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
CommonsWare
sumber
2
Adakah yang tahu seberapa besar basis kode ini (LOC, atau kasar # layar)? Apakah Anda akan mencapai batas ini pada aplikasi 5-6 layar sederhana atau apakah benar-benar jauh di masa mendatang (yaitu: 10-20 layar) yang kemungkinan besar akan Anda capai
Marchy
20
@Marki: Biasanya, ini berasal dari menambahkan terlalu banyak perpustakaan. Sulit bagi proyek tanpa perpustakaan untuk mencapai batas ini.
CommonsWare
3
Saya memiliki aplikasi kecil yang menggunakan sekitar 5 pustaka dukungan google serta Fabric.io dan 2 atau 3 pustaka pihak ketiga lainnya dan saya harus menggunakan multi-dex.
c.dunlap
1
apakah ada kerugian dari mengaktifkan multidex? mengapa tidak membiarkannya benar sebagai default?
Rafael Lima
1
@RafaelLima: Ada masalah keamanan dengan quasi-backport multidex untuk perangkat pra-Android 5.0. IIRC, ini juga dapat menyebabkan beberapa masalah dengan aplikasi Anda, jika Anda mencoba menggunakan kelas yang ada dalam file DEX yang belum dimuat.
CommonsWare
43

Sesederhana ini

Satu file .dex dapat memiliki 65.536 metode (referensi) jadi jika jumlah referensi melebihi 65.536, gunakan multidex.

Penjelasan Lebih Lanjut!

Program aplikasi android dikompilasi menjadi file .dex yang kemudian di-zip menjadi satu file .apk.
DVM (Mesin Virtual Dalvik) menggunakan file / file .dex untuk mengeksekusi bytecode.

Apa yang menyebabkan jumlah referensi melebihi batas 65.536?
Metode yang Anda tulis + Metode Kerangka Android + Metode perpustakaan pihak ketiga (misalnya Volley, Retrofit, Facebook SDK, dll).
Saya telah membaca "di suatu tempat"
App Compat 24.2.1 berisi 16.5k metode
Layanan Google Play GCM 9.6.1 berisi metode 16.7k
Jadi jika Anda telah membuat aplikasi Hello world sederhana yang memiliki App Compat 24.2.1, Anda sudah 1/4 cara untuk melewati batas metode dex tunggal

Rohit Singh
sumber
7

Apa itu MultiDex di Android?

Dex adalah singkatan dari Dalvik Executable, yang digunakan oleh prosesor mesin virtual (Dalvik) Google untuk menangani Aplikasi Android. Android dibuat dengan aplikasi kecil dan sederhana dalam pikiran dan batasan pada satu Dalvik Executable menyematkan atap referensi kode pada 65.536 metode. Karena masalah ini dan cara mesin Dalvik menangani eksekusi kode, ada beberapa masalah kompilasi dan pemanggilan, hingga Monkey Patch atau integrasi MultiDex . Integrasi MultiDex di Android Studio memungkinkan Pengembang Android kemampuan untuk mengompilasi dan mengeksekusi basis kode dengan lebih dari 65.536 metode!

Farhana
sumber
1

Mengakui situs resmi pengembang Android.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Masum
sumber
1
Terima kasih atas jawabannya. Ini pertanyaan dari tahun 2015, banyak hal yang berubah sejak itu.
Roberto Tellez Ibarra
-2

Yang juga memungkinkan adalah, bagi google (dan lainnya) untuk menerapkan DRM, katakanlah .. widevine, dalam potongan kode yang menyebabkan masalah bagi sebagian besar non-pengembang ..

anony
sumber