您好,我正在编写一个 Android 应用程序,并且我已经设置了 Proguard 来混淆我的应用程序。然而,我使用类加载器将不同的扩展动态加载到我的应用程序中。问题是,如果它们的名称被更改,它们将无法正确加载。如何防止 Proguard 混淆特定的类名?
问问题
49948 次
4 回答
45
使用-keepnames
proguard.cfg 中的选项
请参阅手册 https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:
-keepnames
类规范class_specification 的
-keep,allowshrinking
缩写指定要保留其名称的类和类成员,如果它们在收缩阶段没有被删除的话。例如,您可能希望保留实现 Serializable 接口的类的所有类名,以便处理后的代码与任何最初序列化的类保持兼容。完全不使用的类仍然可以删除。仅在混淆时适用。
于 2012-06-10T19:55:08.243 回答
41
这使类名保持不变:
-keepnames class com.somepackage.*
于 2014-09-25T18:25:11.067 回答
16
对于不想让 ProGuard 更改任何类名的每个人的实用提示:
# please KEEP ALL THE NAMES
-keepnames class ** { *; }
这样,您将获得可读的堆栈跟踪,同时仍然丢弃您不需要的东西。:-)
于 2014-10-02T21:20:29.333 回答
4
如果有人对如何指定要保留的多个类名感兴趣,那么这些类可以用逗号分隔。例子:
-keepnames class com.foo.**,com.bar.** { *; }
也可以使用否定,因为通常只有自己的类会被混淆,并且可以保留第 3 方库:
-keepnames class !com.foo.**,!com.bar.** { *; }
请参阅Proguard 文档。
于 2019-04-30T12:25:40.070 回答