最近研究了下反编译 ,看到人家apk的资源文件名字都是类似于abcd这样的字母,很好奇是怎么实现的,所以自己上网查了下,利用微信资源混淆工具可以实现,废话不多说,直接上代码.
1、工程project 的build.gradle下添加插件依赖
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
//混合资源打包
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.14'
}
}
2、app的build添加插件依赖
apply plugin: 'AndResGuard'
andResGuard {
// mappingFile = file("./resource_mapping.txt")
mappingFile = null
// 当你使用v2签名的时候,7zip压缩是无法生效的。
use7zip = true
useSign = true
// 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
keepRoot = false
//白名单配置 UM必须配置白名单 否则会提示找不到资源文件
whiteList = [
//for your icon
"R.drawable.icon",
//for fabric
"R.string.com.crashlytics.*",
//for umeng update
"R.string.umeng*",
"R.string.UM*",
"R.string.tb_*",
"R.layout.umeng*",
"R.layout.socialize_share_menu_item",
"R.layout.tb_*",
"R.drawable.umeng*",
"R.drawable.tb_*",
"R.anim.umeng*",
"R.color.umeng*",
"R.color.tb_*",
"R.style.*UM*",
"R.style.umeng*",
"R.id.umeng*",
"R.id.socialize_image_view",
"R.id.socialize_text_view",
//umeng share for sina
"R.drawable.sina*"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.3'
//path = "/usr/local/bin/7za"
}
}
3、找到andresguard插件目录
4、由于没有配置签名文件 只能debug
下面展示的就是混淆后的包 app-release_signed_7zip_aligned.apk 这个是最小的 一般上线的这个就可以了
5、然后反编译看一下效果
debug下的layout文件
混淆后的
6、apk对比效果
这只是建立了一个空的工程就小了这些 可想工程大的时候资源文件的压缩差不多能到2M 甚至更多
具体源码与使用方法详细在github中: