我试图阻止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)
答案 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以寻找想法。