web-dev-qa-db-ja.com

Proguardを使用した警告の取得(外部ライブラリを使用)

Proguardを有効にしましたが、APKをビルドしようとしていますが、多くの警告が表示され、それらを解決する方法がわかりません。

Retrofit、Jsoup、およびその他のストックライブラリを使用していますが、次の警告が表示されます。

 Warning:okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
 Warning:okio.Okio: can't find referenced class Java.nio.file.Files
 Warning:okio.Okio: can't find referenced class Java.nio.file.Path
 Warning:okio.Okio: can't find referenced class Java.nio.file.OpenOption
 Warning:okio.Okio: can't find referenced class Java.nio.file.Path
 Warning:okio.Okio: can't find referenced class Java.nio.file.OpenOption
 Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
 Warning:okio.Okio: can't find referenced class Java.nio.file.Path
 Warning:okio.Okio: can't find referenced class Java.nio.file.OpenOption
 Warning:okio.Okio: can't find referenced class Java.nio.file.Path
 Warning:okio.Okio: can't find referenced class Java.nio.file.OpenOption
 Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
 Warning:retrofit2.Platform$Java8: can't find referenced method 'boolean isDefault()' in library class Java.lang.reflect.Method
 Warning:retrofit2.Platform$Java8: can't find referenced class Java.lang.invoke.MethodHandles$Lookup
 Warning:retrofit2.Platform$Java8: can't find referenced class Java.lang.invoke.MethodHandle
 Warning:retrofit2.Platform$Java8: can't find referenced class Java.lang.invoke.MethodHandles
 Warning:retrofit2.Platform$Java8: can't find referenced class Java.lang.invoke.MethodHandle
 Warning:retrofit2.Platform$Java8: can't find referenced class Java.lang.invoke.MethodHandles$Lookup
 Warning:retrofit2.Platform$Java8: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
 Note: the configuration keeps the entry point 'Android.support.v7.widget.FitWindowsLinearLayout { void setOnFitSystemWindowsListener(Android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener); }', but not the descriptor class 'Android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setAccessibilityDelegateCompat(Android.support.v7.widget.RecyclerViewAccessibilityDelegate); }', but not the descriptor class 'Android.support.v7.widget.RecyclerViewAccessibilityDelegate'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setAdapter(Android.support.v7.widget.RecyclerView$Adapter); }', but not the descriptor class 'Android.support.v7.widget.RecyclerView$Adapter'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setRecyclerListener(Android.support.v7.widget.RecyclerView$RecyclerListener); }', but not the descriptor class 'Android.support.v7.widget.RecyclerView$RecyclerListener'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setLayoutManager(Android.support.v7.widget.RecyclerView$LayoutManager); }', but not the descriptor class 'Android.support.v7.widget.RecyclerView$LayoutManager'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setRecycledViewPool(Android.support.v7.widget.RecyclerView$RecycledViewPool); }', but not the descriptor class 'Android.support.v7.widget.RecyclerView$RecycledViewPool'
 Note: the configuration keeps the entry point 'Android.support.v7.widget.RecyclerView { void setViewCacheExtension(Android.support.v7.widget.RecyclerView$ViewCacheExtension); }', but not the descriptor class 'Android.support.v7.widget.RecyclerView$ViewCacheExtension'
 Warning:there were 22 unresolved references to classes or interfaces.
 Warning:there were 1 unresolved references to library class members.
 Warning:Exception while processing task Java.io.IOException: Please correct the above warnings first.

ここに私のプロガードがあります:

 -keep class * implements Android.os.Parcelable {
   public static final Android.os.Parcelable$Creator *;
 }

 ##---------------Begin: proguard configuration for Gson  ----------
 # Gson uses generic type information stored in a class file when working with fields. Proguard
 # removes such information by default, so configure it to keep all of it.
 -keepattributes Signature


 # Gson specific classes
 -keep class com.abohani.tdroms.SharedPreferencesTools { *; }
 #-keep class com.google.gson.stream.** { *; }


 # Application classes that will be serialized/deserialized over Gson
 -keep class com.abohani.tdroms.** { *; }
50
Jaeger

ProGuardを使用するときは、常にすべての警告を解決するにする必要があります。

これらの警告は、ライブラリがいくつかのコードを参照しており、そのソースがないことを示しています。それは大丈夫かもしれません。問題のあるコードが呼び出されるかどうかによります。

この場合、OkioおよびRetrofit2の警告は無視できます。パッケージ Java.nio.*はAndroidでは利用できず、呼び出されることはありません。これらの警告を無視しても問題ありません。また、Java 8クラスは使用されません。

これをProGuard構成に追加すると、問題が修正されます。

-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
121
Tomik

レトロフィットページでは、プロガードビルドについて次のように記載されています。

プラットフォームは、Androidに存在しない型でClass.forNameを呼び出して、プラットフォームを決定します。

-dontnote retrofit2。プラットフォーム

Java 8 VMで実行するときに使用されるプラットフォーム。実行時には使用されません。

-dontwarn retrofit2.Platform $ Java8

コンバーターおよびアダプターによるリフレクションで使用するための汎用タイプ情報を保持します。

-keepattributes署名

Proxyインスタンスで使用するために、宣言されたチェック済み例外を保持します。

-keepattributes例外

ここで確認してください: http://square.github.io/retrofit/

1
Chi Minh Trinh