Yeni Android Multidex destek kitaplığıyla multidexing nasıl etkinleştirilir


142

Uygulamalarımdan birinin yöntem sınırını kırmak için yeni Multidex destek kitaplığını kullanmak istiyorum.

Android Lollipop ile Google, multidex'i kolaylaştıran multidex destek kitaplığı tanıttı.

Bu kütüphaneyi kullanmak ve uygulamamı multidex desteği ile oluşturmak için hangi adımlar gerekiyor?


multidex üçüncü taraf kütüphaneyi uygulamanıza destekleyin
Keshav Gera

Yanıtlar:


293

Düzenle:

Android 5.0 (API düzey 21) ve üstü, çokludizlemeyi destekleyen ART kullanır. Bu nedenle, minSdkVersion21 veya daha yüksek bir değere sahipseniz, multidex destek kitaplığına gerek yoktur.


Değiştirin build.gradle:

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

         defaultConfig {
             minSdkVersion 14 //lower than 14 doesn't support multidex
             targetSdkVersion 22

             // Enabling multidex support.
             multiDexEnabled true
         }
}

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

Birim testleri yapıyorsanız, bunu Applicationsınıfınıza dahil etmek isteyeceksiniz :

public class YouApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}

Veya sadece applicationsınıfınızı genişletinMultiDexApplication

public class Application extends MultiDexApplication {

}

Daha fazla bilgi için bu iyi bir rehberdir.


2
Yeni yapı araçlarını kullanıyorsanız, bu kesinlikle gitmenin yoludur.
Janusz

1
@ jem88 Gradle'ınızı 1.0 olarak güncellediniz mi ?? 2.2 üzerinde olmalısınız. + (Bir göz atın gradle-wrapper.properties) Önemli noktalar: 1 buildToolsVersion'ınızın 21.1.1 veya üstü olması gerekir. 2 eklenti multiDexEnabled truesizin build.gradle sizin defaultConfig için (haber değil orada =) 3 ekleyin'com.android.support:multidex:1.0.0'
Çad Bingham

3
Uygulama sınıfını kullanmazsak nasıl olur? Eklemektedir android:name="android.support.multidex.MultiDexApplication"için applicationetiketinin AndroidManifest.xmlyeterli?
Buddy

1
'com.android.support:multidex:1.0.1' derleyin 23
Naveed Ahmad

3
Google geliştirici belgelerine göre, @NaveedAhmad: ..if your minSdkVersion is set to 20 or lower you must use... 'compile 'com.android.support:multidex:1.0.1'.
Sakiboy

44

Çoklu dexing işlemini başlatmak için aşağıdaki adımlar gereklidir:

Projenize android-support-multidex.jar dosyasını ekleyin. Kavanoz Android SDK klasöründe bulunabilir / sdk / extras / android / support / multidex / library / libs

Artık uygulamalarınızın uygulama sınıfının MultiDexApplication uygulamasını genişletmesine izin verdiniz

public class MyApplication extends MultiDexApplication

veya attachBaseContext'i şu şekilde geçersiz kılarsınız:

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

Geçersiz kılma yaklaşımını kullandım çünkü bu, uygulama sınıfınızın sınıf hiyerarşisiyle uğraşmıyor.

Artık uygulamanız çoklu dex kullanmaya hazırdır. Bir sonraki adım, çok amaçlı bir apk oluşturmak için gradle'ı ikna etmektir. Yapı araçları ekibi bunu kolaylaştırmak için çalışıyor, ancak şu an için uygulamalarınızın android kısmına aşağıdakileri eklemeniz gerekiyor.

   dexOptions {
      preDexLibraries = false
   }

Ve aşağıdaki uygulamalar build.gradle genel bölümüne

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

Daha fazla bilgi Alex Lipovs blogunda bulunabilir .


9
bunu kepçesiz nasıl kullanabilirim?
lacas

3
@ Janusz, graide olmadan multidex seçeneğini kullanmak mümkün mü?
Devrim

1
Bunun kepçesiz mümkün olduğunu sanmıyorum.
Janusz

5
Eclipse Ant düzeltmesi nedir, gradle değil?
portföy geliştiricisi

Projem gradle dosyası oluşturmuyor, bir tane oluşturdum ve adımlarınızı takip ettim, ama benim için çalışmıyor
BaDo

16

SIMPLY, multidex'i etkinleştirmek için şunları yapmanız gerekir ...

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}
...
}

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

ayrıca bildirim dosyanızı değiştirmeniz gerekir. Manifestinizde, multiidex destek kitaplığından MultiDexApplication sınıfını bunun gibi uygulama öğesine ekleyin

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.android.multidex.myapplication">
   <application
       ...
       android:name="android.support.multidex.MultiDexApplication">
       ...
   </application>
</manifest>

1
Bu, çoklu dexing'i etkinleştirmez. Uygulama sınıfını hala kaçırıyorsunuz.
Chad Bingham

1
Yorum için teşekkürler, Bu benim durumum için çalıştı. Developer.android.com/tools/building/multidex.html
smoothumut adresinden

1
Evet, haklısın. Testleri çalıştırmadığınız sürece uygulama sınıfınızda olması gerekmez gibi görünüyor.
Chad Bingham

Bunu anlamıyorum .. Uygulama bildirimimin zaten bir ad etiketi var. Ben yerini alacak sanmıyorum android:name="android.support.multidex.MultiDexApplication Lütfen bana rehberlik ..
mboy

1
@mboy: Hayır, MainActivity ve uygulama sınıfı farklı. Burada uygulama sınıfı hakkında daha fazla bilgi edinin: rominirani.com/android-application-class
akshay7692

9

Sizin de build.gradle bu bağımlılığı ekleyin:

compile 'com.android.support:multidex:1.0.1'

yine build.gradle dosyanızda bu satırı defaultConfig bloğuna ekleyin :

multiDexEnabled true

Uygulama sınıfınızı Uygulama'dan genişletmek yerine, bunu MultiDexApplication'den uzatın ; sevmek :

public class AppConfig extends MultiDexApplication {

şimdi gitmekte fayda var! Ve ihtiyacınız olması durumunda, her MultiDexApplicationşey

public class MultiDexApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

6

build.gradle

multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'

AndroidManifest.xml

<application
    android:name="androidx.multidex.MultiDexApplication"

3

Adım 1: build.grade dosyasını değiştirin

defaultConfig {
    ...
    // Enabling multidex support.
    multiDexEnabled true
}

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.0'
}

Adım 2: Uygulama sınıfını ayarlama

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}

3. Adım: Notu değiştirin.

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Çalışacak!. Teşekkürler.


"MultiDex simgesi bulunamadı" mesajı alıyorum. Bu sorunla daha önce karşılaşan var mı?
Aung Myint Thein

3

İşte Android X ile Mayıs 2020'den itibaren güncel bir yaklaşım.

İçin minSdk> = 21

Hiçbir şey yapmanıza gerek yok. Bu cihazların tümü yerel olarak multidex'i destekleyen Android RunTime (ART) VM'sini kullanır.

İçin minSdk<21

Senin içinde modül -düzeyi build.gradleaşağıdaki konfigürasyonlar doldurulur emin olun:

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}

Ardından, src/main/AndroidManifest.xmlihtiyaçları beyan etmek MultiDexApplicationolarak application:name:

<manifest package="com.your.package"
          xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="androidx.multidex.MultiDexApplication" />
</manifest>

1

AndroidManifest.xml dosyasına ekle:

android:name="android.support.multidex.MultiDexApplication" 

VEYA

MultiDex.install(this);

özel uygulamanızın attachBaseContext yönteminde

veya özel Uygulamanız MultiDexApplication'yi genişletir

build.gradle öğenizde multiDexEnabled = true değerini ekleyin

defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}

@Harsha bunu kullanmanız önerilmez, ancak manifest dosyanıza largeHeap eklemeye çalışın <application android: largeHeap = "true"> </application>
Malik Abu Qaoud

android: largeHeap = "true" android: allowBackup = "true" her ikisi de eklendi
Harsha

bunu not dosyasına ekleyin >>>>>>>>> dexOptions {javaMaxHeapSize "4g"}
Malik Abu Qaoud 27:17

1

İlk önce Proguard ile denemelisiniz (Bu, kullanılmayan tüm kodları temizler)

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

0

Projenizde multi-dex'i etkinleştirmek istiyorsanız, gradle.builder'a gitmeniz yeterlidir.

ve bunu bağımlılığınıza ekleyin

 dependencies {
   compile 'com.android.support:multidex:1.0.0'}

o zaman eklemelisin

 defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true}

Daha sonra bir sınıf açın ve Uygulama'da genişletin Uygulamanız Uygulama sınıfını genişletiyorsa, oncrete () yöntemini geçersiz kılabilir ve çağrı yapabilirsiniz

   MultiDex.install(this) 

multidex'i etkinleştirmek için.

ve sonunda tezahürünüze ekleyin

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
   ...
     android:name="android.support.multidex.MultiDexApplication">
   ...
   </application>
 </manifest> 

1
Nedir gradle.builder?
Chad Bingham

stüdyo projenizde bulunan gradle dosyanız
pavel

0

Yukarıdaki tüm cevaplar harika

Ayrıca bunu ekleyin, aksi takdirde uygulamanız herhangi bir sebep olmadan benimki gibi çökecek

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

0

Androidx ile klasik destek kitaplıkları artık çalışmıyor.

Basit çözüm aşağıdaki kodu kullanmaktır

Senin içinde build.gradledosyanın

android{
  ...
  ...
  defaultConfig {
     ...
     ...
     multiDexEnabled true
  }
  ...
}

dependencies {
  ...
  ...
  implementation 'androidx.multidex:multidex:2.0.1'
}

Manifestinizde uygulama etiketine ad niteliği ekleyin

<manifest ...>
    <application
        android:name="androidx.multidex.MultiDexApplication"
     ...
     ...>
         ...
         ...
    </application>
</manifest>

Uygulamanız API 21 veya daha üstünü hedefliyorsa, varsayılan olarak multidex etkindir.

Şimdi, multidex'i desteklemeye çalışırken karşılaştığınız birçok sorundan kurtulmak istiyorsanız - önce ayarlayarak kod küçültmeyi deneyin minifyEnabled true.


-2

sadece build.gradle snipped ekleyerek de iyi çalışıyor

android {
   compileSdkVersion 22
   buildToolsVersion "23.0.0"

     defaultConfig {
         minSdkVersion 14 //lower than 14 doesn't support multidex
         targetSdkVersion 22

         **// Enabling multidex support.
         **multiDexEnabled true****
     }
}

-5

Multi_Dex.java

public class Multi_Dex extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
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.