Saya telah melihat berbagai versi dex erros sebelumnya, tetapi yang ini baru. clean / restart dll tidak akan membantu. Proyek perpustakaan tampaknya masih utuh dan ketergantungan tampaknya terhubung dengan benar.
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
atau
Cannot merge new index 65950 into a non-jumbo instruction
atau
java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
tl; dr : Solusi resmi dari Google akhirnya tiba!
http://developer.android.com/tools/building/multidex.html
Hanya satu tip kecil, Anda mungkin perlu melakukan ini untuk mencegah kehabisan memori ketika melakukan dex-ing.
dexOptions {
javaMaxHeapSize "4g"
}
Ada juga mode jumbo yang dapat memperbaikinya dengan cara yang kurang andal:
dexOptions {
jumboMode true
}
Pembaruan: Jika aplikasi Anda gemuk dan Anda memiliki terlalu banyak metode di dalam aplikasi utama Anda, Anda mungkin perlu meng-org ulang aplikasi Anda sesuai
http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
itu Anda tidak memanggil fungsi ini jika tidak tersedia?Jawaban:
Pembaruan 3 (11/3/2014)
Google akhirnya merilis deskripsi resmi .
Pembaruan 2 (31/10/2014)
Plugin Gradle v0.14.0 untuk Android menambahkan dukungan untuk multi-dex. Untuk mengaktifkan, Anda hanya perlu mendeklarasikannya di build.gradle :
Jika aplikasi Anda mendukung Android sebelum 5.0 (yaitu, jika Anda
minSdkVersion
berusia 20 atau di bawah) Anda juga harus secara dinamis menambal ClassLoader aplikasi , sehingga akan dapat memuat kelas dari dexes sekunder. Untungnya, ada perpustakaan yang melakukan itu untuk Anda. Tambahkan ke dependensi aplikasi Anda:Anda perlu memanggil kode tambalan ClassLoader sesegera mungkin. dokumentasi
MultiDexApplication
kelas menyarankan tiga cara untuk melakukan itu (pilih salah satu dari mereka , satu yang paling nyaman bagi Anda):1 - Deklarasikan
MultiDexApplication
kelas sebagai aplikasi di AndroidManifest.xml Anda :2 - Mintalah
Application
kelas Anda memperluas kelas MultiDexApplication :3 - Panggilan
MultiDex#install
dariApplication#attachBaseContext
metode Anda :Pembaruan 1 (10/17/2014):
Seperti yang diharapkan, dukungan multidex dikirimkan dalam revisi 21 dari Perpustakaan Dukungan Android. Anda dapat menemukan android-support-multidex.jar di / sdk / ekstra / android / support / multidex / library / libs folder.
Dukungan multi-dex memecahkan masalah ini. dx 1.8 sudah memungkinkan menghasilkan beberapa file dex.
Android L akan mendukung multi-dex secara asli, dan revisi berikutnya dari perpustakaan dukungan akan mencakup rilis yang lebih lama kembali ke API 4.
Hal itu dinyatakan dalam ini Android Developers Backstage episode podcast oleh Anwar Ghuloum. Saya telah memposting transkrip (dan penjelasan multi-dex umum) dari bagian yang relevan.
sumber
java.lang.ClassNotFoundException: Didn't find class "org.qtproject.qt5.android.QtActivityDelegate" on path: DexPathList[[],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
). Ternyata kesalahan saya adalah saya tidak menerapkan langkah-langkah tambahan untuk dukungan Android sebelum versi 5.0. Dengan itu, opsi # 3 menyelesaikannya, dan saya tidak punyaClassNotFoundException
masalah lagi . Terima kasih, @Alex Lipov!Seperti yang telah dinyatakan, Anda memiliki terlalu banyak metode (lebih dari 65k) dalam proyek dan lib Anda.
Cegah Masalah: Kurangi jumlah metode dengan Play Services 6.5+ dan support-v4 24.2+
Karena seringkali layanan Google Play adalah salah satu tersangka utama dalam metode "wasting" dengan metode 20k + -nya . Layanan Google Play versi 6.5 atau yang lebih baru, adalah mungkin bagi Anda untuk memasukkan layanan Google Play dalam aplikasi Anda menggunakan sejumlah pustaka klien yang lebih kecil. Misalnya, jika Anda hanya membutuhkan GCM dan peta, Anda dapat memilih untuk menggunakan dependensi ini saja:
Daftar lengkap sub perpustakaan dan tanggung jawabnya dapat ditemukan di google doc resmi .
Pembaruan : Karena Perpustakaan Dukungan v4 v24.2.0 itu dibagi menjadi beberapa modul berikut:
Namun perlu dicatat, jika Anda menggunakan
support-fragment
, itu akan memiliki dependensi ke semua modul lainnya (mis. Jika Anda menggunakanandroid.support.v4.app.Fragment
tidak ada manfaat)Lihat di sini catatan rilis resmi untuk dukungan-v4 lib
Aktifkan MultiDexing
Karena Lollipop (alias membangun alat 21+) sangat mudah ditangani. Pendekatannya adalah mengatasi metode 65k per masalah file dex untuk membuat beberapa file dex untuk aplikasi Anda. Tambahkan berikut ini ke file build gradle Anda ( ini diambil dari google doc resmi pada aplikasi dengan lebih dari 65k metode ):
Langkah kedua adalah mempersiapkan kelas Aplikasi Anda atau jika Anda tidak memperpanjang penggunaan Aplikasi
MultiDexApplication
dalam Manifes Android Anda:Tambahkan ini ke Application.java Anda
atau gunakan aplikasi yang disediakan dari mutlidex lib
Cegah OutOfMemory dengan MultiDex
Sebagai tip selanjutnya, jika Anda mengalami
OutOfMemory
pengecualian selama fase build Anda bisa memperbesar heapyang akan mengatur tumpukan menjadi 4 gigabytes.
Lihat pertanyaan ini untuk detail lebih lanjut tentang masalah memori tumpukan dex.
Analisis sumber Masalah
Untuk menganalisis sumber metode, plugin gradle https://github.com/KeepSafe/dexcount-gradle-plugin dapat membantu dalam kombinasi dengan pohon dependensi yang disediakan oleh gradle dengan eg
Lihat jawaban dan pertanyaan ini untuk informasi lebih lanjut tentang penghitungan metode di android
sumber
Proyek Anda terlalu besar. Anda memiliki terlalu banyak metode. Hanya ada 65536 metode per aplikasi. lihat di sini https://code.google.com/p/android/issues/detail?id=7147#c6
sumber
Kode di bawah ini membantu, jika Anda menggunakan Gradle. Memungkinkan Anda dengan mudah menghapus layanan Google yang tidak dibutuhkan (dengan anggapan Anda menggunakannya) untuk kembali di bawah ambang batas 65 ribu. Semua kredit untuk posting ini: https://gist.github.com/dmarcato/d7c91b94214acd936e42
Sunting 2014-10-22 : Ada banyak diskusi menarik tentang inti yang dirujuk di atas. TLDR? lihat yang ini: https://gist.github.com/Takhion/10a37046b9e6d259bb31
Rekatkan kode ini di bagian bawah file build.gradle Anda dan sesuaikan daftar layanan google yang tidak Anda butuhkan:
sumber
clean
setiap kali saya menggunakan pengecualian (kami menggunakan analitik).Saya telah membagikan contoh proyek yang menyelesaikan masalah ini menggunakan custom_rules.xml build script dan beberapa baris kode.
Saya menggunakannya pada proyek saya sendiri dan dijalankan tanpa cacat pada perangkat 1M + (dari android-8 ke android-19 terbaru). Semoga ini bisa membantu.
https://github.com/mmin18/Dex65536
sumber
Menghadapi masalah yang sama dan menyelesaikannya dengan mengedit file build.gradle saya di bagian dependensi, menghapus:
Dan menggantinya dengan:
sumber
Coba tambahkan kode di bawah ini di build.gradle, itu berhasil untuk saya -
sumber
Solusi sempurna untuk ini adalah bekerja dengan Proguard. seperti yang disebutkan aleb dalam komentar. Ini akan mengurangi ukuran file dex hingga setengahnya.
sumber
Anda dapat menganalisis masalah (referensi file dex) menggunakan Android Studio:
Bangun -> Analisis APK ..
Pada panel hasil klik pada file classes.dex
Dan Anda akan melihat:
sumber
solusi gradle + proguard:
sumber
Hapus beberapa file jar dari folder Libs dan salin ke folder lain, Dan Pergi ke _Proyek Properti> Pilih Java Build Path, Pilih Perpustakaan, Pilih Tambah Jar eksternal, Pilih jar Dihapus untuk proyek Anda, Klik simpan, ini akan ditambahkan di bawah Dirujuk Perpustakaan bukannya folder Libs. Sekarang bersihkan dan Jalankan proyek Anda. Anda tidak perlu menambahkan kode apa pun untuk MultDex. Itu hanya bekerja untuk saya.
sumber
Saya menghadapi masalah yang sama hari ini apa yang berhasil di bawah
Untuk ANDROID STUDIO ... Aktifkan Jalankan Instan
Di File-> Preferences-> Build, Execution, Deployment-> Instant Run-> Centang Aktifkan Instant run untuk hot swap ...
Semoga ini bisa membantu
sumber