Progruard 和 R8 被弃用 - Android Studio 3.6

Posted

技术标签:

【中文标题】Progruard 和 R8 被弃用 - Android Studio 3.6【英文标题】:Progruard and R8 being deprecated - Android Studio 3.6 【发布时间】:2020-06-09 08:44:15 【问题描述】:

在将我的 android Studio 升级到 3.6 后,我收到了关于 Proguard 和 R8 的弃用警告。这是否意味着我们不应该在我们的项目中使用混淆,或者在发布模式下构建时我们应该考虑其他等效选项吗?

“android.enableR8”选项已弃用,不应再使用。 它将在未来版本的 Android Gradle 插件中删除,并且不再允许您禁用 R8。 受影响的模块:等

【问题讨论】:

你能分享你收到的消息吗? 您能澄清一下在这种情况下“已弃用的警告”是什么意思吗?警告的实际文本可能会有所帮助。 我不记得确切的信息,但它说它已被弃用。旁注:升级到 Android Studio 3.6 后我得到了它 要获得答案,您应该发布完整、准确警告消息。例如,useProGuard 设置已在不久前被弃用 - 也许这就是您看到的内容,但您记错了。 这周我一直在切换到 R8,并从我的 gradle 中删除了所有 useProGuard 【参考方案1】:

这是否意味着我们不应该在我们的项目中使用混淆

没有。您可以使用混淆和优化工具。

在发布模式下构建时我们应该考虑另一个等效选项

如果您的 gradle.properties 中有 android.enableR8 = true,请将其删除为 R8,它是默认工具,并且 android.enableR8 设置本身已被弃用,从而导致这些弃用警告。

如果您有 android.enableR8 = false 使用 proguard 进行优化和混淆,请考虑迁移到 R8。

【讨论】:

如何让项目混淆?我删除了所有给定的属性,并说要从 build.gradle 中删除 R8 的依赖项,我无法再编译项目,我得到 R8NullPointerException 那是什么? 这看起来超出了这里评论部分的范围。 @laalto 我从你的回答中得到的是,R8 会自动工作,所以不需要添加android.enableR8 = true,对吧? @Mohamed 这也是我的理解,前提是您拥有 Android Gradle 插件 3.6 或更高版本。 承诺proguard配置应该100%兼容新的R8。不幸的是,R8 完全破坏了我的发布版本,看起来大多数 ProGuard 规则都被忽略了。由于我没有时间进行任何进一步的分析,我坚持使用 ProGuard,在 Gradle 7.0 中的不幸消息将无法禁用 R8。所以我不认为我会在可用时将我的项目更新到 Gradle 7.0

以上是关于Progruard 和 R8 被弃用 - Android Studio 3.6的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Vector 和 HashTable 被广泛认为应该被弃用? [复制]

为啥 Vector 和 HashTable 被广泛认为应该被弃用? [复制]

“++”和“--”运算符已被弃用 Xcode 7.3

为啥 var 不被弃用?

PageRequest 构造函数已被弃用

Spring RMI 的替代方案是啥? (因为它已被弃用)