在混淆时我是不是需要在 proguard 规则中“保持” Parcelable

Posted

技术标签:

【中文标题】在混淆时我是不是需要在 proguard 规则中“保持” Parcelable【英文标题】:Do I need to 'keep' Parcelable in proguard rules while obfuscating在混淆时我是否需要在 proguard 规则中“保持” Parcelable 【发布时间】:2016-07-04 18:17:00 【问题描述】:

我的项目几乎没有扩展Parcelable 的类。 我是否需要在混淆时将它们“保留”在 proguard 规则中。

parcelables 的一般做法是什么?

【问题讨论】:

没有。但是,如果您使用 GSON 使用相同的类进行 JSON 解析,则使用带有字段名称的 serializedName 标记。 是的,您需要,如***.com/a/20918277/3050249中所述 【参考方案1】:

不,默认的 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 仍然删除它..【参考方案2】:

如果您使用 Kotlin @Parcelize 和 proguard,您可以将其添加到 proguard-rules.pro

-keep @kotlinx.android.parcel.Parcelize public class *

【讨论】:

以上是关于在混淆时我是不是需要在 proguard 规则中“保持” Parcelable的主要内容,如果未能解决你的问题,请参考以下文章

ProGuard 最全混淆规则说明

ProGuard 混淆规则整理

Android代码混淆之混淆规则

Proguard 不会混淆 android 中的 strings.xml

通过将 proguard 规则映射文件上传到 google play 控制台去混淆生产 Android 错误

如何使用 proguard 混淆选择性课程?