Как включить multidexing с новой библиотекой поддержки Android Multidex

Я хочу использовать новую библиотеку поддержки Multidex, чтобы сломать ограничение метода для одного из моих приложений.

с Android Lollipop Google представила библиотеку поддержки multidex, которая упрощает multidex.

какие шаги необходимы для использования этой библиотеки и создания моего приложения с поддержкой multidex?

10 ответов


Edit:

Android 5.0 (уровень API 21)и выше использует искусство, которое изначально поддерживает многодексное. Поэтому, если ваш minSdkVersion 21 или выше, библиотека поддержки multidex не требуется.


изменить 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 {
    compile 'com.android.support:multidex:1.0.3'
}

если вы выполняете модульные тесты, вы захотите включить это в свой Application класс:

public class YouApplication extends Application {

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

}

для получения дополнительной информации, этот хорошее руководство.


для запуска multi dexing необходимы следующие шаги:

добавить android-поддержка-multidex.jar для вашего проекта. Банку может быть найдена в вашем Android папке SDK /пакет SDK/массовка/андроид/поддержка/multidex/библиотеки/библиотеки

теперь вы либо позволяете вашему классу приложений приложений расширять MultiDexApplication

public class MyApplication extends MultiDexApplication

или вы переопределяете attachBaseContext следующим образом:

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

я использовал подход переопределения, потому что это не связывается с классом иерархии классов приложения.

теперь ваше приложение готово использовать multi dex. Следующий шаг-убедить gradle построить multi dexed apk. Команда build tools работает над тем, чтобы сделать это проще, но на данный момент вам нужно добавить следующее В android-часть сборки приложений.Gradle в

   dexOptions {
      preDexLibraries = false
   }

и следующее к общей части сборки приложений.Gradle в

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

больше информации можно найти на Алекс Lipovs блог.


просто, чтобы включить multidex, вам нужно ...

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

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

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

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

также необходимо изменить файл манифеста. В манифесте добавьте класс MultiDexApplication из библиотеки поддержки multidex в элемент приложения, например

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

в своем построить.Gradle в добавить эту зависимость:

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

раз в построить.Gradle в file добавьте эту строку в defaultConfig блок:

multiDexEnabled true

вместо расширения класса приложения из приложение продлить его с MultiDexApplication ; например :

public class AppConfig extends MultiDexApplication {

теперь вы хорошо идти! И в случае, если вам это нужно, все MultiDexApplication это

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

Шаг 1: изменить построение.класс!--6-->

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

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

Шаг 2: настройка класса приложения

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

Шаг 3: изменить класс.свойства

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

Он будет работать!. Спасибо.


сначала вы должны попробовать с Proguard (это очистить весь неиспользуемый код)

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

если вы хотите включить multi-dex в своем проекте, просто перейдите к gradle.строитель!--5-->

и добавьте это в свой dependencie

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

затем вы должны добавить

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

// Enabling multidex support.
multiDexEnabled true}

затем откройте класс и расширьте его до Application Если ваше приложение использует расширяет класс приложения, вы можете переопределить Бру() метод и вызвать

   MultiDex.install(this) 

включить multidex.

и, наконец, добавьте в свой манифест

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

добавить в AndroidManifest.XML-код:

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

или

MultiDex.install(this);

в методе attachBaseContext вашего пользовательского приложения

или ваше пользовательское приложение extend MultiDexApplication

добавить multiDexEnabled = true в вашей сборке.Gradle в

defaultConfig {
    multiDexEnabled true
}

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

просто добавляя это, обрезанное в сборке.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****
     }
}

Multi_Dex.java

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