方法数超过 65,536,可使用MultiDex分包(注意:仅在minSdkVersion 设为 20 或更低版本情况下)
1.在build.gradle配置依赖以及开启
android {
defaultConfig {
minSdkVersion 15
targetSdkVersion 33
multiDexEnabled true
}
}
dependencies {
implementation "androidx.multidex:multidex:2.0.1"
}
2.使用MultiDexApplication
1)如果您不替换 Application 类:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
</manifest>
2)如果您替换 Application 类
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
注意:在
MultiDex.install() 完成之前,不要通过反射或 JNI 执行
MultiDex.install() 或其他任何代码。MultiDex 跟踪功能不会追踪这些调用,从而导致出现
ClassNotFoundException,或因 DEX 文件之间的类分区错误而导致验证错误。
3.声明主 DEX 文件中必需存在的类
1)创建一个名为 multidex-config.pro 的文件(文件采用与 ProGuard 相同的格式,并且支持全部 ProGuard 语法)
android {
buildTypes {
release {
multiDexKeepProguard file('multidex-config.pro')
...
}
}
}
2)指定类:
-keep class com.example.MyClass
-keep class com.example.MyClassToo
3)指定包所有类:
-keep class com.example.** { *; } // All classes in the com.example package
注意:如果您的 minSdkVersion 设为 21 或更高版本,系统会默认启用 MultiDex,并且您不需要 MultiDex 库。
Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本身支持从 APK 文件加载多个 DEX 文件。ART 在应用安装时执行预编译,这会扫描查找 classesN.dex 文件,并将它们编译成单个 OAT 文件,以供 Android 设备执行。因此,如果您的 minSdkVersion 为 21 或更高版本,系统会默认启用 MultiDex,并且您不需要 MultiDex 库。