防止Proguard剥离已实现接口的方法

时间:2017-04-12 11:05:05

标签: java android proguard android-proguard

我在Android应用程序中使用Jcenter的外部库(Picasso)。我正在我的应用程序中实现该库的接口。问题是proguard总是剥离我的应用程序中实现的界面的方法。

外部库中定义的接口是

public interface Callback {
  void onSuccess();

  void onError();
}

我在我的代码中实现了这个接口。当我运行proguard并检查我的.class文件时,我发现在我实现的类中没有onSuccessonError方法。

我已经添加了配置,通过添加此

来完全跳过我的proguard文件中的所有外部库
-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.picasso.**

防止上述剥离的一种方法是我这样做,其中PicassoCallbackCallback接口的实现

-keep class com.package.className$PicassoCallback{
    public void onSuccess();
    public void onError();
}

但是我必须在我的项目中为外部接口的每个实现执行此操作。

任何可以帮助我防止在整个项目中剥离方法的proguard配置?

2 个答案:

答案 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不要以任何方式剥离/修改它们。