Android studio 1.1.0 установка minifyEnabled true вызывает проблемы с приложением
вот мой Gradle в.создать файл
defaultConfig {
minSdkVersion 15
targetSdkVersion 21
versionCode 2
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Proguard-правила.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, сетевой вызов не происходит. Мое приложение вызывает эту конечную точку, как только она запускается, но сетевые журналы не показывают сетевой запрос. Мочь кто подскажет, что случилось здесь?
2 ответов
Proguard не очень хорошо играет со многими библиотеками, которые я использовал в своем проекте.
для gson я добавил правила proguard, данные командой gson в http://google-gson.googlecode.com/svn/trunk/examples/android-proguard-example/proguard.cfg
вам нужно изменить
-keep class com.google.gson.examples.android.model.** { *; }
to
-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 МБ до 2 Мб. После использования этих изменений он сжимает его до 3,2 Мб поэтому я просто собираюсь пойти с minifyEnabled false.
Proguard, вероятно, запутывает некоторые из ваших классов в вашем проекте, который использует Retrofit/Gson. Это приводит к тому, что ваш запрос никогда не будет успешным, потому что синтаксический анализ терпит неудачу. Это связано с параметрами, не соответствующими, например String status
превращается в String a
С Proguard. Это не соответствует ответу, поэтому он терпит неудачу.
короче - убедитесь, что все ваши классы, которые Retrofit/Gson использует для создания и анализа ответа, исключены из Proguard обфускация.