Android D8 DEX 编译器
Android Studio 3.1(++) 版本中,将 D8 作为新版本开发工具默认的 Dex 编译器。那么什么是 D8 呢,D8 与之前的 Dex 打包器有何区别呢?
安卓项目在打包生成 Apk 安装文件的过程中,最重要的一步便是将我们所写的 java 代码编译过成 .class 字节文件再打包转化成一个或多个 .dex 格式的代码压缩文件。这种 dex 文件便是 Android 虚拟机所能识别、解析并运行的程序。
Google 一直在致力于提升 Dex 文件的编译和运行优化工作,并开发出称之为下一代 dex 编译器:D8。其实早在 AS 3.0 Beta 版本中,Google 已经引入 D8 的测试使用。直到当前 3.1 新版本的发布,才正式将其作为默认 Dex 编译器。
Android Studio 3.1 版本起 gradle 默认采用 D8 进行编译, AS 3.1之前版本可以采用 android.enableD8=true 来开启 D8 编译,如 3.1 版本或后续版本禁止 D8 编译,可以通过在 android.enableD8=false 来禁止 D8
*R8
Android enableAapt2
上线前产品要求替换 启动页图片,这是甩过来一张 jpg 格式的图片,由于整个工程都是采用 png 格式,所以就在 AS 中动态的修改了图片的的后缀名称, 这时再去编译就会甩一个异常信息给你
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
这是需要在 gradle.properties 文件中申明
android.enableAapt2=false
或者在 build.gradle 文件中 buildTypes 节点中添加
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
禁止 Gradle 检查 png 的合法性
*stackoverflow stackoverflow
android multi dex 64k
随着产品的不断完善,代码量的不断增加,最后在打包时 android multi dex 64k 方法数限制就映入眼前了, 关于解决方法 网上有很多做法,这里列出 Google 官方对 64K 限制的解决方法
*Google 官方对 dex 64k 介绍 {"自备梯子"}
当然可以添加混淆来剔除无用的函数,也可以通过 dexOptions 来设置
dexOptions {
javaMaxHeapSize "2g"
additionalParameters += '--multi-dex'
additionalParameters += '--set-max-idx-number=62000'
additionalParameters += '--minimal-main-dex'
}
// 方法超出后生成多个 dex 文件
additionalParameters += '--multi-dex'
// 改变 dex 方法数上限 这里设置 62000
additionalParameters += '--set-max-idx-number=62000'
// -main-dex-list指定的所有class会打包到主dex中
{
这里也可以通过 multidex-config 文件 keep 某一个类文件到主 dex 文件中
如: multiDexKeepProguard file('multidex-config.txt')
}
additionalParameters += '--minimal-main-dex'
这里可以采用 useDexArchive 来禁用增量dexing
如:
android.useDexArchive=false
最后可以使用 FaceBook redex 来进行压缩, 关于 redex 优化 facebook 文档上有详细的介绍
网友评论