1、简介
AndResGuard是一个帮助你缩小APK大小的工具,他的原理类似Java
Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a。
AndResGuard不涉及编译过程,只需输入一个apk(无论签名与否,debug版,release版均可,在处理过程中会直接将原签名删除),可得到一个实现资源混淆后的apk(若在配置文件中输入签名信息,可自动重签名并对齐,得到可直接发布的apk)以及对应资源ID的mapping文件。
可以减小apk包体大小。
开源地址 https://github.com/shwenzhang/AndResGuard
2、接入
a、在项目更目录下build.gradle文件中引入
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20'
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20'
}
}
b、然后在app目录下新建and-res-guard.gradle文件,在build.gradle下配置如下
apply from:'and-res-guard.gradle'
c、完成以上配置,基本上已配置完毕
and-res-guard.gradle文件内容如下
apply plugin: 'AndResGuard'
andResGuard {
// mappingFile = file("./resource_mapping.txt")
mappingFile = null
use7zip = true
useSign = true
// 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
keepRoot = false
// 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
fixedResName = "arg"
// 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
mergeDuplicatedRes = true
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
//添加白名单,保留不被混淆的资源文件
whiteList = [
//app
"R.drawable.ic_launcher",
"R.drawable.ic_launcher_*",
//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",
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.10'
//path = "/usr/local/bin/7za"
}
}
3、注意事项
所有使用getIdentifier访问的资源都需要加入白名单。
友盟、极光、sharesdk、个推等第三方sdk资源文件需要加入白名单。
glide加载资源文图片需要加入白名单或者处理下
遍历查询所有通过getIdentifier访问的资源,然后统统加入白名单
4、打包apk
可使用命令 ./gradlew resguard[BuildType | Flavor] 或者直接执行下列task任务
image.png5、apk包
我们可得到以下output路径得到以下7个有用的文件说明如下:
image.png6、参考地址
开源地址https://github.com/shwenzhang/AndResGuard
AndResGuard和walle多渠道打包
https://blog.csdn.net/cto_1649900265/article/details/107456522
网友评论