67

当我更新到 Android Studio 4.0 proguard-rules 时,它会显示 warning Unresolved class name。下面是示例,但我确定它仍然警告我项目中的存在类。

-keep class com.squareup.haha.** { *; }
-keep class com.squareup.leakcanary.** { *; }

如果我改成**这个*警告就消失了。

-keep class com.squareup.haha.* { *; }
-keep class com.squareup.leakcanary.* { *; }

有人得到这个吗?我应该忽略此警告还是 Android Studio 4.0 的错误?

更新

我发现它的错误,它已经分配但没有解决https://issuetracker.google.com/issues/153616200

七月更新

Google 团队已经分析并增加了这个 bug,可能与更新版本的 R8 有关。

八月更新

固定在AS 4.2 Canary 9

4

6 回答 6

17

检查这个问题:https ://issuetracker.google.com/issues/147802433

`如果你右键点击错误,有选项“suppress for statement”,然后AS添加一个注释,例如:

noinspection ShrinkerUnresolvedReference

-保持类不存在

有了这个评论,“not.existing”就没有错误了。`

在此处输入图像描述

于 2020-05-29T07:34:34.367 回答
11

替换.****解决方法。没有编译错误并保留类。

-keep class com.squareup.haha** { *; }
-keep class com.squareup.leakcanary** { *; }

在此处输入图像描述

于 2021-01-24T09:13:27.680 回答
3

此问题已在 Android Studio 4.2 Canary 8 中修复。请在此处找到发行说明https://androidstudio.googleblog.com/2020/08/android-studio-42-canary-8-available.html并检查此问题 ID #153616200

于 2020-10-26T13:26:23.277 回答
1

文件夹及其子文件。我已经对此进行了测试:

com.xx.xx.* { *; }   

我猜它可能包含多个文件夹和子文件。我没有测试过这个:

com.xx.xx.**.* {*;}   
于 2020-08-10T14:10:02.707 回答
0

代替

.**

.*.*

结果

-keep class com.squareup.haha.*.* { *; }
-keep class com.squareup.leakcanary.*.* { *; }
于 2020-06-18T13:59:57.613 回答
0

所有这些答案都是无意义的,因为:

LeakCanary 被添加为debugImplementation.

  • release为构建中不存在的类制定规则是没有意义的。
  • debug混淆构建更没有意义。

如果您可能需要这些规则中的任何一条,则您已将其添加到错误的构建类型中。

于 2021-01-24T09:26:23.463 回答