Proguard保留接口和抽象类的参数名称

fro*_*ouo 11 android proguard

我试图阻止proguard从混淆接口(或抽象类)方法参数.

让我说我的lib中有这个接口:

package com.mypackage;
public interface MyLibListener {
    void onSomething(boolean success, String message); 
}
Run Code Online (Sandbox Code Playgroud)

这个proguard文件:

-keepparameternames
-keep interface com.mypackage.MyLibListener {
    *;
}
Run Code Online (Sandbox Code Playgroud)

然后我组装发布,我得到:

package com.mypackage;
public interface MyLibListener {
    void onSomething(boolean var1, String var2);
}
Run Code Online (Sandbox Code Playgroud)

抽象类或使用@Keep注释也是如此.混淆选项keepparameternames似乎只适用于常规类.任何的想法?谢谢!

(相关SO:如何在android中使用Progaurd来混淆接口方法及其参数?和Proguard保持接口方法变量名称)

Bec*_*ang 8

将以下 ProGuard选项添加到您的配置中。

-keepattributes 方法参数

如果您的类文件 hava 方法参数元数据(使用 Java8-parameters或等编译...)`,ProGuard 将保留元数据。


lda*_*vin -3

您的 proguard 文件可能缺少一些-keepattributes,尤其是-keepattributes Signature.

从混淆器文档中检查库的混淆器配置示例以寻找想法。