继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

混淆的一些实践

nickcau
关注TA
已关注
手记 113
粉丝 6508
获赞 303

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

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

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

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

https://img4.mukewang.com/5c403a670001f41c15940946.jpg

我们看到默认的

 minifyEnabled false

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

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

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

https://img.mukewang.com/5c403aca00014cff20600814.jpg

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

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

https://img1.mukewang.com/5c403b5d00015e4418280768.jpg

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

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

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

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

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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP