Kesalahan: Tidak dapat memuat kelas yang diminta dalam satu file dex. Coba berikan daftar main-dex. # metode: 72477> 65536

310

Saya ingin menambahkan layanan lokasi menyatu tetapi itu menunjukkan saya beberapa kesalahan. Tolong aku.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "27.0.1"
    defaultConfig {
        applicationId "com.example.adil.bloodbankapplication"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.firebase:firebase-auth:11.8.0'
    compile 'com.google.firebase:firebase-database:11.8.0'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'junit:junit:4.12'
    compile 'com.android.support:design:26.1.0'
    compile 'com.github.joielechong:countrycodepicker:2.1.5'
    compile 'com.jaredrummler:material-spinner:1.2.4'
    compile 'hanks.xyz:htextview-library:0.1.5'
    compile 'com.firebaseui:firebase-ui-database:1.2.0'
    compile 'com.google.android.gms:play-services:11.8.0'
}


apply plugin: 'com.google.gms.google-services'
Muhammad Adil Sattar
sumber

Jawaban:

386

Tidak ada jawaban yang mereka berikan kepada Anda yang lengkap. Masalahnya terletak pada Multidex. Anda harus menambahkan perpustakaan di aplikasi gradle:

implementation 'com.android.support:multidex:1.0.3'

Setelah itu, tambahkan konfigurasi default aplikasi gradle:

multiDexEnabled true

Aplikasi Anda harus dari tipe Multidex .. Anda harus menulisnya di manifes:

android:name=".MyApplication"

"MyApplication" harus berupa kelas Multidex, atau harus diperluas.

AlexPad
sumber
5
Jadi MyApplication extends android.support.multidex.MultiDexApplication?
larangan geoengineering
2
Saya telah mencoba solusi ini, tetapi saya berakhir dengan masalah baru ini: stackoverflow.com/questions/49518115/…
ban-geoengineering
22
Inilah halaman resmi android doc yang memberikan lebih banyak penjelasan tentang mengapa hal ini terjadi dan bagaimana membuat apk versi rilis yang lebih baik: developer.android.com/studio/build/multidex
Vrakfall
2
ini bukan metode yang baik untuk menyelesaikan masalah, lebih baik menghapus kode dan pustaka yang tidak digunakan, refactor kode proyek Anda
user25
5
tidak memiliki 80000 metode akan menjadi solusi yang baik jika perpustakaan googles tidak memiliki 80000 metode (seluruh alasan mengapa mereka menambahkan multidex adalah karena perpustakaan layanan mereka sendiri yang mereka ingin semua orang gunakan memiliki puluhan ribu metode).
Lassi Kinnunen
195

Saya memperbaiki masalah saya dengan solusi di bawah ini:

Di file Gradle build, tambahkan dependensi:

implementasi 'com.android.support:multidex:1.0.3'

Dan kemudian di bagian "defaultConfig", tambahkan:

multiDexEnabled benar

Bofeng
sumber
8
Bekerja untukku. Petunjuk terperinci tentang konfigurasi di sini: developer.android.com/studio/build/multidex#mdex-gradle
Alex Burdusel
Mengaktifkan dukungan multidex tidak diperlukan di sebagian besar aplikasi. Anda harus mempertimbangkan untuk menghapus perpustakaan yang tidak digunakan, silakan lihat jawaban saya di bawah ini.
Pengembang MG
106

memodifikasi aplikasi atau modul Anda build.gradle

android {
    defaultConfig {
        ...
        minSdkVersion 21 <----- *here
        targetSdkVersion 26
        multiDexEnabled true <------ *here
    }
    ...
}

Menurut dokumentasi resmi

Dukungan multidex untuk Android 5.0 dan lebih tinggi

Android 5.0 (API level 21) dan lebih tinggi menggunakan runtime yang disebut ART yang secara native mendukung memuat beberapa file DEX dari file APK. ART melakukan pra-kompilasi pada waktu pemasangan aplikasi yang memindai file classN.dex dan mengkompilasinya menjadi file .oat tunggal untuk dieksekusi oleh perangkat Android. Oleh karena itu, jika minSdkVersion Anda 21 atau lebih tinggi, Anda tidak perlu pustaka dukungan multidex.

Untuk informasi lebih lanjut tentang runtime Android 5.0, baca ART dan Dalvik.

https://developer.android.com/studio/build/multidex

wdanxna
sumber
59

Apa itu file dex: File aplikasi Android (APK) berisi file bytecode yang dapat dieksekusi dalam bentuk file Dalvik Executable (DEX), yang berisi kode yang dikompilasi yang digunakan untuk menjalankan aplikasi Anda.

Alasan pengecualian ini: Spesifikasi DEX membatasi jumlah total metode yang dapat dirujuk dalam satu file DEX menjadi 65.536 (batas referensi 64K) —termasuk metode kerangka kerja Android, metode pustaka, dan metode dalam kode Anda sendiri.

Langkah 01. Tambahkan ketergantungan berikut sebagai berikut

Untuk Pengguna Non-Androidx,

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 28
    multiDexEnabled true  //ADD THIS LINE
}

Untuk Pengguna Androidx,

dependencies {
  implementation 'androidx.multidex:multidex:2.0.1'
}
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true  //ADD THIS LINE
    }

Langkah 02:

Setelah menambahkan proyek Sinkronisasi tersebut dan sebelum Anda menjalankan proyek pastikan untuk Membangun proyek sebelum menjalankan. jika tidak, Anda akan mendapatkan pengecualian.

gsm
sumber
53

Anda bisa mengikuti ini .

Versi platform sebelum Android 5.0 (API level 21) menggunakan runtime Dalvik untuk mengeksekusi kode aplikasi. Secara default, Dalvik membatasi aplikasi ke file bytecode class.dex tunggal per APK. Untuk mengatasi batasan ini, Anda dapat menambahkan pustaka dukungan multidex ke proyek Anda:

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

Jika minSdkVersion Anda diatur ke 21 atau lebih tinggi, yang perlu Anda lakukan adalah mengatur multiDexEnabled menjadi true dalam file build.gradle tingkat modul Anda, seperti yang ditunjukkan di sini:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}
rize
sumber
34

ketika Anda menggunakan dependensi sehingga metode Anda meningkat! Google punya solusi untuk itu. itu disebut Multidex!

CATATAN: pastikan min SDK lebih dari 14.

di build.gradle Anda:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}



  dependencies {
      implementation 'com.android.support:multidex:1.0.3'
    }

UNTUK PENGGUNAAN AndroidX:

 def multidex_version = "2.0.1"
 implementation 'androidx.multidex:multidex:$multidex_version'

Untuk informasi lebih lanjut silakan kunjungi tautan asli:

https://developer.android.com/studio/build/multidex

sana ebadi
sumber
Solusi bagus! memperbaiki masalah saya
Vaibhav Herugu
29

Hai masalahnya di sini hapus

compile 'com.google.android.gms:play-services:11.8.0'

Mengapa?

Catatan: Jangan gunakan target layanan bermain gabungan. Ini membawa puluhan perpustakaan, membengkak aplikasi Anda. Alih-alih, tentukan hanya API layanan Google Play tertentu yang digunakan aplikasi Anda.

Dan gunakan apa yang Anda butuhkan. https://developers.google.com/android/guides/setup

Suka untuk layanan lokasi

com.google.android.gms:play-services-location:11.8.0

Untuk Perpesanan Awan

com.google.android.gms:play-services-gcm:11.8.0
Pankaj Kant Patel
sumber
yup sekarang saya menghadapi masalah tombol run saya telah dinonaktifkan.
Muhammad Adil Sattar
27

Jika Anda sedang membangun DEBUG APK , cukup tambahkan:

debug {
            multiDexEnabled true
        }

dalam buildTypes

dan jika Anda sedang membangun RELEASE APK , tambahkan multiDexEnabled trueblok rilis sebagai-

release {
                ...
                multiDexEnabled true
                ...
        }
Raj Yadav
sumber
25

Untuk proyek flutter, Anda juga dapat mengatasi masalah ini

buka \ android \ app \ build.gradle Anda

Anda harus memiliki yang berikut ini:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28

    }

}

Jika minSdkVersion Anda diatur ke 21 atau lebih tinggi, yang perlu Anda lakukan adalah mengatur multiDexEnabled menjadi true di defaultConfig. Seperti ini

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true 

    }

}

jika minSdkVersion Anda diatur ke 20 atau lebih rendah, tambahkan multiDexEnabled true ke defaultConfig

Dan tentukan implementasinya

dependencies {
  implementation 'com.android.support:multidex:1.0.3'// or 2.0.1
}

Pada akhirnya Anda harus memiliki:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true  // added this
    }

}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

Untuk informasi lebih lanjut baca ini: https://developer.android.com/studio/build/multidex

Richardd
sumber
1
hhahaha! Saya senang itu membantu Anda!
Richardd
18

Lakukan saja hal berikut:

build.gradle

(module:app)


android {
            ....
      defaultConfig {
              multiDexEnabled true // enable mun
      }
}

Dan tambahkan ketergantungan di bawah ini di build.gradlefile tingkat aplikasi Anda

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
} 
Saif Khan
sumber
13
multiDexEnabled true

Silakan coba tambahkan ini di konfigurasi default aplikasi Anda {}. Ini membantu saya untuk menyelesaikan masalah

pengguna2173696
sumber
12

Di file Gradle build, tambahkan dependensi:

implementation 'com.android.support:multidex:1.0.2'

atau

implementation 'com.android.support:multidex:1.0.3'

atau

implementation 'com.android.support:multidex:2.0.0'

Dan kemudian di bagian "defaultConfig", tambahkan:

multiDexEnabled true

Di bawah targetSdkVersion

   minSdkVersion 17
    targetSdkVersion 27
    multiDexEnabled true

Sekarang jika Anda menemukan kesalahan ini

Kesalahan: Gagal menyelesaikan: Buka File multidex-instrumentasi

Anda perlu mengubah tingkat Anda ke 3.0.1

        classpath 'com.android.tools.build:gradle:3.0.1'

Dan letakkan kode berikut di file gradle-wrapper.properties

distributionUrl = https: //services.gradle.org/distributions/gradle-4.1-all.zip

Akhirnya

tambahkan Aplikasi kelas dalam proyek Dan perkenalkan ke AndroidManifest yang dikembangkan dari MultiDexApplication

public class App extends MultiDexApplication {

@Override
public void onCreate( ) {
    super.onCreate( );
}

}

Jalankan proyek terlebih dahulu untuk membuat kesalahan, lalu bersihkan proyek

Akhirnya, luncurkan kembali proyek dan nikmati

younes
sumber
Saya masih memiliki "Gagal menyelesaikan: multidex-instrumentation"
Makalele
11

Jika Anda menggunakan minifyEnabled dengan Proguard, Anda kemungkinan tidak perlu mengaktifkan multi-dex. Saya setuju dengan MG Developer bahwa Anda harus mencoba menghindari multi-dex jika memungkinkan. Solusi saya adalah mengaktifkan multi-dex hanya untuk debug build. minifyEnabled menyelesaikan masalah untuk rilis build

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        // getting error: Cannot fit requested classes in a single dex file.  # methods: 65537 > 65536
        // https://developer.android.com/studio/build/multidex
        // minifyEnabled true (used with release) will fix this by getting rid of unused method calls, but this will hide debugging info on crash
        multiDexEnabled true
    }
}
Ernie Thomason
sumber
apa beberapa kelemahan menggunakan multidex jika kita harus?
isJulian00
1
Pertanyaan yang sangat bagus, yang saya tidak punya jawabannya. Baca yang berikut jika Anda belum: di developer.android.com/studio/build/multidex#mdex-gradle Sepertinya untuk API> = 21, tidak ada banyak masalah. Untuk <21, tampaknya Android harus melakukan beberapa gerak kaki mewah yang berpotensi memiliki masalah. Karena banyak orang yang perlu mengaktifkan ini, tebakan saya adalah bahwa Android telah membuatnya bekerja dengan baik, jadi saya tidak akan terlalu mengkhawatirkannya. Saya hanya ingin bersikap konservatif jika memungkinkan.
Ernie Thomason
10

Saya tidak tahu mengapa, mungkin itu karena saya berkembang di Kotlin tetapi untuk memperbaiki kesalahan ini saya akhirnya harus membuat kelas yang diperluas MultiDexApplicationseperti ini:

class MyApplication : MultiDexApplication() {
}

dan di saya, Manifest.xmlsaya harus mengatur

<application
        ...
        android:name=".MyApplication">

untuk tidak membingungkan siapa pun, saya juga melakukan:

multiDexEnabled true
implementation 'com.android.support:multidex:1.0.3'

untuk androidx, ini juga berfungsi untuk saya:

implementation 'androidx.multidex:multidex:2.0.0'

...

<application android:name="android.support.multidex.MultiDexApplication">

tidak bekerja untuk saya

Boe-Dev
sumber
ingat untuk melakukan proyek clean and rebuild setelah pengaturan multiDexEnabled true. Ini memperbaikinya untuk saya.
pseudozach
mengubah atribut nama aplikasi dalam manifes juga tidak berfungsi untuk saya, tetapi mengaktifkan multiDex di file gradle build dan menambahkan implementasinya berhasil. Tampaknya opsional untuk mengubah tag nama manifes sekarang?
Cody
9

Anda memiliki terlalu banyak metode yang dihitung. File Android dex memiliki batas 65536 metode yang diizinkan untuk Anda miliki.

Sebagai permulaan, jika Anda tidak membutuhkan semua API layanan Google Play dan hanya lokasinya, ganti

compile 'com.google.android.gms:play-services:11.8.0'

dengan

compile 'com.google.android.gms:play-services-location:11.8.0'

Anda dapat merujuk ke halaman ini untuk cara menghindarinya atau jika diperlukan untuk memperbolehkan lebih banyak: https://developer.android.com/studio/build/multidex.html

Raz
sumber
ya tapi itu bukan masalah nyata. Saya pikir saya menambahkan dependensi yang sama. Satu untuk Firebase dan lainnya untuk lokasi Periksa di bawah dua baris.
Muhammad Adil Sattar
6

Yang harus saya lakukan adalah mengatur Versi SDK Minimum ke 21 di File> Struktur Proyek> Aplikasi> Flavours

Will Buffington
sumber
6

tambahkan file android / app / build.gradle Anda

 defaultConfig {
        applicationId "com.ubicacion"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        multiDexEnabled true // ✔
        missingDimensionStrategy 'react-native-camera', 'general'
    }
Jerman
sumber
5

Saya telah menjumpai kesalahan ini dua kali dan solusi untuk ini adalah; Periksa file aplikasi gradle Anda untuk melihat SDk target Anda, jika 20 atau lebih tinggi, cukup tambahkan satu baris ke file Andadefaultconfig { multiDexEnabled true }

Jika targetSDK Anda kurang dari 20, tambahkan baris ke defaultConfig Anda dan juga tambahkan dependensi

implementation 'com.android.support:multidex:1.0.3'.

Periksa tautan ini untuk informasi lebih lanjut.

https://developer.android.com/studio/build/multidex#mdex-gradle

Mpwanyi Samuel
sumber
5

Menggunakan dukungan multidex harus menjadi pilihan terakhir. Secara default gradle build akan mengumpulkan banyak dependensi transitif untuk APK Anda. Seperti yang disarankan di Google Developers Docs , upaya pertama untuk menghapus dependensi yang tidak perlu dari proyek Anda.

Menggunakan baris perintah navigasikan ke Android Projects Root. Anda bisa mendapatkan pohon dependensi kompilasi sebagai berikut.

gradlew app:dependencies --configuration debugCompileClasspath

Anda bisa mendapatkan daftar lengkap pohon ketergantungan

gradlew app:dependencies

masukkan deskripsi gambar di sini

Kemudian hapus dependensi transitif yang tidak perlu atau dari aplikasi build.gradle Anda. Sebagai contoh jika aplikasi Anda menggunakan dependensi yang disebut 'com.google.api-client' Anda dapat mengecualikan perpustakaan / modul yang tidak Anda butuhkan.

implementation ('com.google.api-client:google-api-client-android:1.28.0'){
   exclude group: 'org.apache.httpcomponents'
   exclude group: 'com.google.guava'
   exclude group: 'com.fasterxml.jackson.core'
   }

Kemudian di Android Studio Pilih Build> Analyze APK ... Pilih file release / debug APK untuk melihat isinya. Ini akan memberi Anda jumlah metode dan referensi sebagai berikut.

Analisis APK

Pengembang MG
sumber
1
apa beberapa kelemahan menggunakan multidex jika kita harus
isJulian00
2

Dalam membangun: aplikasi

apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
    applicationId "com.proyecto.marketdillo"
    minSdkVersion 14
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
  }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0-rc02'
implementation 'com.android.support:design:28.0.0-rc02'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.squareup.picasso:picasso:2.5.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.firebase:firebase-firestore:17.1.5'
implementation 'com.android.support:multidex:1.0.3'
}
apply plugin: 'com.google.gms.google-services'
Sebastián Giraldo
sumber
1
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.dev.khamsat"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "2.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
Mohamed Slimane
sumber
ini juga cukup bagiku.
nyxee
1

Kesalahan ini disebabkan oleh jumlah dependensi kelas yang Anda miliki di file Gradle aplikasi Anda. Jika kelas melebihi 72.400, Anda mungkin ingin menggunakan multidex sebagai solusi untuk lebih baik menangani pengindeksan file. Cari tahu lebih banyak dari sini: https://developer.android.com/studio/build/multidex

Mpwanyi Samuel
sumber