【问题标题】:How to keep all public members except one during proguard obfuscation?在proguard混淆期间如何保留除一个之外的所有公共成员?
【发布时间】:2012-09-08 18:06:27
【问题描述】:

来源示例:

// this is package visible interface
interface MyInterface {
    void foo();
}

public class MyClass1 implements MyInterface {
    // some public class members which should not be obfuscated
    // ...     

    // this is MyInterface implementation, this method should be obfuscated:
    void foo() {}
}

// other classes which implement MyInterface
...

如何在仅混淆 MyInterface.foo() 实现的同时将所有公共成员保留在 MyClass1 和其他类中。

【问题讨论】:

    标签: java obfuscation proguard


    【解决方案1】:

    考虑到它只是您想要混淆的一种方法,为什么不将您的 void foo() 方法重命名为 void y() 之类的名称(或您喜欢的一些随机字母)?

    如果您在调试时确实无法记住一个奇怪命名的方法,那么您将不得不单独 -keep 所有其他方法。

    另一种选择是将方法提取到另一个类,或创建一个子类,但这可能不是您想要的。

    【讨论】:

      【解决方案2】:

      ProGuard 不提供任何快捷方式来指定除一个以外的所有方法。你必须指定你需要的那些。据推测,您必须保留它们是有原因的。例如,如果他们实现了另一个接口,您可以轻松地指定保留这个其他接口的所有方法。

      请注意,-keep 规范指的是类/字段/方法的名称,而不是方法的代码:

      ProGuard 手册 > 使用 > Overview of -keep options

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        相关资源
        最近更新 更多