【问题标题】:With ProGuard, how do I obfuscate just one class?使用 ProGuard,我如何只混淆一个类?
【发布时间】:2013-07-26 16:14:49
【问题描述】:

什么是智能 ProGuard 配置来混淆一个特定类 com.acme.Algorithm 的私有方法和常量?

我想对此进行混淆,因为它包含一个在意外打开 .jar 时不应该很明显的算法。

我是 ProGuard 新手。 AFAIU,你必须使用“keep”,但是“do obfuscate”的正逻辑是不可用的,对吧?那么如何将我的班级从“保留一切”配置中排除?注意:我暂时不想混淆其他类,因为我想让客户看到有意义的堆栈跟踪。

【问题讨论】:

    标签: proguard


    【解决方案1】:

    混淆单个类不会有太大影响:它可能会更改类名和一些字段名和方法名,并且可能会优化一些代码。混淆对于隐藏小块信息往往不太有效。您混淆的应用程序代码越多,就越难理解。

    话虽如此,您可以指定:

    -keep class !com.acme.Algorithm { *; }
    

    它将所有类/字段/方法保留在 com.acme.Algorithm 之外。

    【讨论】:

    • 我的问题是:即使我在上面设置了它,它仍然会继续尝试混淆其他类。怎么会这样?
    • 我也面临与@Jacky 相同的问题任何解决问题的指针
    • Obfuscation 混淆 JSON 序列化类,然后它们不能映射到 JSON 字段。因此,如果序列化是您项目的一部分,那么混淆整个代码可能会导致一些问题。
    • 对我来说,该脚本不起作用,但这适用于-keep class !com.acme.Algorithm,** { *; }。我认为您还应该提及您想要保留的内容,并且顺序很重要,首先要排除什么,然后要保留什么。
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2016-07-04
    • 2014-09-08
    • 2016-03-15
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多