web-dev-qa-db-ja.com

ProGuardがokhttpで機能しない

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の変更と関係がありますか?

私は関連する質問への回答を試しましたが、彼らは私がすでに持っている設定を使用することを提案しました。

23
wkarl

ようやくこの問題を解決することができました。

私が遭遇した警告は実際には意味がなく、無視することができます。

代わりに、モデルクラスを難読化しないことを忘れていました。

-keep class com.example.datamodel.** { *; }

この変更後、すべてが正常に機能しました。

10
wkarl

これは私にとってはうまくいきます:

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*

ソース: https://stackoverflow.com/a/24178851/4102045

34
pikufolgado

OkHttp

-keepattributes署名

-keepattributes 注釈

-keep okhttp3。** {*; }

-keep okhttp3。** {*; }

-dontwarn okhttp3。**

4

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
1
serv-inc

それはこの構成で私のために働きます。使用する ** の代わりに *カプセル化された子パッケージを持つすべてのサブクラス

-dontwarn org.xmlpull.v1.**
-dontwarn com.squareup.**
-keep class com.squareup.** { *; }
1
Adem

まだ誰かがここに落ちる場合に備えて。必要なProguard構成はドキュメント化され、メインのOkHttpリポジトリに保持されます。

https://github.com/square/okhttp

1
bplpu

これをプロガード設定に追加します。

-dontwarn com.squareup.okhttp.internal.huc.**

警告の原因はcom.squareup.okhttp.internalのクラスを使用していないと想定しても安全だと思います。

1
seato

okhttp3プロガードルール

以下は、okhttp3 Proguardの正しい形式です。

-keepattributes Signature  
-keepattributes Annotation  
-keep class okhttp3.** { *; }  
-keep interface okhttp3.** { *; }  
-dontwarn okhttp3.**  
-dontwarn okio.**
1
Bhavik Nathani
# 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
0
Adeeb karim