如何使用新的Android Multidex支持库启用多索引

Jan*_*usz 132 android gradle android-multidex

我想使用新的Multidex支持库来打破我的某个应用程序的方法限制.

借助Android Lollipop,Google推出了一个multidex支持库,可以轻松实现多索引.

使用此库需要哪些步骤以及使用multidex支持构建我的应用程序?

Cha*_*ham 271

编辑:

Android 5.0(API级别21)及更高版本使用本机支持多索引的ART.因此,如果您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 {
    implementation 'com.android.support:multidex:1.0.3'
}
Run Code Online (Sandbox Code Playgroud)

如果您正在运行单元测试,则需要在Application课程中包含此项:

public class YouApplication extends Application {

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

}
Run Code Online (Sandbox Code Playgroud)

或者只是让你的application课程扩展MultiDexApplication

public class Application extends MultiDexApplication {

}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,这是一个很好的指南.

  • 如果我们不使用应用程序类怎么样?在`AndroidManifest.xml`中添加`android:name ="android.support.multidex.MultiDexApplication"到`application`标签是否足够? (3认同)
  • @NaveedAhmad,根据谷歌开发者文档:`..如果你的minSdkVersion设置为20或更低,你必须使用...``'compile'c​​om.android.support:multidex:1.0.1'`. (3认同)
  • 如果您正在使用新的构建工具,那么这绝对是您的选择. (2认同)

Jan*_*usz 44

启动多dexing需要以下步骤:

将android-support-multidex.jar添加到您的项目中.jar可以在Android SDK文件夹/ sdk/extras/android/support/multidex/library/libs中找到

现在,您要么让应用程序类应用程序类扩展MultiDexApplication

public class MyApplication extends MultiDexApplication
Run Code Online (Sandbox Code Playgroud)

或者像这样覆盖attachBaseContext:

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}
Run Code Online (Sandbox Code Playgroud)

我使用了覆盖方法,因为它不会混淆应用程序类的类层次结构.

现在您的应用已准备好使用multi dex.下一步是说服gradle构建一个多dexed apk.构建工具团队正在努力使这更容易,但目前你需要将以下内容添加到你的应用程序build.gradle的android部分

   dexOptions {
      preDexLibraries = false
   }
Run Code Online (Sandbox Code Playgroud)

以下是应用build.gradle的一般部分

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

更多信息可以在Alex Lipovs博客上找到.

  • 如何在没有gradle的情况下使用它? (9认同)
  • 什么是Eclipse Ant修复,而不是gradle? (5认同)
  • @Janusz是否可以使用不带gradle的multidex选项? (3认同)

smo*_*mut 17

简单,为了启用multidex,你需要......

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'
}
Run Code Online (Sandbox Code Playgroud)

您还必须更改清单文件.在清单中,将Multidex支持库中的MultiDexApplication类添加到这样的应用程序元素中

<?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>
Run Code Online (Sandbox Code Playgroud)


Moh*_*eza 9

build.gradle中添加此依赖项:

compile 'com.android.support:multidex:1.0.1'
Run Code Online (Sandbox Code Playgroud)

再次在build.gradle文件中将此行添加到defaultConfig块:

multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)

而不是从Application扩展您的应用程序类,而是从MultiDexApplication扩展它; 喜欢 :

public class AppConfig extends MultiDexApplication {
Run Code Online (Sandbox Code Playgroud)

现在你很高兴去!如果你需要它,一切MultiDexApplication都是

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


Isa*_*sky 7

构建.gradle

multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

<application
    android:name="androidx.multidex.MultiDexApplication"
Run Code Online (Sandbox Code Playgroud)


Jam*_*son 7

这是截至 2020 年 10 月使用 Android X 的最新方法。这来自 Android 的文档“为具有超过 64K 方法的应用程序启用 multidex ”。

对于minSdk>= 21

你不需要做任何事情。所有这些设备都使用 Android RunTime (ART) VM,它本机支持 multidex。

对于minSdk< 21

在您的module -level 中build.gradle,确保填充了以下配置:

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)

您需要安装显式 multidex 支持。该文档包括三种方法,您必须选择一种

例如,在您的 中src/main/AndroidManifest.xml,您可以声明MultiDexApplicationapplication:name

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)