为了活动小家电-应用程序混淆(二)

75 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

为了活动小家电,接着上篇搞!

什么是混淆,为什么?

首先,它与应用程序的容量有关。用户认为有吸引力的因素之一是应用程序的大小。官方文档介绍了代码和资源减少/混淆/优化的方法,以使应用程序的大小尽可能小。

每种方法可以总结如下。

  • Shrink App (Shrink Code, Shrink Resources):通过删除未使用的代码和资源来减小 DEX 文件大小。
  • 混淆:缩短应用程序类、方法和字段的名称,减少 DEX 文件大小。
  • 优化:通过检查代码和改进不必要的语法来减少 DEX 文件的大小。

其中,我本来很好奇,那为什么要混淆呢?回到这个问题,从安全角度和应用程序容量的角度来看,混淆是必不可少的

混淆的最初目的是通过缩短应用程序类、方法和字段的名称来减小应用程序大小。DEX 文件索引许多类和成员。它不会删除代码本身,但通过缩短类和成员的长名称,您可以减小应用程序的大小。

如果你注意任意缩短和替换名称的方法,这是混淆方法的核心,你可以从安全的角度理解混淆的必要性。

为什么要混淆视听?

  1. 减小应用程序的大小,方便用户下载和安装。
  2. 保护知识产权,防止恶意反编译,损坏代码,复刻逻辑攻击。
  3. 防止不必要的伪造,有效杜绝应用信息被泄漏。
  4. 防止应用重要信息被泄露,比如api,请求地址等。

如何混淆

  • 资源收缩仅在与代码收缩结合使用时才有效

  • build.gradle将文件中 的shrinkResources 属性 设置为true

    android {
        ...
        buildTypes {
            release {
                shrinkResources true 
                minifyEnabled true 
                proguardFiles
                    getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
            }
        }
    }
    
  • 在开始删除资源之前,您可能需要修改文件以保留动态创建或调用的类或方法 proguard-rules.pro