在Signed apk中运行onFailure retrofit 2

时间:2017-03-02 18:02:05

标签: android android-studio proguard retrofit2

我在android项目中使用了改造2,okhttp和moshi-jsonapi

Debug Build apk和应用程序是正确的,但我在构建签名apk(发布模式)中有错误,我在dontwarn中使用proguard-rules.pro来传递构建签名的apk,但我的应用程序处于签名模式每次从Callback运行失败。

可投掷的消息:

platform java.util.LinkedHashMap<java.lang.String,a.a.a.j> annotated [] requires explicit JsonAdapter to be registered

我从未使用过LinkedHashMap!

当使用minifyEnabled false签名的apk并且应用程序是正确的但它不是安全的解决方案。

proguard-rules.pro:

-dontwarn okio.**
-keep class okio.** { *; }

-dontwarn retrofit2.**
-dontwarn org.codehaus.mojo.**
-dontnote retrofit2.Platform
-dontnote retrofit2.Platform$IOS$MainThreadExecutor
-dontwarn retrofit2.Platform$Java8

-keep class retrofit2.** { *; }

-keepattributes Exceptions
-keepattributes Signature
-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations
-keepattributes RuntimeInvisibleParameterAnnotations

-keepattributes EnclosingMethod
-keepclasseswithmembers class * {
    @retrofit2.http.* <methods>;
}
-keepclasseswithmembers interface * {
    @retrofit2.* <methods>;
}

2 个答案:

答案 0 :(得分:1)

在proguard中使用此代码后解决了它:

-keepclassmembers public abstract class moe.banana.jsonapi2.** {
   *;
}

答案 1 :(得分:0)

您可能需要保持模型属性不受限制。如果所有模型都在一个包中,那么您可以使用,

-keepclassmembers class com.example.model.** { <fields>; }

或者您必须使用以下

@SerializedName("name")
public String name;

我无法使用以下代码回复评论...所以只需编辑答案..你介意尝试这个吗?

-keepclassmembers class ** {
@com.squareup.moshi.FromJson *;
@com.squareup.moshi.ToJson *;}