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

时间:2016-11-21 17:39:12

标签: android proguard

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

让我说我的lib中有这个界面:

package com.mypackage;
public interface MyLibListener {
    void onSomething(boolean success, String message); 
}

这个程序文件:

-keepparameternames
-keep interface com.mypackage.MyLibListener {
    *;
}

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

package com.mypackage;
public interface MyLibListener {
    void onSomething(boolean var1, String var2);
}

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

(相关SO:How to not obfuscate interface methods & it's parameters using Progaurd in android?Proguard keep interface method variable names

3 个答案:

答案 0 :(得分:3)

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

  

-keepattributes MethodParameters

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

答案 1 :(得分:1)

保留所有接口方法:

-keep interface * {
   <methods>;
}

保留所有公共和受保护的方法,这些方法可以通过反射使用:

-keepclassmembernames class * {
    public protected <methods>;
}

虽然我听不懂,但为什么要保留abstract类,却无法实例化。而是以abstract开头的规则排除所有 -keep !abstract

答案 2 :(得分:-1)

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

从proguard文档中查看this example proguard configuration for a library以寻找想法。