文章目录
- 一、dx --minimal-main-dex 参数
- 1、参数简介
- 2、配置 main dex 保留文件
- 3、配置 android#buildTypes
- 4、配置 android#dexOptions#additionalParameters 参数
- 5、分包效果展示
Android Plugin DSL Reference 参考文档 :
- 文档主页 : https://google.github.io/android-gradle-dsl/2.3/
- BaseExtension 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html
- AppExtension ( build.gradle#android 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.AppExtension.html
- build.gradle#android 模块配置文档 : android-gradle-dsl/2.3/com.android.build.gradle.AppExtension.html
- ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html
- ProductFlavor#externalNativeBuild 配置 ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) : com.android.build.gradle.internal.dsl.ProductFlavor:externalNativeBuild
- ExternalNativeBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.ExternalNativeBuildOptions.html
- NdkBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild#ndkBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.NdkBuildOptions.html
- CmakeOptions ( build.gradle#android#defaultConfig#externalNativeBuild#cmake 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.CmakeOptions.html
- JackOptions ( build.gradle#android#defaultConfig#jackOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.JackOptions.html
- AnnotationProcessorOptions ( 注解处理器配置 ) ( build.gradle#android#defaultConfig#javaCompileOptions配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AnnotationProcessorOptions.html
- NdkOptions ( build.gradle#android#defaultConfig#ndk 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.NdkOptions.html
- VectorDrawablesOptions ( build.gradle#android#defaultConfig#vectorDrawables 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html
- BuildType ( build.gradle#android#buildTypes 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.BuildType.html
- SigningConfig ( build.gradle#android#signingConfigs 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.SigningConfig.html
- AaptOptions ( build.gradle#android#aaptOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AaptOptions.html
- AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html
- AndroidSourceDirectorySet ( build.gradle#android#sourceSets#aidl/assets/java/jni/jniLibs 配置 ) 文档位置 :android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceDirectorySet.html
- AndroidSourceFile ( build.gradle#android#sourceSets#manifest 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceFile.html
- DataBindingOptions ( build.gradle#android#dataBinding ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DataBindingOptions.html
- DexOptions ( build.gradle#android#dexOptions ) 文档位置 : https://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DexOptions.html
- NDK 参考文档 : Add C and C++ Code to Your Project.
一、dx --minimal-main-dex 参数
DexOptions ( build.gradle#android#dexOptions ) 文档位置 : https://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DexOptions.html
1、参数简介
dx 工具的 --minimal-main-dex 参数指的是 最小化生成 主 dex 文件 , 也就是只有我们配置的必须放在 main dex 中的类才放入 , 其它的类放到第二个分包 classes2.dex 中 , 也就是将少数的类封装到 main dex 中 , 大部分类封装到其它的 dex 文件中 ;
只有必须在 main dex 文件 classes.dex 的类才封装进去 , 如 dalvik 虚拟机 , java.utils 包中的类 , android.os 包中的相关类 , 还有我们配置的类 等等 ;
在插件化 / dex 加密 中经常使用该配置 , 将宿主应用 / 壳应用 相关的类封装到 main dex 中 , 将其它类封装到其它的 dex 文件中 ;
–minimal-main-dex 配置原型 :
--minimal-main-dex: only classes selected by --main-dex-list are to be put
in the main dex.
2、配置 main dex 保留文件
在 app 目录下 , 创建 " keep_in_main.txt " 文件 , 配置如下内容 :
com/example/classloader_demo/MainActivity.class
3、配置 android#buildTypes
在 " build.gradle # android # buildTypes # debug " 下 , 配置 多 dex 以及保留文件 ;
android {
buildTypes {
debug {
debug {
multiDexEnabled true
multiDexKeepFile file('keep_in_main.txt')
}
}
}
}
4、配置 android#dexOptions#additionalParameters 参数
在 " build.gradle # android # dexOptions # additionalParameters " 下 , 配置 --minimal-main-dex 参数 , 使 main dex 字节码文件最小化 , 即保留必须的类 , 其它的类全部放到 classes2.dex 字节码中 ;
android {
buildTypes {
debug {
debug {
multiDexEnabled true
multiDexKeepFile file('keep_in_main.txt')
}
}
}
dexOptions {
additionalParameters '--minimal-main-dex'
}
}
5、分包效果展示
效果展示 : 查看编译后的 apk 文件 , 在 主 dex 字节码文件 classes.dex 中 , 只有必要的文件 , 如下图所示 ;
其中就包括了我们在 " keep_in_main.txt " 文件中配置的 com/example/classloader_demo/MainActivity.class 字节码类 ;
与应用启动无关的 , 非必要的 Java 类 , 都打包到了 classes2.dex 文件中 ;