手记

混淆的一些实践

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

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

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

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

我们看到默认的

 minifyEnabled false

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

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

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

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

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

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

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

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

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

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

0人推荐
随时随地看视频
慕课网APP