Proguard:如何保留除特定条件外的所有内容?

Proguard: How to keep everything except specific condition?

我正在使用 Proguard 混淆我的代码,我需要保留每个第三方库,例如:

-keep class com.layer.**
-dontwarn com.layer.**
-keep class com.twitter.**
-keep class android.support.**
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
...

每当我添加一个新的第三方库时,我需要检查它的包名并将它添加到我的混淆器配置文件中,否则应用程序可能会崩溃。

规则不能这么写吗?我不关心不是我的代码。

-keep class !(my.package.name.**)
-dontwarn !(my.package.name.**)

谢谢!

要将 类 以外的所有内容保留在您自己的包中,您可以使用您已经指出的规则(不包括括号):

-keep class !my.package.name.** { *; }

这将隐式保留所有其他内容。 如果需要,您仍然可以为 类 添加额外的 -keep 规则。

-dontwarn 的规则应该以类似的方式工作:

-dontwarn !my.package.name.**,**

如果需要,您还可以添加类似的 -dontnote 规则。