2

源示例:

// 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 和其他类中。

4

2 回答 2

2

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

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

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

于 2013-03-30T15:59:14.977 回答
1

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

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

ProGuard 手册 > 使用 > -keep 选项概述

于 2012-09-09T21:24:08.160 回答