Proguard保留班级名称?

Nik*_*Nik 29 java obfuscation android proguard

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

Zai*_*ani 39

使用-keepnamesproguard.cfg中的选项

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

-keepnames class_specification

简称-keep,allowshrinkingclass_specification

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

  • 我试过了,eclipse返回错误1.你确定我不必做-keepnames类com.randompackage.lol.ClassName吗?我在发布之前尝试了这个,但它不起作用:S (4认同)
  • 所以我输入:-keepnames com.randompackage.lol.ClassName (3认同)

tar*_*war 32

这使类名保持不变:

-keepnames class com.somepackage.* 
Run Code Online (Sandbox Code Playgroud)


mre*_*elt 10

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

# please KEEP ALL THE NAMES
-keepnames class ** { *; }
Run Code Online (Sandbox Code Playgroud)

这样,您将获得可读的堆栈跟踪,同时仍然丢弃您不需要的东西.:-)

  • ```-dontobfuscate```是禁用混淆的正确方法. (13认同)

k_o*_*_o_ 5

如果有人有兴趣如何指定要保留的多个类名,那么这些类可以用逗号分隔。例子:

-keepnames class com.foo.**,com.bar.** { *; }
Run Code Online (Sandbox Code Playgroud)

也可以对此使用否定,因为通常只有自己的类会被混淆,并且可以保留第 3 方库:

-keepnames class !com.foo.**,!com.bar.** { *; }
Run Code Online (Sandbox Code Playgroud)

请参阅Proguard 文档了解这一点。