Android studio 1.1.0设置minifyEnabled true导致应用程序出现问题

这是我的gradle.build文件

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,networking调用不会发生。 我的应用程序在启动时立即调用此端点,但networking日志不显示正在进行的networking请求。 有人能告诉我这里有什么错吗?

Solutions Collecting From Web of "Android studio 1.1.0设置minifyEnabled true导致应用程序出现问题"

Proguard与我在我的项目中使用的许多图书馆没有很好的合作。

对于gson,我添加了gson团队在http://google-gson.googlecode.com/svn/trunk/examples/android-proguard-example/proguard.cfg中给出的proguard规则

你需要改变

 -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.** 

对于otto,你需要添加

 -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.** { *; } 

在使用这些configuration更改之前,proguard将我的应用从3.4 mb修剪到了2 mb。 使用这些更改后,它缩小到3.2 mb,所以我只是要用minifyEnabled false。

Proguard可能会混淆Retrofit / Gson正在使用的项目中的一些类。 这会导致您的请求永远不会成功,因为parsing失败。 这是由于参数不匹配,例如String status可能会变成String a与Proguard。 这与响应不匹配,所以失败。

简而言之,请确保所有您的Retrofit / Gson用于创build和parsing响应的类都排除在Proguard的混淆之外