ProGuardはokhttpでNiceを再生しません。次の警告が表示され続けます。
Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(Java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getHeaderFieldLong(Java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:there were 4 unresolved references to program class members.
Your input classes appear to be inconsistent.
You may need to recompile the code.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
これらはokhttpと改造のための私のプロガード設定です:
-dontwarn rx.**
-dontwarn okio.**
-dontwarn com.squareup.okhttp.*
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
@retrofit.http.* <methods>; }
-keepattributes Signature
-keepattributes *Annotation*
これは、Android Studio 1.0でのProGuardの変更と関係がありますか?
私は関連する質問への回答を試しましたが、彼らは私がすでに持っている設定を使用することを提案しました。
ようやくこの問題を解決することができました。
私が遭遇した警告は実際には意味がなく、無視することができます。
代わりに、モデルクラスを難読化しないことを忘れていました。
-keep class com.example.datamodel.** { *; }
この変更後、すべてが正常に機能しました。
これは私にとってはうまくいきます:
proguard-rules.proに次の2行を追加する必要があります。
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
完全なproguard-rules.proファイルは次のようになります。
-dontwarn rx.**
-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn retrofit.**
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
@retrofit.http.* <methods>;
}
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes署名
-keepattributes 注釈
-keep okhttp3。** {*; }
-keep okhttp3。** {*; }
-dontwarn okhttp3。**
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
それはこの構成で私のために働きます。使用する **
の代わりに *
カプセル化された子パッケージを持つすべてのサブクラス
-dontwarn org.xmlpull.v1.**
-dontwarn com.squareup.**
-keep class com.squareup.** { *; }
まだ誰かがここに落ちる場合に備えて。必要なProguard構成はドキュメント化され、メインのOkHttpリポジトリに保持されます。
これをプロガード設定に追加します。
-dontwarn com.squareup.okhttp.internal.huc.**
警告の原因はcom.squareup.okhttp.internal
のクラスを使用していないと想定しても安全だと思います。
okhttp3プロガードルール
以下は、okhttp3 Proguardの正しい形式です。
-keepattributes Signature
-keepattributes Annotation
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-dontwarn okio.**
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform