【问题标题】:Unresolved class name proguard-rules Android Studio 4.0未解析的类名 proguard-rules Android Studio 4.0
【发布时间】:2020-09-25 15:52:54
【问题描述】:

当我更新到 Android Studio 4.0 proguard-rules 时,它会显示警告 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

7 月更新

谷歌团队已经分析并增加了这个bug的优先级,它可能与更新版本的R8有关。

8 月更新

固定在AS 4.2 Canary 9

【问题讨论】:

  • 将其添加为答案并将其标记为已接受

标签: android proguard android-studio-4.0


【解决方案1】:

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

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

noinspection ShrinkerUnresolvedReference

-保持类不存在

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

【讨论】:

  • 实际上我们只需要noinspection,当库更改并且类不退出但某些类和模型已退出但android studio 4.0仍然表示未解决时。我认为它应该是错误而不是通过“抑制声明”来修复
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      com.xx.xx.* { *; }   
      

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

      com.xx.xx.**.* {*;}   
      

      【讨论】:

        【解决方案5】:

        替换

        .**
        

        .*.*
        

        结果

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

        【讨论】:

        • 亲爱的,这不是解决方案,您也可以通过删除单星**替换为*来使用,但这不是解决这个错误的方法
        • 这行得通。未解决的类名错误现在消失了。
        • .** 表示目录和所有子目录,递归。 .*.* 仅表示目录及其直接子目录。它们不等价
        • 这不是解决方案。如果红绿灯卡在红色,您可以通过将其改为橙色或绿色来修复它。没有人会抱怨(一段时间),但这不是固定的。在某些路口它可能会起作用,在其他路口你会导致崩溃。
        【解决方案6】:

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

        LeakCanary 被添加为debugImplementation

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-20
          • 2015-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多