在Android Gradle插件中,在android
内可定义并配置dexOptions
,DexOptions
对象是用来配置dx选项的(生成dex文件的选项)。
属性
属性名 | 说明 |
---|---|
additionalParameters | 执行dx生成dex文件的额外参数列表。对于属性无法设置的参数,可是通过该字段拼接传入,具体参考dx工具介绍 |
javaMaxHeapSize | 执行dx生成dex是临时设定的-Xmx 值,示例: “2048m”。 |
jumboMode | 在dx(–force-jumbo)中启用巨型模式 |
keepRuntimeAnnotatedClasses | 将所有带有运行时注释的类保留在旧版multidex中的主dex中。默认情况下,此功能已启用,并且可以解决在较旧的android版本上使用java.lang.reflect.Field.getDeclaredAnnotations时导致应用程序崩溃的问题。对于不使用反射并在其主dex中需要更多空间的应用,可以禁用此功能。 |
maxProcessCount | 可用于dex的最大并发数,默认 4。 |
preDexLibraries | 是否预索引库。这会改善增量编译,但是会使得清理编译变得更慢。 |
threadCount | 执行dx生成dex的进程数量,默认4。 |
dx工具
对于DexOptions
中的所有属性,都是传递给dx工具生成dex的配置,dx工具可以在../sdk/build-tools/<build-tools-version>
中找到(其中<build-tools-version>
是指编译器的版本)。可以在命令行中运行dx --help
查看更多帮助(如果没有配置环境变量,需要进入dx工具所在目录)。
对于生成dex,使用dx --dex
命令,参数可以参考dx --help
的输出帮助信息,这里介绍几个常用的参数配置:
--multi-dex
允许在需要的时候生成多个dex文件。这个参数与--incremental
互斥,会导致--num-threads
被忽略,而且输出仅支持文件夹或者存档文件(压缩文件)。PS:在build.gradle
中,可以使用multiDexEnabled true
进行设置--main-dex-list=<file>
主dex中类清单文件,清单列出的文件将会被放入主dex中,<file>
是清单文件名(支持相对路径和绝对路径),文件中类名包名分隔符使用/
,后缀是.class
(示例:com/test/Main.class
)--minimal-main-dex
主dex最小化,如果定义了--minimal-main-dex
,只有清单文件的类才会被放入主dex中,如果为定义--minimal-main-dex
,编译器将自动选择,只将必须的类放到主dex中。--input-list: <file>
输入文件清单。清单文件的每一行必须是.class
、.jar
、.zip
、.apk
或者是一个目录。--min-sdk-version=<n>
最小SDK版本
此选项与–incremental互斥,导致–num-threads被忽略,仅支持文件夹或存档输出。
PS:更多的使用方法可以参考dx --help