Hata: İstenen sınıflar tek bir dex dosyasına sığdırılamıyor. Bir ana dex listesi sağlamayı deneyin. # yöntemler: 72477> 65536


309

Kaynaşmış konum hizmetleri eklemek istiyorum ama bana bazı hatalar gösteriyor. Bana yardım et.

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'

Yanıtlar:


385

Size verdikleri cevapların hiçbiri ayrıntılı değildi. Sorun Multidex'te yatıyor. Kütüphaneyi uygulama grubuna eklemelisiniz:

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

Ardından, uygulama grubunun defaultConfig'sini ekleyin:

multiDexEnabled true

Başvurunuz Multidex türünde olmalıdır. Manifest'te yazmalısınız:

android:name=".MyApplication"

"Uygulamam" ya Multidex sınıfı olmalı ya da onu genişletmelidir.


5
Yani MyApplication extends android.support.multidex.MultiDexApplication?
ban-geoengineering

2
Bu çözümü denedim, ancak şu yeni sorunla karşılaşıyorum: stackoverflow.com/questions/49518115/…
ban-geoengineering

22
İşte bunun neden olduğu ve daha iyi bir sürüm sürümünün nasıl yapılacağı hakkında daha fazla açıklama sağlayan resmi android doktor sayfası: developer.android.com/studio/build/multidex
Vrakfall

2
bu sorunu çözmek için iyi bir yöntem değildir, kullanılmayan kodu ve kütüphaneleri kaldırmak daha iyidir, proje kodunuzu yeniden
düzenleyin

5
googles kütüphanelerinin 80000 yöntemi yoksa 80000 yönteminin olmaması iyi bir çözüm olurdu (multidex eklemelerinin tüm nedeni, herkesin kullanmasını istedikleri kendi hizmet kütüphanelerinin on binlerce yöntemi olmasıydı).
Lassi Kinnunen

195

Aşağıdaki çözümle ilgili sorunumu çözdüm:

Gradle derleme dosyasında bağımlılık ekleyin:

'com.android.support:multidex:1.0.3' uygulaması

Ve sonra "defaultConfig" bölümünde ekleyin:

multiDexEnabled true


8
Benim için çalıştı. Buradaki yapılandırma hakkında ayrıntılı talimatlar: developer.android.com/studio/build/multidex#mdex-gradle
Alex Burdusel

Çoğu uygulamada multidex desteğinin etkinleştirilmesi gerekli değildir. Kullanılmayan kütüphaneleri kaldırmayı düşünmelisiniz, lütfen aşağıdaki cevabıma bakın.
MG Geliştirici

106

uygulamanızın veya modülünüzün değişikliklerini yapın build.gradle

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

Resmi belgelere göre

Android 5.0 ve üstü için Multidex desteği

Android 5.0 (API düzey 21) ve üstü, APK dosyalarından birden çok DEX dosyası yüklemeyi yerel olarak destekleyen ART adlı bir çalışma zamanı kullanır. ART, classesN.dex dosyalarını taranan ve Android cihaz tarafından yürütülmek üzere tek bir .oat dosyasında derleyen uygulama yükleme zamanında ön derleme gerçekleştirir. Bu nedenle, minSdkVersion'ınız 21 veya daha yüksekse, multidex destek kitaplığına ihtiyacınız yoktur.

Android 5.0 çalışma zamanı hakkında daha fazla bilgi için ART ve Dalvik'i okuyun.

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


59

Dex dosyaları nedir: 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.

Bu özel durumun nedeni: DEX belirtimi, tek bir DEX dosyasında başvurulabilecek toplam yöntem sayısını 65,536 (64K başvuru sınırı) ile sınırlar; Android çerçeve yöntemleri, kitaplık yöntemleri ve kendi kodunuzdaki yöntemler dahil.

Adım 01. Aşağıdaki bağımlılığı aşağıdaki gibi ekleyin

Androidx Kullanıcıları İçin,

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

Androidx Kullanıcıları için,

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

Adım 02:

Bu Sync projelerini ekledikten sonra ve projeyi çalıştırmadan önce çalıştırmadan önce bir proje oluşturduğunuzdan emin olun. aksi takdirde bir istisna elde edersiniz.


53

Sen takip edebilir bu .

Android 5.0'dan önceki platform sürümleri (API düzey 21) uygulama kodunu yürütmek için Dalvik çalışma zamanını kullanır. Varsayılan olarak Dalvik, uygulamaları APK başına tek bir classes.dex bayt kodu dosyasıyla sınırlar. Bu sınırlamayı aşmak için multidex destek kitaplığını projenize ekleyebilirsiniz:

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

MinSdkVersion'ınız 21 veya daha yüksek bir değere ayarlanmışsa, yapmanız gereken tek şey burada gösterildiği gibi modül düzeyindeki build.gradle dosyanızda multiDexEnabled öğesini true olarak ayarlamaktır:

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

34

bağımlılıkları kullandığınızda yöntemleriniz arttı! google'ın bunun için bir çözümü var. bu Multidex!

NOT: min SDK'nın 14'ün üzerinde olduğundan emin olun.

build.gradle:

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



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

AndroidX KULLANIMI İÇİN:

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

Daha fazla bilgi için lütfen orjinal bağlantıya gidin:

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


Harika bir çözüm! sorunumu düzeltti
Vaibhav Herugu

29

Merhaba sorun burada kaldırmak

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

neden?

Not: Birleşik oyun hizmetleri hedefini kullanmayın. Uygulamanızı şişirerek düzinelerce kitaplık getirir. Bunun yerine, yalnızca uygulamanızın kullandığı belirli Google Play hizmetleri API'larını belirtin.

Ve ihtiyacınız olanı kullanın. https://developers.google.com/android/guides/setup

Konum hizmeti için beğen

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

Bulut Mesajlaşması için

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

yup şimdi sorunla karşılaşıyorum çalıştırma düğmem devre dışı.
Muhammed Adil Sattar

27

DEBUG APK oluşturuyorsanız , şunları ekleyin:

debug {
            multiDexEnabled true
        }

içeride buildTypes

ve RELEASE APK oluşturuyorsanız , multiDexEnabled trueserbest bırakma bloğunu

release {
                ...
                multiDexEnabled true
                ...
        }

25

Çarpıntı projeleri için bu sorunu da çözebilirsiniz

\ android \ app \ build.gradle dosyasını açın

aşağıdakilere sahip olmalısınız:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28

    }

}

MinSdkVersion'ınız 21 veya daha yüksek bir değere ayarlanmışsa, tüm yapmanız gereken multiDexEnabled öğesini defaultConfig öğesinde true değerine ayarlamaktır . Bunun gibi

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

    }

}

minSdkVersion öğeniz 20 veya daha düşük bir değere ayarlanırsa, multiDexEnabled true değerini defaultConfig öğesine ekleyin

Ve uygulamayı tanımlayın

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

Sonunda sahip olmalısınız:

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

}

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

Daha fazla bilgi için bunu okuyun: https://developer.android.com/studio/build/multidex


1
hhahaha! Size yardımcı olduğu için mutluyum!
Richardd

18

Sadece aşağıdakileri yapın:

build.gradle

(module:app)


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

Ve build.gradleuygulama düzeyi dosyanıza aşağıdaki bağımlılığı ekleyin

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

13
multiDexEnabled true

Lütfen bunu uygulamanıza eklemeyi deneyin defaultConfig {} .Bu sorunu çözmeme yardımcı oluyor


12

Gradle derleme dosyasında bağımlılık ekleyin:

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

veya

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

veya

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

Ve sonra "defaultConfig" bölümünde ekleyin:

multiDexEnabled true

TargetSdkVersion altında

   minSdkVersion 17
    targetSdkVersion 27
    multiDexEnabled true

Şimdi bu hatayla karşılaşırsanız

Hata: Çözülemedi: multidex-instrumententation Dosya Aç

Sınıfınızı 3.0.1 olarak değiştirmeniz gerekir

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

Ve gradle-wrapper.properties dosyasına aşağıdaki kodu koyun

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

En sonunda

sınıf eklemek projede Applition Ve AndroidManifest tanıtmak olan MultiDexApplication uzanır

public class App extends MultiDexApplication {

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

}

Bir hata oluşturmak için önce projeyi çalıştırın, ardından projeyi temizleyin

Son olarak, projeyi yeniden başlatın ve tadını çıkarın


Hâlâ "Çözülemedi: multidex-enstrümantasyon"
Makalele

11

Proguard ile minifyEnabled kullanıyorsanız, multi-dex'i etkinleştirmeniz gerekmez. Mümkünse multi-dex'ten kaçınmaya çalışmanız gerektiğine MG Developer ile katılıyorum. Benim çözümüm multi-dex'i sadece hata ayıklama yapıları için etkinleştirmekti. minifyEnabled, sürüm derlemeleri sorununu çözer

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
    }
}

eğer gerekiyorsa multidex kullanmanın bazı dezavantajları nelerdir?
isJulian00

1
Çok iyi bir soru, ki gerçekten bir cevabım yok. Eğer yapmadıysanız aşağıdakileri okuyun: developer.android.com/studio/build/multidex#mdex-gradle adresinde API> = 21 gibi görünüyor, fazla bir sorun yok. <21 için, Android'in potansiyel olarak sorunları olabilecek bazı süslü ayak işleri yapması gerekiyor gibi görünüyor. Birçok insanın bunu açması gerektiğinden, tahminim Android'in iyi çalışmasını sağladı, bu yüzden çok fazla endişelenmeyeceğim. Mümkün olduğunca muhafazakar olmayı seviyorum.
Ernie Thomason

10

Neden hiçbir fikrim yok, belki çünkü Kotlin içinde geliştirmek ama bu hatayı düzeltmek için nihayet böyle uzanan bir sınıf oluşturmak zorunda MultiDexApplication:

class MyApplication : MultiDexApplication() {
}

ve benim Manifest.xmliçin

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

kimseyi karıştırmamak için şunu da yaparım:

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

androidx için, bu benim için de çalışır:

implementation 'androidx.multidex:multidex:2.0.0'

...

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

benim için çalışmıyor


multiDexEnabled true değerini ayarladıktan sonra projeyi temizlemeyi ve yeniden oluşturmayı unutmayın. Bu benim için düzeltildi.
20'te pseudozach

manifest'teki uygulama adı özniteliğini değiştirmek de benim için çalışmadı, ancak gradle derleme dosyasında multiDex'i etkinleştirmek ve uygulamayı eklemek işe yaradı. Görünen ad etiketini şimdi değiştirmek isteğe bağlı gibi görünüyor mu?
Cody

9

Saymak için çok fazla yönteminiz var. Android dex dosyası, sahip olmanıza izin verilen 65536 yöntem sınırına sahiptir.

Yeni başlayanlar için tüm Google Play Hizmetleri API'sına ve yalnızca konuma ihtiyacınız yoksa,

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

ile

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

Bundan kaçınmanın yolları veya daha fazlasına izin vermek için gerekirse bu sayfaya başvurabilirsiniz: https://developer.android.com/studio/build/multidex.html


evet ama bu gerçek bir sorun değil. Aynı bağımlılıkları eklediğimi düşünüyorum. Biri Firebase ve diğeri konum için Körüklü iki hattı kontrol edin.
Muhammed Adil Sattar

6

Tek yapmam gereken Dosya> Proje Yapısı> Uygulama> Tatlar'da Minimum SDK Sürümü'nü 21 olarak ayarlamaktı


6

dosyanızı ekle android / app / build.gradle

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

5

İki kez bu hatayla karşılaştım ve bunun çözümü; Hedef SDk'nizi görmek için uygulama derecelendirme dosyanızı kontrol edin, 20 veya daha yüksekse, cihazınıza bir satır ekleyin.defaultconfig { multiDexEnabled true }

HedefSDK'nız 20'den küçükse, satırı defaultConfig dosyanıza ekleyin ve ayrıca bir bağımlılık ekleyin

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

Daha fazla bilgi için bu bağlantıyı kontrol edin.

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


5

Multidex desteğini kullanmak son çare olmalıdır. Varsayılan olarak gradle derlemesi, APK'nız için bir ton geçiş bağımlılığı toplar. Google Developers Docs'ta önerildiği gibi , öncelikle projenizdeki gereksiz bağımlılıkları kaldırmaya çalışın.

Komut satırını kullanarak Android Projects Root'a gidin. Derleme bağımlılığı ağacını aşağıdaki gibi alabilirsiniz.

gradlew app:dependencies --configuration debugCompileClasspath

Bağımlılık ağacının tam listesini alabilirsiniz

gradlew app:dependencies

resim açıklamasını buraya girin

Ardından gereksiz veya geçişli bağımlılıkları uygulama derlemenizden kaldırın. Örneğin, uygulamanız 'com.google.api-client' adı verilen bağımlılığı kullanıyorsa, ihtiyacınız olmayan kitaplıkları / modülleri hariç tutabilirsiniz.

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'
   }

Ardından Android Studio'da Oluştur> APK'yı Analiz Et ... 'i seçin. Bu size aşağıdaki gibi yöntem ve referans sayısını verecektir.

Analiz APK


1
eğer gerekiyorsa multidex kullanmanın dezavantajları nelerdir
isJulian00

2

Yapımda: uygulama

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'

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
    }

bu da benim için yeterliydi.
nyxee

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.