Android Proguard-保留所有第三方LIB是最佳实践吗?

Android Proguard-保留所有第三方LIB是最佳实践吗?,android,proguard,Android,Proguard,我正在为使用第三方库的应用程序配置Proguard。包括以下内容是否为“最佳实践”(以避免将来难以发现的bug): -keep class 3rd_party_lib_name.** {*;} 对于每一个第三方开源库,它的开发者都没有特定的Proguard指令 另外,还有一个相关的问题:对于哪些情况我应该使用通用指南 -keep class -keep public class 在哪些情况下我应该使用 -keep class -keep public class 非常感谢progu

我正在为使用第三方库的应用程序配置Proguard。包括以下内容是否为“最佳实践”(以避免将来难以发现的bug):

-keep class 3rd_party_lib_name.** {*;}
对于每一个第三方开源库,它的开发者都没有特定的Proguard指令

另外,还有一个相关的问题:对于哪些情况我应该使用通用指南

-keep class 
-keep public class
在哪些情况下我应该使用

-keep class 
-keep public class

非常感谢

proguard和代码混淆的主要问题通常是修改了类名、方法和字段名。(即,
myExplicitMethodName()
变成了
a()

修改类名、方法名或字段时,不能使用反射API(即
Class.classForName(…)
,…)访问它

知道了这一点,最好的做法是
-保留所有可以使用反射API调用的类和库

对于第三方库,如果您不知道它们是否使用反射API:那么
-保留

对于您自己的代码:希望您知道在哪些类中使用它。因此,对这些类使用
-keep


请注意,一些流行的框架(如dagger或jackson)在您自己的类上使用反射API,因此如果您使用它们,请小心

在优化和模糊处理方面,您可以使用的保留选项越少,效果就越好。如果没有时间找到最佳配置,可以采取更保守的方法。最保守的解决方案是保留库中的所有类、字段和方法,因此任何内部反射都将继续工作:

-keep class 3rd_party_lib_name.** {*;}
稍微不太保守,但通常足够:保留所有公共API:

-keep public class 3rd_party_lib_name.** {
    public *;
}
更不保守:只保留公共类,但不一定保留它们的字段或方法:

-keep public class 3rd_party_lib_name.**
一些实验可以进行下去


正如ben75提到的,这并不能解释第三方库对您自己的代码执行反射。

这看起来不错。我的问题主要是,无论我采取哪种方法,我都无法立即判断它是否破坏了我的应用程序——几个月后,错误可能会出现在某个模块中,我永远无法判断它是由此引起的。这是我最担心的事情。