AndResGuard个人感觉就是对资源文件路径或者文件名进行了重命名,稍微增加了反编译人员查看资源的直观性,稍微减小了apk的大小;
1):pro下的build.gradle下添加:classpath'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20'
2):咱们app下新建一个文件随你命名:xxx.grdle
并写入:
applyplugin:'AndResGuard'
andResGuard{
// keep住不混淆的资源原有的物理路径 mappingFile = file("./resource_mapping.txt");
//如果混淆全部的话,设置mappingFile = null
mappingFile =null
// 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
keepRoot =false
// 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
fixedResName ="arg"
// 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
mergeDuplicatedRes =true
// 启用7zip压缩。当你使用v2签名的时候,7zip压缩是无法生效的。
// use7zip 为true时,useSign必须为true
// 对于发布于 Google Play 的 APP,建议不要使用 7Zip 压缩,因为这个会导致 Google Play 的优化 Patch 算法失效
use7zip =true
// 启用签名,(需要配置signConfig)
useSign =true
// 保留不被混淆的资源文件,只作用于文件名,不会对路径有影响,支持通配符:? * +
// 【+】代表1个或多个,【?】代表0个或1个,【*】代表0个或多个。如 "R.id.*",//任意id
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",
//如果不是对APK size有极致的需求,请不要把resources.arsc添加进compressFilePattern
//"resources.arsc"
]
//配置7Zip,只需设置 artifact 或 path;支持同时设置,但此时以 path 的值为优先
sevenzip{
artifact ='com.tencent.mm:SevenZip:1.2.7'
//path = "/usr/local/bin/7za" //path指本地安装的7za(7zip命令行工具)
}
/**
* 可选: 如果不设置则会默认覆盖assemble输出的apk
**/
finalApkBackupPath ="${project.rootDir}/final.apk"
/**
* 可选: 指定v1签名时生成jar文件的摘要算法 默认值为“SHA-1”
**/
// digestalg = "SHA-256"
}
其中whiteList 为白名单
白名单直接参考官方,一般用goolge
3):app下的build.gradle下申请该文件
4)配置签名并生成apk
后边打包需要签名需要在buildTypes配置:signingConfig signingConfigs.release
最后:
5)apktool进行反编译和通过修改apk后缀名查看资源文件:
1、修改apk文件,将.apk修改为.zip
会发现资源文件变为不直观的名称了,查看得靠运气去点找自己需要的而已
2、通过apktool工具进行反编译:
资源名字都作了统一的处理,也不直观了。