Firestore + Proguard + Android billingclient:java.lang.RuntimeException:在类org.json.JSONObject上找不到要序列化的属性

时间:2019-12-17 13:27:38

标签: android firebase google-cloud-firestore proguard in-app-billing

我正在尝试构建应用发行版

minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

但是它引发了我这个错误:

  

java.lang.RuntimeException:在类org.json.JSONObject`上找不到要序列化的属性

我正在尝试将购买的商品保存到Firebase firestore中。

  1. 我已经创建了一个POJO购买计划

    @Keep
    public class PurchasePlan {
        @PropertyName("purchased_on")
        public Date purchased_on;
        @PropertyName("email_id")
        public String email_id;
        @PropertyName("pro_plan_id")
        public String pro_plan_id;
        @PropertyName("is_acknowledged")
        public boolean is_acknowledged;
        @PropertyName("applied_promo_code")
        public String applied_promo_code;
        @PropertyName("pro_plan_price")
        public String pro_plan_price;
        @PropertyName("pro_plan_details")
        public SkuDetails pro_plan_details;
        @PropertyName("cancelled_on")
        public Date cancelled_on;
    }
    
  2. 我将PurchasePlan对象保存到Firestore

    private void savePurchase() {
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        if (BuildConfig.DEBUG) {
            db.collection(PAID_USERS_DEBUG).add(plan);
        } else {
            db.collection(PAID_USERS).add(plan);
        }
    }
    

应用程序不断崩溃,不会将对象保存到Firestore集合中。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

找到了解决方案。 R8兼容性faq有所帮助。 另外,this

我在保护规则中添加了以下几行。

-keep class com.<package_name>.models.** { <fields>; }

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

-keep class * implements com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer