AndroidResGuard分析

AndroidResGuard使用记录


使用

https://github.com/shwenzhang/AndResGuard

  1. 项目的根 build.gradle 文件下加入下面的插件依赖:
    classpath ‘com.tencent.mm:AndResGuard-gradle-plugin:1.2.18’

  2. 项目 module 下的 build.gradle 文件下引入其插件:
    apply plugin: ‘AndResGuard’

  3. 加入 AndroidResGuard 的配置项(同上目录,直接添加)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = true
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = false
    // 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
    fixedResName = "arg"
    // 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
    mergeDuplicatedRes = true
    whiteList = [
    // for your icon
    "R.drawable.icon",
    // for fabric
    "R.string.com.crashlytics.*",
    // for google-services
    "R.string.google_app_id",
    "R.string.gcm_defaultSenderId",
    "R.string.default_web_client_id",
    "R.string.ga_trackingId",
    "R.string.firebase_database_url",
    "R.string.google_api_key",
    "R.string.google_crash_reporting_api_key"
    ]
    compressFilePattern = [
    "*.png",
    "*.jpg",
    "*.jpeg",
    "*.gif",
    ]
    sevenzip {
    artifact = 'com.tencent.mm:SevenZip:1.2.17'
    //path = "/usr/local/bin/7za"
    }
    }
  4. 点击右边的项目 Gradle/Tasks/andresguard/resguardRelease 即可生成资源混淆过的 APK

总结

  1. 主要是通过 短路径的优化,以达到 减少 resources.arsc、metadata 签名文件以及 ZIP 文件大小 的效果

  2. 使用了 7-Zip 的大字典优化,APK 的 整体压缩率可以提升 3% 左右,并且,它还支持针对 resources.arsc、PNG、JPG 以及 GIF 等文件进行强制压缩(在编译过程中,这些文件默认不会被压缩)