我正在构建一个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 回答
无法在proguard中指定保留接口的参数名称 . 这是javac的限制 . 当javac生成.class文件时,它会省略参数名称 . 您可以在here问题中找到有关.class文件结构的更多详细信息 .
我不确定你是否知道,但你提供的last link现在已经回答了(因为你在发布问题后回答了问题) . 使用java 8时似乎有一个解决方案 .