2015-04-25 45 views
8

這是我的gradle.build文件的Android 1.1.0工作室設置

defaultConfig { 

    minSdkVersion 15 
    targetSdkVersion 21 
    versionCode 2 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

Proguard-rules.pro文件

-keepclassmembers class * extends de.greenrobot.dao.AbstractDao { 
    public static java.lang.String TABLENAME; 
} 
-keep class **$Properties 

-dontwarn com.squareup.** 
-dontwarn okio.** 
-dontwarn retrofit.** 
-dontwarn org.joda.time.** 

我有Java類

之一
public class Endpoints { 
    public final static String GET_ENDPOINT = "MY_ENDPOINT"; 
} 

,我在我的改裝restadapter使用作爲

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Endpoints.GET_ENDPOINT) 
      .setLogLevel(RestAdapter.LogLevel.NONE) 
      .setConverter(new GsonConverter(gson)) 
      .setClient(new OkClient(BusProvider.getClientInstance())) 
      .build(); 

現在當minifiyEnabled爲false時,整個代碼工作正常,但我設置minifyEnabled爲true,網絡調用不會發生。我的應用在啓動後立即調用此端點,但網絡日誌不顯示正在進行的網絡請求。有人能告訴我這裏有什麼錯嗎?

回答

12

Proguard與我在我的項目中使用的許多庫不兼容。

對於GSON我加入由GSON隊給出的proguard的規則在http://google-gson.googlecode.com/svn/trunk/examples/android-proguard-example/proguard.cfg

您需要更改

-keep class com.google.gson.examples.android.model.** { *; } 

-keep class com.your.package.name.your.models.** { *; } 

對於改裝你需要添加

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

從這裏https://github.com/square/retrofit/issues/117

兩者對於喬達庫我加

-keep class org.joda.time.** { *; } 
-dontwarn org.joda.time.** 

奧托你需要添加

-dontwarn com.squareup.** 
-keepclassmembers class ** { 
    @com.squareup.otto.Subscribe public *; 
    @com.squareup.otto.Produce public *; 
} 

取自這裏https://github.com/StephenAsherson/Android-OttoSample/blob/master/proguard-project.txt

我還添加了

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

在使用這些配置更改之前,proguard將我的應用程序從3.4 mb修整爲2 mb。使用這些更改後,它縮小到3.2 mb,所以我只想用minifyEnabled false。

+0

您的示例鏈接不再有效。你可以使用這個:https:// github。COM /谷歌/ GSON /斑點/主/示例/機器人-proguard的-示例/ proguard.cfg – w3bshark

4

Proguard可能會混淆Retrofit/Gson正在使用的項目中的一些類。這會導致您的請求永遠不會成功,因爲解析失敗。這是由於參數不匹配例如String status可能會變成String a與Proguard。這與響應不匹配,因此失敗。

簡而言之 - 請確保Retrofit/Gson用於創建和解析響應的所有類都排除在Proguard的模糊處理之外。

+0

是的,這是問題。我會發佈一個具體的答案,爲我解決了這個問題。 –