Android / Proguard - 保持界面参数名称

时间:2017-06-07 09:32:02

标签: android proguard

我正在构建一个安卓库。我有一个界面:

public interface MyInterface {
    public void onInitializationSuccess(MySession mySession, String name, String email);
    public void onInitializationFailure();
}

我有一个保存MyInterface的程序规则:

-keep public class com.package.name.MyInterface { *; }

当我尝试在另一个项目中实现这个库并创建MyInterface时,这就是android studio创建它的方式:

new MyInterface() {
        @Override
        public void onInitializationSuccess(MySession mySession, String s, String s1) {

        }

        @Override
        public void onInitializationFailure() {

        }
    }

我在猜测我的会话'保留名称是因为它是来自库的自定义类(保留它的程序规则)。我也希望保留其他两个参数名称,所以反而是' s'和' s1'开发人员会看到' name'和'电子邮件'。如何在不禁用整个项目的proguard混淆的情况下进行此操作?

我知道这个问题已被问过几次

此处:Proguard keep interface method variable names

此处:Proguard keep parameter names for interface and abstract class

在这里:Proguard keep interface method paramternames

但回复并不是真的有用。

1 个答案:

答案 0 :(得分:0)

无法在proguard中指定保留接口的参数名称。这是javac的限制。当javac生成.class文件时,它会省略参数名称。您可以在问题here中找到有关.class文件结构的更多详细信息。

我不确定您是否知道,但您提供的last link现在已经回答(因为问题在您发布问题后得到了解答)。似乎在使用java 8时有一个解决方案。

  

Java 8 javac使用-g和-parameters标志执行此操作。