Android 如何在Proguard中“取消保留”类

Android 如何在Proguard中“取消保留”类,android,proguard,Android,Proguard,我的前卫 -keep public class * extends android.app.Activity 我所追求的规则将保留所有活动,但那些标记有我的模糊界面的活动除外: public class SensitiveActivity extends Activity implements Obfuscateable 是否有一个否定的规则使Proguard保持所有活动第一个规则减去那些标记为接口的活动都是可混淆的?我是说,就像keep的反面 在相关手册部分有一个类规范模板,但我不能很好

我的前卫

-keep public class * extends android.app.Activity
我所追求的规则将保留所有活动,但那些标记有我的模糊界面的活动除外:

 public class SensitiveActivity extends Activity implements Obfuscateable
是否有一个否定的规则使Proguard保持所有活动第一个规则减去那些标记为接口的活动都是可混淆的?我是说,就像keep的反面

在相关手册部分有一个类规范模板,但我不能很好地理解它:

[@annotationtype] [[!]public|final|abstract|@ ...] [!]interface|class|enum classname
    [extends|implements [@annotationtype] classname]
[{
    [@annotationtype] [[!]public|private|protected|static|volatile|transient ...] <fields> |
                                                                      (fieldtype fieldname);
    [@annotationtype] [[!]public|private|protected|static|synchronized|native|abstract|strictfp ...] <methods> |
                                                                                           <init>(argumenttype,...) |
                                                                                           classname(argumenttype,...) |
                                                                                           (returntype methodname(argumenttype,...));
    [@annotationtype] [[!]public|private|protected|static ... ] *;
    ...
}]

ProGuard始终考虑所有保留选项的联合;没有从中减去的选项。您可以使用标记接口或注释(例如proguard/examples/annotation)标记要保留的活动


Android构建过程aapt会自动写出一个ProGuard配置,保存所有导出的活动,因此您可能必须在生成后调用ProGuard之前修改该配置。

最后我找到了一个更简单的方法!!我注意到Proguard会混淆默认情况下不是公共的活动,所以我只创建具有所有逻辑的包活动,以及只扩展包一个或更多的公共活动。通过这种方式,我得到了100%的逻辑模糊和重新打包,而活动只是小存根!此外,set***方法从包活动向下重命名,这导致混淆混乱: