github原项目地址: AndResGuard
一、简单使用
1.在Project gradle里配置 :
dependencies{
classpath'com.android.tools.build:gradle:4.0.0'
classpath"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath"org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
classpath"org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
classpath'com.meituan.android.walle:plugin:1.1.7'
//资源混淆
classpath'com.tencent.mm:AndResGuard-gradle-plugin:1.2.21'
}
2.在app gradle里配置:
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.21'
//path = "/usr/local/bin/7za"
}
/**
* 可选: 如果不设置则会默认覆盖assemble输出的apk
**/
// finalApkBackupPath = "${project.rootDir}/final.apk"
/**
* 可选: 指定v1签名时生成jar文件的摘要算法
* 默认值为“SHA-1”
**/
// digestalg = "SHA-256"
}
3.打一个包:
在Android Terminal 中执行:
//Windows
gradlew.bat resguardRelease
//OS X 或者 Linux./
gradlew reguardRelease
4.打多个包(我这里用的是walle):
首页在app 的gradle中,与android 平级添加如下代码,意思说先资源混淆在用walle打包
//适配资源混淆和well打包
afterEvaluate{
tasks.getByName('assembleReleaseChannels'){
dependsOn(resguardRelease)
}
}
二、添加白名单
1.先度娘下:
AndResGuard 给的白名单
网友 给的白名单
如果有你需要的就加上(所有使用getIdentifier访问的资源都需要加入白名单)
2.我寻找第三方库中使用getIdentifier的方式
2.1.先看看自己用到的第三方库,哪些是有可能用getIdentifier的,然后打好包自测试用到的功能,如果崩溃了会有bug提示:
在 Replace in Path 中搜索查找到引用类的位置,是属于哪个引用库,然后查看那些用到了getIdentifier,我这里发现库手搞了一个封装,我就把所有和包名相关的库都看了一遍,是否有res,如果就全部加入白名单
image.png
在添加白名单的时候记得一定要加入库的包名
image.png
解释:com.sobot.chat 包名下,所有的R.layout 里面以sobot开头的名字都加入白名单(一定要加包名,如果不加会崩溃,所以我感觉其它的比如友盟啥的应该也要加包名,但给的文档中没有加)
2.2 全局搜索getIdentifier相关
image.png
把所有用到的加入白名单(但我这里没加,也没啥问题)
1657182677859.jpg
注释:我至今为止都不知道如何获取某一个库的白名单,到底是如何操作...如果有大牛晓得了希望不吝赐教,万分感谢
参考文章:
1.AndResGuard简单使用教程 - 简书 (比较简单,入门)
2.android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)_惺惺作态的博客-CSDN博客 (well+ AndresGuard)
3.安卓新一代多渠道打包工具Walle - 简书 (我一直收藏的,懒得记)
4.android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)_惺惺作态的博客-CSDN博客(这老铁说的对:gradle是使用Groovy语言的,作为一名Android工程师,还是很有必要去了解一下Groovy语言的。毕竟有些插件能在开发上帮助我们节省很多时间。)
网友评论