gpt4 book ai didi

java - 使用 proguard 时 Gson 嵌套类为空

转载 作者:行者123 更新时间:2023-12-04 17:40:07 25 4
gpt4 key购买 nike

警告:类 'com.google.gson.internal.bind.ReflectiveTypeAdapterFactory' 在类上调用 Class.getDeclaredFields。

启用 proguard 后发现了以下提到的一些问题:

  • 嵌套的静态类为空。
  • 类中自定义对象的列表为空

  • 已经引用了以下错误,但没有运气:

    Proguard issue while using GSON
    Using GSON with proguard enabled

    最佳答案

    我可以通过对我的 proguard-rules.pro 做三件事来解决这个问题文件:
    第一 , 确保 ProGuard不会更改您使用 Gson 序列化的任何自定义类的名称.假设您有一个名为 Classname 的类.要豁免它,请将其添加到您的 progaurd-rules.pro :

    -keepclassmembernames class com.your.package.classname { <fields>; }
    (将 com.your.package.classname 替换为您的实际包和类名)
    我不得不为十几节课这样做。不要忘记免除那些也是自定义的类的任何成员变量。使用 classname$innerclass 豁免内部类而不是 classname .
    第二 ,添加规则 Gson图书馆推荐。 They can be found here.以下是写作时的情况:
    ##---------------Begin: proguard configuration for Gson  ----------
    # Gson uses generic type information stored in a class file when working with fields. Proguard
    # removes such information by default, so configure it to keep all of it.
    -keepattributes Signature

    # For using GSON @Expose annotation
    -keepattributes *Annotation*

    # Gson specific classes
    -dontwarn sun.misc.**
    #-keep class com.google.gson.stream.** { *; }

    # Application classes that will be serialized/deserialized over Gson
    -keep class com.google.gson.examples.android.model.** { <fields>; }

    # Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
    # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
    -keep class * extends 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

    # Prevent R8 from leaving Data object members always null
    -keepclassmembers,allowobfuscation class * {
    @com.google.gson.annotations.SerializedName <fields>;
    }

    # Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
    -keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
    -keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

    ##---------------End: proguard configuration for Gson ----------
    最后 , 加入这两条规则:
    -dontwarn java.lang.reflect.**
    -keep class kotlin.** { *; }
    这些是修复嵌套 null 的原因我遇到的问题 - 当然,在我完成上述步骤之后。

    关于java - 使用 proguard 时 Gson 嵌套类为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54880395/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com