首页 文章

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

提问于
浏览
0

我正在构建一个android库 . 我有一个界面:

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

我有一个proguard规则来保持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() {

        }
    }

我猜测'mySession'名称是保留的,因为它是来自库的自定义类(有一个保存它的程序规则) . 我还想保留其他两个参数名称,所以“s”和“s1”开发人员会看到“名字”和“电子邮件” . 如何在不禁用整个项目的proguard混淆的情况下执行此操作?

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

这里:Proguard keep interface method variable names

这里:Proguard keep parameter names for interface and abstract class

在这里:Proguard keep interface method paramternames

但回复并没有真正帮助 .

1 回答

  • 0

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

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

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

相关问题