Android项目集成AndResGuard资源混淆两种方式

Android 项目开发完成后咱们为了防止别人反编译咱们的apk安装包,咱们须要对咱们开发完的安装包作一些处理,好比代码混淆、加壳、资源混淆、资源加密等,本文要介绍的是微信官方推荐的AndResGuard资源混淆方法。javascript

一、AndResGuard官方介绍html

AndResGuard是一个帮助你缩小APK大小的工具,他的原理相似Java Proguard,可是只针对资源。他会将本来冗长的资源路径变短,例如将res/drawable/wechat变为r/d/aAndResGuard不涉及编译过程,只需输入一个apk(不管签名与否,debug版,release版都可,在处理过程当中会直接将原签名删除),可获得一个实现资源混淆后的apk(若在配置文件中输入签名信息,可自动重签名并对齐,获得可直接发布的apk)以及对应资源ID的mapping文件。java

项目地址:https://github.com/shwenzhang/AndResGuardandroid

二、AndResGuard集成方式git

第一种 Gradle集成github

①、项目Project/build.gradle文件中增长如下内容windows

buildscript {    
    repositories {        
        jcenter()
    }    
    dependencies {        
        classpath 'com.android.tools.build:gradle:2.3.3'        
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.3'    
    }
}

②、Module/build.gradle文件中增长如下内容微信

apply plugin: 'com.android.application'
apply plugin: 'AndResGuard'
android {
    ...
}
dependencies {
    ...
}
andResGuard { 
    // mappingFile = file("./resource_mapping.txt") 
    mappingFile = null 
    use7zip = true 
    useSign = true 
    // 打开这个开关,会keep住全部资源的原始路径,只混淆资源的名字 
    keepRoot = false 
    whiteList = [ 
           // for your icon 
           "R.drawable.icon"
    ] 
    compressFilePattern = [
           "*.png", 
           "*.jpg", 
           "*.jpeg", 
           "resources.arsc" 
    ] 
    sevenzip { 
           artifact = 'com.tencent.mm:SevenZip:1.2.3' 
           //path = "/usr/local/bin/7za"  --- Linux
           //path = "D:\7za\7za.exe" --- Windows
    }
}
参照官方文档有几个问题说明下
mappingFile用于增量更新,保持本次混淆与上次混淆结果一致;
uss7zip为true时,useSign必须为true;
useSign为true时,须要配置signConfig;
whiteList添加在代码内部须要动态获取的资源id;
sevenzip可以使用artifacr或path,若是两种都设置以path路径为准,path指本地安装的7za(7zip命令行工具)下载路径
 

建议下载图中红色框中的便可,固然你也能够下载其余版本,注意的是在win下7Z的安装后若是没有7za.exe的话,能够把7z.exe复制一份改为7za.exe,并配置环境变量 

app

同步后,咱们gradle的task任务列表里就会出现混淆任务工具


双击上图中的选中任务,混淆就会开始,和普通的buidApk任务同样,完成后会弹个框做为提示。混淆后的apk生成在build/output/apk/AndResGuard_*目录中,官方说法默认会生成4种apk,咱们选择签名、压缩、对齐后的apk便可,后缀名是*_signed_7zip_aligned.apk,但我用该方式并未出现4种apk,只出现3种,没有7zip的包

第二种下载jar包 指令集成
①、下载AndResGuard,下载地址
②、下载完成后,项目结果以下
打开tool_output文件夹内容
修改配置文件,此处由于咱们是用的windows系统开发的,故选择bat文件
此处咱们首选要修改jdk的目录,其次修改sdk目录,咱们看到下面有一个input.apk参数,这个就是须要混淆的apk原文件,outapk为输出文件目录

增长set sevenzippath=C:\Program Files\7z1700-extra\7za.exe

执行指令为 "%jdkpath%" -jar AndResGuard-cli-1.2.3.jar input.apk -config config.xml -out outapk -signature "%storepath%" "%storepass%" "%keypass%" "%alias%" -7zip "%sevenzippath%" -zipalign "%zipalign%"

修改完成以后咱们双击build_apk.bat批处理文件运行


打开生成outapk文件夹,咱们看到5种模式的apk安装文件,input_signed_7zip_aligned.apk就是咱们最后须要apk文件

咱们将apk文件后缀名改成zip打开

能够看到r文件夹中的内容都混淆了,这种方式实现了7zip压缩,apk安装包进一步减小!