目录
一、前言
二、dexOptions 的结构简析
三、dexOptions的属性
四、写在最后
一、前言
今天分享 dexOptions 配置,这个配置用于控制我们代码编译打包成dex的细节。
二、dexOptions 的结构简析
1、dexOptions 存在位置
dexOptions 会映射为 com.android.build.gradle.internal.dsl.DexOptions
类,继承结构如下:
2、如何运行
dexOptions 用于打包时的代码分包,所以我们需要的是进行apk的打包编译。
// app:clean 为了先清空之前的文件
// app:aR 进行编译 release 包
// mac 使用 ./gradlew
// window 使用 gradlew
./gradlew app:clean app:aR
三、dexOptions的属性
1、additionalParameters
- 类型:List< String >
- 描述:用于添加 dex 的命令。可以通过
dx --help
查看支持的命令和描述。 - 举个例子:
我们都知道 64k 的问题,解决的方案就是将代码分成多个dex包,在 buildTypes 一篇中已经有介绍过如何来实现这一方案。但在这里又涉及到一个问题,因为apk在启动的时候,会先加载主dex(即 classes.dex),现在只想将我们需要的文件放在主dex中,其余的放在次dex中,就可以借助 dexOptions 来完成。
buildTypes {
debug {
// 开启 dex 分包
multiDexEnabled true
// 设置将需要保存至主dex的文件
multiDexKeepFile file('keep/keep_in_main_dex.txt')
}
}
dexOptions {
additionalParameters '--minimal-main-dex'
}
keep/keep_in_main_dex.txt 内容
com/zinc/gradlestudy/MainActivity.class
效果图
2、javaMaxHeapSize
- 类型:String
- 描述:设置运行 dx 的最大内存
- 使用:
dexOptions {
// 设置了 2G
javaMaxHeapSize '2048m'
}
3、jumboMode
- 类型:boolean
- 描述:每个 dex 的字符串索引也有限制,正常情况下为
2^16
个。但开启jumboMode 模式,可以支持到2^32
。但是值得注意的是,这个并不是 64K方法数量限制问题的一种方案。 - 使用:
dexOptions {
jumboMode true
}
4、keepRuntimeAnnotatedClasses
- 类型:boolean
- 描述:将所有带有运行时注解的类保留在主dex中。默认开启,主要是解决
java.lang.reflect.Field.getDeclaredAnnotations
导致无法获取崩溃问题。 - 使用:
dexOptions {
keepRuntimeAnnotatedClasses false
}
5、maxProcessCount
- 类型:Integer
- 描述:可用于dex的最大并发进程数,默认为4。值得注意的是,dx使用的内存大小将为
maxProcessCount*javaMaxHeapSize
。 - 使用:
dexOptions {
maxProcessCount 4
}
6、preDexLibraries
- 类型:boolean
- 描述:预编译 dex 库。在我们build的时候会快些,但clean时便会慢,默认开启
- 使用:
dexOptions {
preDexLibraries true
}
7、threadCount
- 类型:Integer
- 描述:运行dx时使用的线程数。 默认为4。
- 使用:
dexOptions {
threadCount 4
}
四、写在最后
Gradle项目地址:Github传送门 (如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)
本篇博文的 dexOptions 配置,请进传送门
如果觉得本篇博文对你有所启发或是解决了困惑,给个赞或关注公众号呀,小盆友会继续分享更多的优质文章。
或是请我喝杯咖啡吧,小盆友会更加信心百倍的写下去