Android/Proguard - 保留接口参数名称

Android/Proguard - keep interface param names

我正在构建一个 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' 名称被保留是因为它是来自图书馆的自定义 class(有一个 proguard 规则来保留它)。我也想保留其他两个参数名称,因此 's' 和 's1' 开发人员会看到 'name' 和 'email'。如何在不禁用整个项目的混淆器混淆的情况下做到这一点?

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

此处:Proguard keep interface method variable names

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

这里:

但回复并不是很有帮助。

无法在proguard中指定保留接口的参数名。这是来自 javac 的限制。当 javac 生成 .class 文件时,它会省略参数名称。您可以在问题 here.

中找到有关 .class 文件结构的更多详细信息

我不确定您是否知道,但您提供的 现在已经有了答案(因为问题在您发布问题后已得到解答)。使用 java 8.

时似乎有解决方案

Java 8 javac does this with -g and -parameters flags.