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

标签 android android-studio android-gradle-plugin proguard retrofit

这是我的 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";
}

我在 retrofit 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,网络调用不会发生。我的应用程序在启动后立即调用此端点,但网络日志不显示正在发出的网络请求。谁能告诉我这里出了什么问题?

最佳答案

Proguard 不能很好地与我在项目中使用的许多库一起使用。

对于 gson,我添加了 gson 团队在 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

对于我添加的joda库

-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。

关于Android studio 1.1.0 设置 minifyEnabled true 导致应用程序出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863368/

相关文章:

android - DeepSpeechDemo 应用程序可与 Gradle cli 一起使用,但在使用 Android Studio 构建时会崩溃

java - 恢复倒计时

安卓键盘布局搜索

java - 字符串未设置为正确的值

Android SDK Manager : Bug when connecting to a proxy (empty username), 你能确认吗?

Android Studio 无法启动守护进程

android - 无法读取映射文件,Gradle任务执行异常[Android]

java - onItemClick 中的 parent 和 view 是什么?

java - 从/proc/net/arp (Android) 中检索 IP 和 MAC 地址

android - 如果我使用 try catch 和 finally for handler 使用 runnable 会发生什么?