首页 文章

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

提问于
浏览
0

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

外部库中定义的接口是

public interface Callback {
  void onSuccess();

  void onError();
}

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

我已经添加了配置,通过添加它来完全跳过我的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配置可以帮助我防止在整个项目中剥离方法?

2 回答

  • 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

  • 0

    您可以配置ProGuard以使用此规则保留实现 Callback 接口的所有类:

    -keep class ** implements com.squareup.picasso.Callback { *; }
    

    另一种方法是将 @Keep 注释添加到所有回调中,这基本上告诉ProGuard不要以任何方式剥离/修改它们 .

相关问题