Android资源混淆 -》AndResGuard的使用方式

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提示:

1657180738267.jpg

在 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语言的。毕竟有些插件能在开发上帮助我们节省很多时间。)

你可能感兴趣的:(Android资源混淆 -》AndResGuard的使用方式)