Android开发中混淆后Gson序列化、反序列化的那些坑,安卓开发实战

Item 中增加了一个内部类 PageConfig。

这里敲黑板了

1.Item 里面的字段、Item 里面引用到的类和 Item 里面的内部类 PageConfig 都需要实现序列化 (implements Serializable);

  1. 如果不是 implements Serializable 实现序列化,而是给每个字段加上 @SerializedName 注解,那么务必注意:Item 里面的字段、Item 里面引用到的类的和 Item 里面的内部类的字段都需要加上 @SerializedName 注解,否则会出现莫名其妙的问题:不会崩溃,就是各种奇怪现象,而在 debug 下又不出现这个问题。

最常见的做法是:


-keep class com.baidu.bean.** { *; }



含义是:将 bean 目录下包括子目录下的类排除不被混淆

单独排除某个类可以这么写:

-keep class com.baidu.bean {*;}

单独排除某个类的内部类需要这么写:

-keep class class com.baidu.bean.Item$PageConfig {*;}

如果很多实体类里面有内部类,建议组合起来写:


-keep class com.baidu.bean.**{ *;}



-keep class com.baidu.bean.**$*{ *;}



另外,下面的写法也是可以的,主要以上面的写法为主。具体要使用哪种,读者可以自己根据需要使用。

-keep class com.baidu.bean.$** { ;}

-keep class com.baidu.bean.$ {*;}

-keep class com.baidu.bean.**$* {*;}

上面出现了 * 和 ** 通配符的配置,为了便于加深印象,这里延伸阅读下:

[](

)Android 混淆最佳实践

============================================================================

[](

)1. 混淆配置


android{



buildTypes {

        release {

            buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log

            minifyEnabled true

            shrinkResources true

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

            signingConfig signingConfigs.config

            }

        }

}



因为开启混淆会使编译时间变长,所以 debug 模式下不开启。我们需要做的是:

  1. release下minifyEnabled的值改为true,打开混淆;

  2. 加上shrinkResources true,打开资源压缩。

3.buildConfigField 不显示 log 日志

4.signingConfig signingConfigs.config配置签名文件文件

[](

)自定义混淆规则

==========================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值