在混淆代码时,我是否需要在proguard规则中保留Parcelable?

12

我的项目有几个扩展Parcelable的类。在混淆时,我需要在proguard规则中“保留”它们吗?

Parcelable的一般做法是什么?


不是的。但如果您正在使用相同的类来使用GSON进行JSON解析,则请使用serializedName标记和字段名称。 - Pankaj Kumar
是的,正如https://dev59.com/YXrZa4cB1Zd3GeqP8ees#20918277中提到的那样,您需要这样做。 - Miha_x64
2个回答

19

不,Android 的默认规则包括这个:

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

如果您保留默认生成的Gradle定义,则将应用这些默认规则:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

确保您在字段定义中不要忘记“final”!在我的情况下,这就是为什么Proguard仍然删除它的原因。 - allofmex

8
如果您正在使用Kotlin的@Parcelize并使用proguard,您可以将以下内容添加到proguard-rules.pro中:
-keep @kotlinx.android.parcel.Parcelize public class *

4
kotlinx.android.parcel.Parcelize已被弃用,建议使用kotlinx.parcelize.Parcelize。因此,可能需要更改为-keep @kotlinx.parcelize.Parcelize public class * - Scott Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接