我在Android应用程序中使用Jcenter的外部库(Picasso)。我正在我的应用程序中实现该库的接口。问题是proguard总是剥离我的应用程序中实现的界面的方法。
外部库中定义的接口是
public interface Callback {
void onSuccess();
void onError();
}
我在我的代码中实现了这个接口。当我运行proguard并检查我的.class文件时,我发现在我实现的类中没有onSuccess
和onError
方法。
我已经添加了配置,通过添加此
来完全跳过我的proguard文件中的所有外部库-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.picasso.**
防止上述剥离的一种方法是我这样做,其中PicassoCallback
是Callback
接口的实现
-keep class com.package.className$PicassoCallback{
public void onSuccess();
public void onError();
}
但是我必须在我的项目中为外部接口的每个实现执行此操作。
任何可以帮助我防止在整个项目中剥离方法的proguard配置?
答案 0 :(得分:0)
只需添加以下行:
-keep interface com.squareup.picasso.** { *; }
之后:
-keep class com.squareup.picasso.** {*;}
我使用了几个方形库,所以我在项目中有下一个配置:
-keep class com.squareup.** { *; }
-keep interface com.squareup.** { *; }
编辑: 一些有用的示例:https://www.guardsquare.com/en/proguard/manual/examples
答案 1 :(得分:0)
您可以使用此规则配置ProGuard以保留实现Callback
接口的所有类:
-keep class ** implements com.squareup.picasso.Callback { *; }
另一种方法是将@Keep
注释添加到所有回调中,这基本上告诉ProGuard不要以任何方式剥离/修改它们。