Java ProGuard-如何保留方法并同时混淆它们?

Java ProGuard-如何保留方法并同时混淆它们?,java,android,obfuscation,proguard,Java,Android,Obfuscation,Proguard,我试图手动混淆我的Android应用程序(是的,我知道,这很痛苦),为此,我需要保留我实现的所有方法,同时也用ProGuard混淆它们 我尝试过这样更改配置: -keep class com.project.x.* { } -keep,allowoptimization class com.project.x.* { } 但是它保留了所有的类名和方法名,并且仍然删除了我未使用的代码 我能做些什么来解决这个问题 提前谢谢 使用保留选项修饰符-请参见 我想你应该这样做: -keep clas

我试图手动混淆我的Android应用程序(是的,我知道,这很痛苦),为此,我需要保留我实现的所有方法,同时也用ProGuard混淆它们

我尝试过这样更改配置:

-keep class com.project.x.* {

}
-keep,allowoptimization class com.project.x.* {

}
但是它保留了所有的类名和方法名,并且仍然删除了我未使用的代码

我能做些什么来解决这个问题


提前谢谢

使用保留选项修饰符-请参见

我想你应该这样做:

-keep class com.project.x.* {

}
-keep,allowoptimization class com.project.x.* {

}
但是引用文档:“这个修改器只对实现不寻常的需求有用。”

您是否尝试过反转enginner以了解这是您需要执行的操作?keep给我的印象是,它将保留类作为应用程序的入口点,但不会阻止它在内部优化和混淆这些类的方法


可能您只需要
-keepnames
查看上面的链接以了解详细信息。

正如Commonware所解释的,您似乎不太可能希望保留未使用的方法并使其名称混淆,但ProGuard支持如下:

-keepclassmembers,allowobfuscation class com.project.x.** {
    <methods>;
}
-keepclassmembers,allowFusion类com.project.x.*{
;
}

这会强制将所有方法(但不是所有类)保留在指定的包(及其子包)中,但仍允许对其名称进行模糊处理。

您是说每个方法需要两个版本:一个具有模糊名称,另一个不具有模糊名称?我的意思是,我希望对所有方法进行模糊处理,但我不希望ProGuard在它们未被使用的情况下删除它们。谢谢您的回复。出于某种原因,它抛出了一个错误,表示“allowoptimization”是意外的。我正试图找出原因。我已经对我的应用程序进行了反向工程,这就是为什么我知道我需要这样做。正确的语法是-keep,allowoptimization。现在,当我使用ProGuard编译我的应用程序时(即使我删除了所有的修改),我的应用程序不知怎么搞砸了,当我修复它时,我将能够检查它是否工作。谢谢所有的帮助:-)@eladchen好的,还有一件事要你试试,我在回答中提到了。再次感谢,我会在修复我的问题后立即告诉你它是否有效(显然,当我编译没有ProGuard的应用程序时,也会发生这种情况).我不知道它是否有效,因为我的项目搞砸了,而且我现在懒得去修复它。我还认为,只有当我的应用程序完成后,我才会测试和实现所有这些混淆。谢谢你的帮助。不,这不太可能。在运行时通过注释访问的方法就是这样一个例子。这在我的经验中并不常见,但确实是可能的。更精确的配置是
-keepclassmembers,AllowBuzzation类*{@com.example.MyAnnotation;}
这也是专有AAR的有效案例,尽管案例略有不同。一些图书馆出版商希望保留他们所有的方法,但隐私和内部内容被混淆了。