使用proguard改进2.4.0

时间:2018-06-05 18:41:57

标签: java android retrofit2

当我将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成功但问题是在运行时(发布apk)&gt;改造请求不发送和返回{null} .. 什么是解决方案请!

3 个答案:

答案 0 :(得分:5)

可能是因为其他图书馆的工作与您的下载程序或解析器一样进行了改造。

重要通知:

添加规则以保持您的模型类和使用解析器的主题:

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

如果您使用okhttp或Okhttp3并在规则下添加了改装

注意:并检查您的解析器程序规则

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

答案 1 :(得分:0)

您的Proguard规则适用于Retrofit,但它们也会混淆用于序列化/反序列化数据的模型类。它们的名称非常重要,因为Retrofit / Gson将它们与它们进行序列化/反序列化相匹配。 Proguard将它们变成了像ab这样的乱码,所以Retrofit / Gson无法理解它们。

根据您的包装设置,您需要添加以下内容,例如amin mahmodi。

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

答案 2 :(得分:0)

这个答案可能很晚,但是可以帮助其他人。

与其保留整个课程,而不是:

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

您可以使用:

-keepclassmembers class * {
   @com.google.gson.annotations.SerializedName <fields>;
}

这将允许您将模型放置在所需的任何位置,并且每次更改项目位置时都不会将它们作为单独的规则包含在ProGuard文件中。