简介
Matrix-ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。
使用
运行前准备工作
- 从官方地址下载ApkChecker.jar (本次使用matrix-apk-canary-2.0.2.jar)
- 准备配置文件config.json ,下面是配置文件(与官方文档示例有区别,具体配置根据自己项目需求)
{
"--apk":"C:/Users/John/Desktop/debug/AiGuPiao-debug.apk",
"--output":"C:/Users/John/Desktop/debug/apk-checker-result",
"--format":"mm.html,mm.json",
"--formatConfig":
[
{
"name":"-countMethod",
"group":
[
{
"name":"Android System",
"package":"android"
},
{
"name":"java system",
"package":"java"
},
{
"name":"com.tencent.test.$",
"package":"com.tencent.test.$"
}
]
}
],
"options": [
{
"name":"-manifest"
},
{
"name":"-fileSize",
"--min":"10",
"--order":"desc",
"--suffix":"png, jpg, jpeg, gif, arsc"
},
{
"name":"-countMethod",
"--group":"package"
},
{
"name":"-checkResProguard"
},
{
"name":"-findNonAlphaPng",
"--min":"10"
},
{
"name":"-checkMultiLibrary"
},
{
"name":"-uncompressedFile",
"--suffix":"png, jpg, jpeg, gif, arsc"
},
{
"name":"-countR"
},
{
"name":"-duplicatedFile"
},
{
"name":"-unusedResources",
"--rTxt":"D:/AiGuPiao1/AiGuPiao/build/intermediates/runtime_symbol_list/debug/R.txt",
"--ignoreResources"
:["R.raw.*",
"R.style.*",
"R.attr.*",
"R.id.*",
"R.string.ignore_*"
]
},
{
"name":"-unusedAssets",
"--ignoreAssets":["*.so" ]
}
]
}
特别说明 :
- –apk 输入apk文件路径(默认文件名以apk结尾即可)
- –output 输出结果文件路径(不含后缀,会根据format决定输出文件的后缀)
- –format 结果文件的输出格式(例如 html、json等)
- –formatConfig 对结果文件输出格式的一些配置项(json数组格式)
- –rTxt R.txt文件的路径
官方文档参数很多,这里给出部分参数,具体参考请移步到官方文档
- 运行命令
运行成功:
结果文件分析
按文件大小排序列出apk中包含的文件
列出超过一定大小的文件,可按文件后缀过滤,并且按文件大小排序
读取manifest的信息
从AndroidManifest.xml文件中读取apk的全局信息,如packageName、versionCode等。
检查是否经过了资源混淆
检查apk是否经过了资源混淆,推荐使用资源混淆来进一步减小apk的大小 (这里没有经过资源混淆,因为混淆过后,无法找出项目中相关文件)
搜索不含alpha通道的png文件
对于不含alpha通道的png文件,可以转成jpg格式来减少文件的大小
搜索未经压缩的文件类型
某个文件类型的所有文件都没有经过压缩,可以考虑是否需要压缩
搜索冗余的文件
对于两个内容完全相同的文件,应该去冗余
搜索apk中包含的无用资源
apk中未经使用到的资源,应该予以删除
搜索apk中包含的无用assets文件
apk中未经使用的assets文件,应该予以删除
统计apk中包含的R类以及R类中的field count
编译之后,代码中对资源的引用都会优化成int常量,除了R.styleable之外,其他的R类其实都可以删除
统计方法数
统计dex包含的方法数,并支持将输出结果按照类名(class)或者包名(package)来分组
超过指定限制图片
一般对于图片大小超过1M的,可以考虑把png 转成 webP 格式图片, webP格式图片在相同质量情况下,体积更小。
如果能帮助到大家,请点赞!!!
|