为什么它需要两个 proguard 规则 - 保持同一个类

问题描述

一个应用程序中,在同一个规则文件中使用的 proguard 规则中看到了这两个。

-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}

一个只有类。 第二个括号包含更多细节。

为什么需要两条规则?第一个不也适用于班级成员吗?

解决方法

第一个选项 (-keep public class com.google.gson.**) 将保留包 com.google.gson 和所有底层包中的公共类名称,但不保留它们的成员。

使用第二个选项,相当于 -keep public class com.google.gson.** { *; },您将保留公共类名称及其成员。注释掉第一个 -keep 选项应该没有区别。

您可以使用 ProGuard Playground 来查看 ProGuard 配置对 jar/apk 中的类的影响。我已经使用这些 -keep 选项创建了一个选项,您可以通过单击链接打开这些选项。