2017-04-12 85 views
0

我在Android应用程序中从Jcenter使用外部库(Picasso)。我正在我的应用程序中实现该库的一个接口。问题在于,proguard总是在我的应用程序中剥离实现的接口的方法。防止Proguard从已实现的接口剥离方法

外部库中定义的接口是

public interface Callback { 
    void onSuccess(); 

    void onError(); 
} 

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

我已经添加的配置,以通过增加这种抑制上述剥离的

-keep class com.squareup.picasso.** {*;} 
-dontwarn com.squareup.picasso.** 

的一种方式完全跳过所有的外部库在我ProGuard的文件是,我这样做,其中PicassoCallback是我实现的Callback接口

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

但后来我不得不为我的项目中外部接口的每个实现这一点。

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

回答

0

只需添加这行:

-keep interface com.squareup.picasso.** { *; } 

这一项后:

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

我用几个squareup库,所以我有一个配置在我的项目:

-keep class com.squareup.** { *; } 
    -keep interface com.squareup.** { *; } 

编辑: 一些有用的例子:https://www.guardsquare.com/en/proguard/manual/examples

+0

不,这没有帮助。 – Diffy

0

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

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

另一种方法是将@Keep注释添加到所有的你的回调,这主要是告诉ProGuard的不剥离/修改他们以任何方式。

+0

我会尝试这个并检查。 – Diffy