https://github.com/shwenzhang/AndResGuard
效果:
反编译资源文件效果对比:
resource_mapping:
步骤:
1、 项目根目录下build.gradle中,添加插件的依赖
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
2、app模块中build.gradle中,添加配置
apply plugin: 'AndResGuard'
//...... 其他部分
andResGuard {
mappingFile = null
use7zip = true
useSign = true
keepRoot = false
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
whiteList = [
// your icon
"R.drawable.icon",
// for fabric
"R.string.com.crashlytics.*",
// for umeng update
"R.string.tb_*",
"R.layout.tb_*",
"R.drawable.tb_*",
"R.drawable.u1*",
"R.drawable.u2*",
"R.color.tb_*",
// umeng share for sina
"R.drawable.sina*",
// for google-services.json
"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"
}
}
其中whiteList(白名单)中指定不需要进行混淆的资源路径规则,主要是一些第三方SDK,因为有些SDK的代码中引用到对应的资源文件,如果对其进行混淆,会导致找不到对应资源文件,出现crash,所以不能对其资源文件进行混淆。更多的白名单可以查看:
AndResGuard白名单
3、 在app的gradle的tasks中,多了一个叫做andresguard的task,根据需要双击执行