持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
为了活动小家电,接着上篇搞!
什么是混淆,为什么?
首先,它与应用程序的容量有关。用户认为有吸引力的因素之一是应用程序的大小。官方文档介绍了代码和资源减少/混淆/优化的方法,以使应用程序的大小尽可能小。
每种方法可以总结如下。
- Shrink App (Shrink Code, Shrink Resources):通过删除未使用的代码和资源来减小 DEX 文件大小。
- 混淆:缩短应用程序类、方法和字段的名称,减少 DEX 文件大小。
- 优化:通过检查代码和改进不必要的语法来减少 DEX 文件的大小。
其中,我本来很好奇,那为什么要混淆呢?回到这个问题,从安全角度和应用程序容量的角度来看,混淆是必不可少的。
混淆的最初目的是通过缩短应用程序类、方法和字段的名称来减小应用程序大小。DEX 文件索引许多类和成员。它不会删除代码本身,但通过缩短类和成员的长名称,您可以减小应用程序的大小。
如果你注意任意缩短和替换名称的方法,这是混淆方法的核心,你可以从安全的角度理解混淆的必要性。
为什么要混淆视听?
- 减小应用程序的大小,方便用户下载和安装。
- 保护知识产权,防止恶意反编译,损坏代码,复刻逻辑攻击。
- 防止不必要的伪造,有效杜绝应用信息被泄漏。
- 防止应用重要信息被泄露,比如api,请求地址等。
如何混淆
-
资源收缩仅在与代码收缩结合使用时才有效
-
build.gradle
将文件中 的shrinkResources
属性 设置为true
android { ... buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
-
在开始删除资源之前,您可能需要修改文件以保留动态创建或调用的类或方法
proguard-rules.pro