2017-04-12 92 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