AndResGuard 微信资源文件混淆
2020-02-29 本文已影响0人
周末不加班
资源文件的混淆方案目前由美团和微信两种,前者是通过修改AAPT在处理资源文件相关的源码达到资源文件名的替换;后者是通过直接修改resources.arsc文件达到资源文件名的混淆。相比之下,微信的方案更优,而且微信已经将这个方案开源出来 AndResGuard
配置
- Project build.gradle
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
}
}
- Module build.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
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"
}
/**
* 可选: 如果不设置则会默认覆盖assemble输出的apk
**/
// finalApkBackupPath = "${project.rootDir}/final.apk"
/**
* 可选: 指定v1签名时生成jar文件的摘要算法
* 默认值为“SHA-1”
**/
// digestalg = "SHA-256"
}
注意:
-
若项目中使用到 Umeng sdk、google-services、getui(个推)、JPush(极光推送)、GrowingIO、Firebase(谷歌统计等)、Huawei push 需要将上述资源加入whiteList白名单,具体配置参考官网 white_list.md
-
配置7Zip
在设置sevenzip时, 只需设置artifact或path. 支持同时设置,总以path的值为优先 -
对于发布于Google Play的APP,建议不要使用7Zip压缩,因为这个会导致Google Play的优化Patch算法失效 use7zip=false 设置为false
-
如果不是对APK size有极致的需求,不要把resources.arsc添加进compressFilePattern
打包
- 如果是签名包还需要加上下面配置:
signingConfig signingConfigs.release (release 引用的是signingConfigs中的)否则在打签名包时报错 can't the get signConfig for release build
android {
signingConfigs {
release {
storeFile file('E:\\workspace\\AndroidStudio\\KEY\\dajiakey.jks')
storePassword 'password'
keyAlias = 'key0'
keyPassword 'password'
}
}
......
buildTypes {
release {
minifyEnabled true
signingConfig signingConfigs.release //增加签名
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
- SyncNow同步完成后,右侧Gradle会出现三条执行脚本,直接点击需要发布Modle下的resguardRelease(不要点击Project下的命令,因为可能有多个Modle)
或者在Terminal中执行 gradlew resguardRelease 打包命令
-
出现
BUILD SUCCESSFUL in 10s
说明打包成功,并会在AndResGuard Done!
后显示安装包地址,默认在build\outputs\apk\release\AndResGuard_test-release
release_7zip_aligned_signed.apk :已签名 发布的包
release_7zip_aligned_unsigned.apk :未签名
release_7zip_unsigned.apk :未签名
release_unsigned.apk :未签名