Android 代码和资源混淆

一:代码混淆

  方式1:再app的build,gradle中配置  minifyEnabled等于true, proguardFiles 指定混淆规则文件proguard-rules.pro

  优点:ProGuard直接支持,无需关注混淆规则和混淆后的名称

  缺点:对于想要自定义混淆后名称的方式不适用

  方式二:使用混淆字典

  app目录下先创建dic.txt文件,配置混淆的字符,然后在proguard-rules.pro文件里配置如下即可

-obfuscationdictionary dic.txt # 指定字段、方法名的混淆字典
-classobfuscationdictionary dic.txt # 指定类名混淆字典
-packageobfuscationdictionary dic.txt # 指定包名混淆字典

优点:可自定义混淆后名称,实现两款应用不同的混淆规则
缺点:需要配置混淆字典
相关文章:https://blog.si-yee.com/2019/04/12/Android%E6%B7%B7%E6%B7%86-Proguard-%E8%AF%A6%E8%A7%A3/

 

二:资源混淆

方式一:使用微信开源的AndResGuard

开源地址:https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md

使用方式:

1 在project的gradle中添加依赖:

dependencies {
    classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.19'
}
2 在app的gradle中添加配置:
andResGuard {
//    mappingFile = rootProject.file("app/resource_mapping.txt")
    mappingFile = null
    use7zip = false
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = true
    // 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
//    fixedResName = "arg"
    // 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
    mergeDuplicatedRes = false
    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",
            "R.mipmap.icon_evalute_0",
            "R.drawable.icon_friend_user_label_level_10",
            "R.dimen.status_bar_height",
            "R.layout.chat_item_girl_ask_qa_holder",
            "R.id.*",

    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.webp",
            "*.gif",
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.19'
        //path = "/usr/local/bin/7za"
    }

    /**
     * 可选: 如果不设置则会默认覆盖assemble输出的apk
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * 可选: 指定v1签名时生成jar文件的摘要算法
     * 默认值为“SHA-1”
     **/
    // digestalg = "SHA-256"
}

配置好之后在as右侧的gradle选项中会出现andresguard的task,选择需要打包的apk类型进行打包,最后会再app/build/outputs/apk/release/andResGuard 下生成一个已混淆的apk包。

关于whiteList白名单的说明:
所有使用getIdentifier访问的资源都需要加入白名单,如果布局中使用了androidx.constraintlayout.widget.Group,也需要将app:constraint_referenced_ids配置的id加入白名单

相关文章介绍:

https://blog.csdn.net/qq_23992393/article/details/98070524?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-1-98070524.nonecase&utm_term=%E4%BB%B6%20%E5%9C%A8%E8%B5%84%E6%BA%90%E6%B7%B7%E6%B7%86%E9%85%8D%E7%BD%AE&spm=1000.2123.3001.4430

https://blog.si-yee.com/2019/04/12/Android%E6%B7%B7%E6%B7%86-Proguard-%E8%AF%A6%E8%A7%A3/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值