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:
dependencies {
compile 'com.google.android.gms:play-services-base:6.5.+'
compile 'com.google.android.gms:play-services-maps:6.5.+'
}
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:
support-compat
, support-core-utils
, support-core-ui
, support-media-compat
Dansupport-fragment
dependencies {
compile 'com.android.support:support-fragment:24.2.+'
}
Namun perlu dicatat, jika Anda menggunakan support-fragment
, itu akan memiliki dependensi ke semua modul lainnya (mis. Jika Anda menggunakan android.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 ):
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
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
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
atau gunakan aplikasi yang disediakan dari mutlidex lib
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
Cegah OutOfMemory dengan MultiDex
Sebagai tip selanjutnya, jika Anda mengalami OutOfMemory
pengecualian selama fase build Anda bisa memperbesar heap
android {
...
dexOptions {
javaMaxHeapSize "4g"
}
}
yang 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
.\gradlew app:dependencies
Lihat jawaban dan pertanyaan ini untuk informasi lebih lanjut tentang penghitungan metode di android