关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。
我们继续总结学习Android 知识,温故知新。
lint检查代码
APK瘦身优化的优先级相对来说是比较低的,因为优化后也并不能明显的看到有什么好处,这一块主要影响转换率,应用越小,
可能用户下载的意愿就越高,另外在进行预装时,也有大小的要求。
一般来说我们可以通过下面几种方式来进行优化:
直接将apk 拖到android studio窗口,或者我们把apk解压后,能看到下面这些文件
文件 | 描述 |
---|---|
classes(有多个).dex | Java Class,被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式 |
lib | 存放so文件,可能有多种架构 |
assets | 程序资源,使用AssetManager来调用 |
res | 资源文件,如:drawable、layout |
AndroidManifest | AndroidManifest |
resources.arsc | 编译后的二进制资源文件 |
META-INF | 包含了APK中所有文件的签名摘要等信息 |
我们的优化方案,就对应这apk的组成
使用CPD/PMD工具
PMD是一个源代码分析器。它发现常见的编程缺陷,如未使用的变量、空的catch块、不必要的对象创建,等等.
PMD 网站
PMD GUI网站:
使用切面编程的方式进行统计(AOP),确认无用代码。
统一基础库
统一三方调用的库等等
原则是同样的功能,不要出现多套代码。
删除冗余资源
资源混淆
资源压缩
虽然png是无损压缩。但是也有一些网站可以对png图片进行有损压缩,比如tinypng网站
可以使用下面三种方式找出无用的资源
这里的选项实在是很多,我们只找出未使用的资源文件,最好先将其他的选择全取消,然后在勾选 unused resources
菜单栏 → Refactor → Remove Unused Resources
这样直接就开始删了,当然要检查下,不要误删。
Matrix是微信终端自研和正在使用的一套APM(Application Performance Management)系统。
Matrix-ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,
并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。Matrix-ApkChecker以一个jar包的形式提供使用,
通过命令行执行 java -jar ApkChecker.jar 即可运行。
也可以配置一下
java -jar matrix-apk-canary-2.1.0.jar --config CONFIG-FILE-PATH
matrix git 搜索APK Checker,这里有个下载链接,点击下载jar包。
Matrix apkchecker 文档
CONFIG.json文件,也可以之间用官网的,最终会生成两个文件,之间查看即可
{
"--apk":"E:\\release.apk",
"--mappingTxt":"E:\\mapping.txt",
"--output":"E:\\",
"--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":"E:\\R.txt",
"--ignoreResources"
:["R.raw.*",
"R.style.*",
"R.attr.*",
"R.id.*",
"R.string.ignore_*",
"R.dimen.*",
"R.string.*",
"R.color.*"
]
},
{
"name":"-unusedAssets",
"--ignoreAssets":["*.so" ]
}
]
}
通过这种方式,我们回得到一个html分析的结果表格,但是我们看到的都是混淆过到资源文件,这时 可以使用 aapt2 来输出apk资源表的内容(resources.arsc文件):
aapt2 dump resources xxx.apk > logx.txt
动态so;
指定架构支持(如v7a、v8a);
另外还可以只保留一个cpu架构,别的cpu架构自动适配,程序运行过程中,通过判断cpu架构选择合适的so
if(v7a) {
xxx
} else {
xxx
}
还有就是插件化,这个是一个专题,我们在另外的文章里面讲。
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏