dexOptions——安卓gradle

6,542 阅读2分钟

目录
一、前言
二、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 配置,请进传送门

如果觉得本篇博文对你有所启发或是解决了困惑,给个赞或关注公众号呀,小盆友会继续分享更多的优质文章。

或是请我喝杯咖啡吧,小盆友会更加信心百倍的写下去