Android 使用AndResGuard进行资源文件名混淆

前言

在Android中,apk文件其实也只是一个压缩文件而已,对它进行改后缀再解压缩,就会得到dex等文件,如图:

通过反编译,我们可以查看到对应的代码,但如果经过代码混淆的话,即使被别人反编译了apk,也只是一堆的abc的命名,可资源不同,直接解压缩apk就可以获得相应的资源文件了,毫无安全性可言,就相当未经过混淆处理的app,被人反编译了代码,直接拿着源代码改改然后重新打包就变成了别人的东西了,在这里介绍一种资源文件名混淆的方法,是由微信开源的。

配置

首先先在根目录下的build.gradle文件中配置依赖,

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        //加入这一句
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.13'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

然后在app模块下的build.gradle文件里面配置,

apply plugin: 'com.android.application'
apply plugin: 'AndResGuard'

android {
   ...
}

dependencies {
   ...
}

andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = true
    useSign = true
    // it will keep the origin path of your resources when it's true
    keepRoot = false

    whiteList = [
            // 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.13'
        //path = "/usr/local/bin/7za"
    }

    /**
     * Optional: if finalApkBackupPath is null, AndResGuard will overwrite final apk
     * to the path which assemble[Task] write to
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * Optional: Specifies the name of the message digest algorithm to user when digesting the entries of JAR file
     * Only works in V1signing, default value is "SHA-1"
     **/
    // digestalg = "SHA-256"
}

使用

配置后先Sync一下。

在Android Studio右侧栏的Gradle中,:app下会出现andresguard的一个目录,直接执行resguardRelease,如图:
这里写图片描述

直接执行命令就可以打包了,里面包括了你自己的代码混淆,签名,还加上了资源文件名的混淆,最终会生成一个目录(位于app/build/outputs/apk/{flavorName}/release/AndResGuard_…),里面就有想要的apk文件,
这里写图片描述
其中后缀是signed的apk就是已签名的。

参考资料:AndResGuard Github官网地址

猜你喜欢

转载自blog.csdn.net/chen_xi_hao/article/details/81297926
今日推荐