2014-04-05 69 views
14

我發現了一些涉及同一主題但最新版本的舊問題,但沒有可用的答案適用於我。Proguard不再適用於改裝

我在我的項目中使用Retrofit。當我嘗試組裝我得到以下錯誤:

警告:retrofit.client.OkClient:找不到引用的類com.squareup.okhttp.OkHttpClient

我使用下列但沒有它正在幫助:

-keepattributes Signature 

-keep class retrofit.** { *; } 
-keep class retrofit.http.** { *; } 
-keep class retrofit.client.** { *; } 
-keep class com.squareup.okhttp.** { *; } 
-keep interface com.squareup.okhttp.** { *; } 
-keep class com.google.gson.** { *; } 
-keep class com.google.inject.* { *; } 
-keep class org.apache.http.* { *; } 
-keep class org.codehaus.mojo.** { *; } 
-keep class org.apache.james.mime4j.* { *; } 
-keep class javax.inject.* { *; } 
-keep class sun.misc.Unsafe { *; } 

-libraryjars libs/acra-4.5.0.jar 
-libraryjars libs/radial-menu-v4.jar 

-dontwarn javax.xml.stream.events.** 
-dontwarn rx.** 
-dontwarn org.apache.lang.** 

# Application classes that will be serialized/deserialized over Gson 
-keep class com.example.package.network.** { *; } 

有沒有人最近有過這個問題並解決了它?

回答

5

可能看起來微不足道,但你試過包括這條線嗎? (如果你不使用okhttp那就是)。

-dontwarn com.squareup.okhttp.** 

事情是廣場不使用Proguard的內部,因此而他們的圖書館可能使正在使用什麼,你可以放心地忽略它,如果你的項目沒有使用它的一些假設。我和畢加索有同樣的問題,這對我來說是固定的。

+0

這確實使編譯但如果你確信你沒有使用你所提到的唯一安全功能。我會標記這個答案,因爲很多人會認爲這是正確的答案 –

+0

不要忘記保持模型類,這是爲我打破了。 – wkarl

46
-keepattributes Signature 
-keepattributes *Annotation* 
-keep class com.squareup.okhttp.** { *; } 
-keep interface com.squareup.okhttp.** { *; } 
-dontwarn com.squareup.okhttp.** 

-dontwarn rx.** 
-dontwarn retrofit.** 
-keep class retrofit.** { *; } 
-keepclasseswithmembers class * { 
    @retrofit.http.* <methods>; 
} 

-keep class sun.misc.Unsafe { *; } 
#your package path where your gson models are stored 
-keep class com.example.models.** { *; } 

我已經使用上述proguard文本進行改進與OKHTTP。

編輯: 尼斯回購是指許多流行的庫 https://github.com/krschultz/android-proguard-snippets

+0

嘿,你可以添加一些關於你的工作的描述。 – Runcorn

+0

對我來說'-keepclasseswithmember'很重要 - 在我添加之前我的@Path變量沒有被替換。謝謝! :) – DanielGrech

+0

對我來說,它甚至沒有--keep class com.squareup.okhttp。** {*; } -keep interface com.squareup.okhttp。** {*; }雖然我也使用okhttp – netimen

2

這種配置工作了改造與GSON

#Using for retrofit & gson 
-keep class com.google.gson.** { *; } 
-keep class com.google.inject.** { *; } 
-keep class org.apache.http.** { *; } 
-keep class org.apache.james.mime4j.* { *; } 
-keep class javax.inject.** { *; } 
-keep class retrofit.** { *; } 
-keep class sun.misc.Unsafe { *; } 
-keep class com.google.gson.stream.** { *; } 
-keepclassmembernames interface * { 
    @retrofit.http.* <methods>; 
} 
-keep interface retrofit.** { *;} 
-keep interface com.squareup.** { *; } 
-dontwarn rx.** 
-dontwarn retrofit.** 

再加上你需要添加這是用來與改造,就像下面的所有POJO類。

-keep class com.google.gson.examples.android.model.** { *; } 
-keep class com.packagename.your.pojo.models.** { *; } 

keepattributes像下面

-keepattributes Exceptions 
-keepattributes InnerClasses 
-keepattributes Signature 
-keepattributes Deprecated 
-keepattributes SourceFile 
-keepattributes LineNumberTable 
-keepattributes *Annotation* 
-keepattributes EnclosingMethod 

A nice discussion about proguard with retrofit goes here