环境:android studio从3.4升级到3.5,gradle插件版本升级到最新的3.4.2,gradle版本为5.1.1以上
别的还好,升级对应包就好,最大问题是混淆,自己写的混淆文件有的不被识别,折腾了下,改了混淆文件,自己的代码没问题,然后发现第三方环信的无法发送图片了,查了日志,果然是环信的bug,全是环信的包名,请求图片上传的时候报错了。
无奈,去看gradle官方文档,找到了原因:
https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin
R8 默认处于启用状态:R8 将脱糖、压缩、混淆、优化和 dex 处理整合到一个步骤中,从而显着提升了编译性能。R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。
下图简要介绍了 R8 引入之前的编译流程。
现在,有了 R8,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。
请注意,R8 旨在与您现有的 ProGuard 规则配合使用,因此您可能不需要采取任何操作即可从 R8 中受益。但是,相对专为 Android 项目设计的 ProGuard 而言,R8 是一项不同的技术,因此压缩和优化可能会导致移除 ProGuard 可能没有的代码。因此,在这种不太可能的情况下,您可能需要添加其他规则,以在编译输出中保留这些代码。
这一段说明了r8对混淆的影响,而目前如果第三方不去解决,又要升级,只能把r8关了,方法如下:
在gradle.properties中加入以下代码:
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false