【问题标题】:How to "unkeep" classes in Proguard如何在 Proguard 中“取消”类
【发布时间】:2014-07-05 05:30:12
【问题描述】:

我的proguard有

-keep public class * extends android.app.Activity

我遵循的规则将保留所有活动,但标有“可混淆”界面的活动除外:

 public class SensitiveActivity extends Activity implements Obfuscateable

是否有一个否定规则,所以 Proguard 保留所有活动(第一条规则)减去那些标记为接口 Obfuscateable 的活动?我的意思是,就像“保持”的反义词?

在相关的手册部分http://proguard.sourceforge.net/index.html#manual/usage.html有一个类规范的模板,但我不是很明白:

[@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 ... ] *;
    ...
}]

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    ProGuard 总是考虑所有 -keep 选项的联合;没有选项可以从中减去。您可以使用标记界面或注释(例如 proguard/examples/annotations)标记要保留的活动。

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

    【讨论】:

    • 最后我找到了一个更简单的方法!!我注意到 Proguard 会混淆默认情况下不公开的活动,所以我只创建包含所有逻辑的包活动,以及仅扩展包的公共活动,仅此而已。这样我得到了 100% 的逻辑混淆和重新打包,活动只是小存根!此外,set*** 方法从包活动向下重命名,这对混淆混乱有很大贡献:)
    猜你喜欢
    • 2016-03-06
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2011-12-14
    相关资源
    最近更新 更多