1

私は Realm と Parceler を使用しており、すべて正常に動作していますが、Proguard を有効にするとエラーが発生します。

Parcels.wrap(obj)

次のエラーが表示されます。

org.parceler.ParcelerRuntimeException: Unable to find generated Parcelable class for io.realm.g, verify that your class is configured properly and that the Parcelable class io.realm.g$$Parcelable is generated by Parceler.

私は次のようなプロガードルールを設定しましたが:

##---------------Begin: proguard configuration for realm  ----------
-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.internal.Keep
-keep @io.realm.internal.Keep class * { *; }
-dontwarn javax.**
-dontwarn io.realm.*
##---------------End: proguard configuration for realm  ----------
##---------------Begin: proguard configuration for Parcel  ----------
-keep interface org.parceler.Parcel
-keep @org.parceler.Parcel class * { *; }
-keep class **$$Parcelable { *; }
-keep class org.parceler.Parceler$$Parcels
-keep @org.parceler.Parcel class * { *; }
-keep class *$$Parcelable { *; }
##---------------End: proguard configuration for Parcel  ----------

パーセルしようとしているオブジェクトは次のようになります。

@Parcel(implementations = { ContentRealmProxy.class },
        value = Parcel.Serialization.BEAN,
        analyze = { Content.class })
public class Content extends RealmObject {
    ....
}

少し早いですがお礼を

4

1 に答える 1

12

これを追加して、役立つかどうかを確認できます。

#realm
-keepnames public class * extends io.realm.RealmObject
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.** { *; }
-dontwarn javax.**
-dontwarn io.realm.**

問題は、RealmObjects の名前を保持している間、実際には Realm プロキシ クラスの名前を保持していないことだと思います。

だからこの行

-keepnames public class * extends io.realm.RealmObject

それだけで十分なはずです。

于 2016-10-24T07:53:03.167 に答える