2017-04-12 15 views
0

AndroidアプリケーションでJcenterの外部ライブラリ(Picasso)を使用しています。私は私のアプリでそのライブラリのインターフェイスを実装しています。問題は、proguardは常に私のアプリで実装されたインターフェイスのメソッドを削除することです。実装されたインタフェースのメソッドを削除することを避けるために

外部ライブラリで定義されたインタフェースは

public interface Callback { 
    void onSuccess(); 

    void onError(); 
} 

であり、私は私のコードでは、このインタフェースを実装します。私がproguardを実行して.classファイルをチェックすると、実装されたクラスにonSuccessonErrorのメソッドがないことが分かります。

私はすでにPicassoCallbackは私の実装であるところ、上記の剥離を防止する1つの方法は、私はこれを行うことである。この

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

を追加することによって、完全に私ProGuardのファイルにすべてのこと外部ライブラリをスキップする設定を追加しましたCallbackインタフェース

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

しかし、私は私のプロジェクトでは、外部インターフェイスのすべての実装のためにこれを行う必要があります。

プロジェクト全体でメソッドを削除するのを防ぐのに役立つProguardの設定はありますか?

答えて

0

ただ、この行を追加します。

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

編集:私は私のプロジェクトの次の構成を有しているので、私はいくつかのsquareup LIBSを使用

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

:この1の後

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

を: いくつかの便利な例:https://www.guardsquare.com/en/proguard/manual/examples

もう一つの方法は、あなたのすべてに基本的にストリップしないようにProGuardのを告げるコールバックを、 @Keep注釈を追加することです
-keep class ** implements com.squareup.picasso.Callback { *; } 

/変更

+0

いいえ、それは役に立たなかった。 – Diffy

0

あなたは、このルールを使用してCallbackインタフェースを実装するすべてのクラスを維持するためには、ProGuardを設定することができますそれらはどんな形でもあります。

+0

私はこれを試してチェックします。 – Diffy

関連する問題