Proguard保留班级名称?

时间:2012-06-10 19:47:58

标签: java android obfuscation proguard

你好我正在写一个Android应用程序,我已经设置了Proguard来混淆我的应用程序。然而,我使用类加载器动态加载我的应用程序的不同扩展。问题是,如果更改名称,则无法正确加载。如何让Proguard不要混淆特定的类名呢?

4 个答案:

答案 0 :(得分:36)

使用proguard.cfg中的-keepnames选项

请参阅手册 https://www.guardsquare.com/en/proguard/manual/usage#keepoptions

  

-keepnames class_specification

     

-keep,allowshrinking class_specification

的缩写      

指定要保留其名称的类和类成员(如果在收缩阶段未删除它们)。例如,您可能希望保留实现Serializable接口的类的所有类名,以便处理的代码与任何最初的序列化类保持兼容。完全没有使用的类仍然可以删除。仅在混淆时适用。

答案 1 :(得分:29)

这样可以保持类名不变:

-keepnames class com.somepackage.* 

答案 2 :(得分:6)

为每个不希望ProGuard更改任何班级名称的人提供便利提示:

# please KEEP ALL THE NAMES
-keepnames class ** { *; }

通过这种方式,您可以获得可读的堆栈跟踪,同时仍然可以丢弃不需要的内容。 : - )

答案 3 :(得分:0)

如果有人对如何指定多个类名感兴趣,则可以用逗号分隔这些类。示例:

-keepnames class com.foo.**,com.bar.** { *; }

也可以对此使用否定,因为通常混淆自己的类,可以保留OS 3rd party库:

-keepnames class !com.foo.**,!com.bar.** { *; }

请参见Proguard Documentation