美文网首页实用
Android资源混淆 -》AndResGuard的使用方式

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

作者: 就拆你家房子 | 来源:发表于2022-07-05 16:22 被阅读0次

    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的使用方式

        本文链接:https://www.haomeiwen.com/subject/jhzcbrtx.html