Дооснащение 2.4.0 с помощью proguard

Ahmed Isa спросил: 12 мая 2018 в 05:01 в: java

Когда я добавляю библиотеку Retrofit 2.4.0 в проект android

implementation 'com.squareup.retrofit2:retrofit:2.4.0'

и устанавливаю minifyEnabled {true}

buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }

, а затем добавьте эти правила в proguard-rules.pro

-keep class com.squareup.** { *; }
-keep interface com.squareup.** { *; }
-keep class retrofit2.** { *; }
-keep interface retrofit2.** { *;}
-keep interface com.squareup.** { *; }-keepclasseswithmembers class * {
    @retrofit2.http.* <methods>;
}-dontwarn rx.**
-dontwarn retrofit2.**
-dontwarn okhttp3.**
-dontwarn okio.**

Наконец, построенный и сгенерированный подписанный apk успешно, но проблема заключается в том, чтобы запустить (release apk) & GT; Запросы на доработку не отправляются и не возвращаются {null}. Потребовалось решение!


2 ответа

Есть решение
amin mahmoudi ответил: 12 мая 2018 в 05:43

возможно, из-за того, что в другой библиотеке работает белая модификация, например, ваш загрузчик или синтаксический анализатор.

важное уведомление:

добавить правило, чтобы ваши классы моделей и темы работали с белым парсером: / p>

-keep class com.address_package.** { *; }

, если вы используете okhttp или Okhttp3 white retrofit, добавленные ниже правил

Примечание: и проверьте также правила профайлов парсера.

БИБЛИОТЕКА: OkHttp

-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }-dontwarn com.squareup.okhttp.**
-dontwarn okio.**

okhttp3

-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }-dontwarn okhttp3.**
Ahmed Isa ответил: 13 мая 2018 в 06:58
Спасибо amin mahmodi, это прекрасно работает.
amin mahmoudi ответил: 17 мая 2018 в 02:33
Добро пожаловать @AhmedIsa
squeeish ответил: 12 мая 2018 в 06:22

Правила Proguard работают для Retrofit, но они также запутывают классы моделей, которые вы используете для сериализации / десериализации данных. Их имена важны, так как Retrofit / Gson соответствует им для сериализации / десериализации. Proguard превращает их в тарабарщину, например a и b, поэтому Retrofit / Gson не может их понять.

В зависимости от настройки пакета вам нужно добавить следующее например, упомянутый амин махмоди.

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

Ahmed Isa ответил: 13 мая 2018 в 07:01
Спасибо, что он работает сейчас < 3