Java Proguard是否保留类名?

Java Proguard是否保留类名?,java,android,obfuscation,proguard,Java,Android,Obfuscation,Proguard,您好,我正在编写一个Android应用程序,我已经设置了Proguard来混淆我的应用程序。然而,我使用类加载器来动态地将不同的扩展加载到我的应用程序中。问题是,如果名称更改,这些文件将无法正确加载。如何防止Proguard混淆特定的类名?使用Proguard.cfg中的-keepnames选项 请参阅手册 : -保留名称等级规范 缩写为-保留,允许收缩 指定要保留其名称的类和类成员(如果在收缩阶段未删除)。例如,您可能希望保留实现可序列化接口的类的所有类名,以便处理的代码与任何原始序列化的类保

您好,我正在编写一个Android应用程序,我已经设置了Proguard来混淆我的应用程序。然而,我使用类加载器来动态地将不同的扩展加载到我的应用程序中。问题是,如果名称更改,这些文件将无法正确加载。如何防止Proguard混淆特定的类名?

使用Proguard.cfg中的
-keepnames
选项

请参阅手册 :

-保留名称
等级规范

缩写为
-保留,允许收缩

指定要保留其名称的类和类成员(如果在收缩阶段未删除)。例如,您可能希望保留实现可序列化接口的类的所有类名,以便处理的代码与任何原始序列化的类保持兼容。根本不使用的类仍然可以删除。仅适用于模糊处理


这样可以保持类名不变:

-keepnames class com.somepackage.* 

对于不希望ProGuard更改任何类名的所有人,提供方便的提示:

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

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

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

-keepnames class com.foo.**,com.bar.** { *; }
也可以使用否定,因为通常只有自己的类会被混淆,并且可以保留第三方库:

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

有关此信息,请参阅。

好的,有没有一种方法可以对整个包执行此操作?是的,您可以使用*通配符。ie,-keepnames com.randompackage.lol.*将保留lolI中的所有类。我已经尝试过了,eclipse返回错误1。你确定我不必这样做-keepnames class com.randompackage.lol.ClassName?在这里发布之前,我尝试过这个方法,但没有成功:STry just-keep而不是-keepnamesDoesn't-keep不混淆类?
-dontobfuscate
是禁用混淆的正确方法。错误的方法。最好使用以下配置关闭模糊处理:“-dontobfuscate/n-optimizations!code/allocation/variable”更好的做法是,上载符号文件并允许正确捕获。