你好我正在写一个Android应用程序,我已经设置了Proguard来混淆我的应用程序。然而,我使用类加载器动态加载我的应用程序的不同扩展。问题是,如果更改名称,则无法正确加载。如何让Proguard不要混淆特定的类名?
在proguard.cfg中使用-keepnames
选项
请参阅手册https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:
-keepnames
class_specification
-keep,allowshrinking
class_specification的缩写指定要保留其名称的类和类成员(如果在收缩阶段未删除它们)。例如,您可能希望保留实现Serializable接口的类的所有类名,以便处理的代码与任何最初的序列化类保持兼容。完全没有使用的类仍然可以删除。仅在混淆时适用。
这使类名保持不变:
-keepnames class com.somepackage.*
为每个不希望ProGuard更改任何类名的人提供便利提示:
# please KEEP ALL THE NAMES
-keepnames class ** { *; }
这样,您将获得可读的堆栈跟踪,同时仍然丢弃您不需要的东西。 :-)
如果有人有兴趣如何指定要保留的多个类名,那么这些类可以用逗号分隔。例:
-keepnames class com.foo.**,com.bar.** { *; }
也可以对此使用否定,因为通常自己的类可能会被混淆,可以保留OS第三方库:
-keepnames class !com.foo.**,!com.bar.** { *; }