如何修复因 ProGuard/R8 导致的崩溃?

Posted

技术标签:

【中文标题】如何修复因 ProGuard/R8 导致的崩溃?【英文标题】:How to fix crashes due to ProGuard/R8? 【发布时间】:2019-03-06 02:14:07 【问题描述】:

我正在制作一个简单的应用程序,它运行良好,但是当我尝试使用 ProGuard 缩小/混淆代码时,当我打开另一个 Activity 时它会崩溃。

使用 R8 时也会发生这种情况。

完整的流程是:

进入 MainActivity,然后生成 CameraActivity,它使用 Firebase MLKit 来检测条形码(这当然使用相机)。当检测到 QR 码时,它会启动 DetailActivity 向服务器发送请求(使用 Retrofit)。使用 Room 将响应保存到 DB。总体而言,该应用使用了整个架构组件。

它在从 CameraActivity 到 DetailActivity 的转换中崩溃,并且 logcat 中绝对没有关于崩溃的日志。

完整的源代码可以在https://github.com/gincos/bookqr-uc/tree/dev找到

你可以在那里检查我的 proguard-rules 和我的依赖项,大部分应用程序都是用 Kotlin 制作的并使用协程。

提前致谢!

【问题讨论】:

【参考方案1】:

将这些添加到您的 proguard-rules 中,然后按照 logcat 上的说明进行操作:

-addconfigurationdebugging
-dontobfuscate

【讨论】:

以上是关于如何修复因 ProGuard/R8 导致的崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

保留规则的 Proguard/R8 例外

Proguard (R8) 混淆自定义视图名称

Proguard/R8 规则排除资产文件夹

Proguard (R8) 否定操作员不工作以保留某些包以外的任何东西

使用 proguard / R8 删除数据类元数据

Python如何修复由于睡眠功能而导致的Tkinter窗口崩溃