Android Gradle 问题总结

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

*Google 官网地址

*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 文档上有详细的介绍

*FaceBook develop

*Github 地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,874评论 25 708
  • 这一章主要针对项目中可以用到的一些实用功能来介绍Android Gradle,比如如何隐藏我们的证书文件,降低风险...
    acc8226阅读 7,672评论 3 25
  • 说明 本文主要介绍和Gradle关系密切、相对不容易理解的配置,偏重概念介绍。部分内容是Android特有的(例如...
    jzj1993阅读 15,706评论 1 62
  • maybe cause u, i will not be love in anyone.I want to see...
    風狼芊兒阅读 247评论 0 0
  • .清晨,当阳光照射进屋里的第一缕日光轻抚过我的双眼,舒服的伸个懒腰,像是慵懒的猫儿一样。揉一揉惺忪的双眼,开启了一...
    林姝迩阅读 201评论 0 2