为了账号安全,请及时绑定邮箱和手机立即绑定

混淆的一些实践

标签:
Android

混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。

首先,这里说的的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。依靠 ProGuard,混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的瓶颈;同时,将类、类成员、方法重命名为无意义的简短名称,增加了逆向工程的难度。而依靠 Gradle 的 Android 插件,我们将移除未被使用的资源,可以有效减小 apk 安装包大小。

我们在公司中开发环境,一般我们自己在测试环境中拿android studio跑一下代码,如果没问题就上传代码到服务器,有一些情况尤其是使用gson来解析数据的时候要注意混淆的影响

以下是我在一个新建的android studio工程的截图:

https://img1.sycdn.imooc.com//5c403a670001f41c15940946.jpg

我们看到默认的

 minifyEnabled false

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

  1. releaseminifyEnabled的值改为true,打开混淆;

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

https://img1.sycdn.imooc.com//5c403aca00014cff20600814.jpg

那我们如何解决gson的数据解析类不会被混淆呢:

如果所有的bean类都在 xxx.littletest.bean的package下的话,我们这样来引入

https://img1.sycdn.imooc.com//5c403b5d00015e4418280768.jpg

如果我们使用组件化开发,子工程会编译为aar再引入主工程,那么主工程的proguard会

覆盖子工程的proguard,我们怎么来处理呢

我们可以在主工程的proguard里加入:

#entity.
-keep class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable { *; }

然后我们让子工程的QuestionInfo继承Serializable就可以了

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消