合肥网站开发建设,网站建设与维护里面的个人简历,html动态页面,网站系统平台建设关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、人工智能等#xff0c;希望大家多多支持。 目录 一、导读二、概览2.1 apk组成 三、优化方向3.1 源代码3.1.1 代码混… 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、人工智能等希望大家多多支持。 目录 一、导读二、概览2.1 apk组成 三、优化方向3.1 源代码3.1.1 代码混淆3.1.2 移除无用代码3.1.3 三方库的处理 3.2 资源文件3.2.1 方式一 Inspect Code3.2.2 方式二3.2.3 方式三 腾讯的 Matrix 3.2.4 资源混淆3.3 so瘦身 四、 推荐阅读 一、导读
我们继续总结学习Android 知识温故知新。
lint检查代码
二、概览
APK瘦身优化的优先级相对来说是比较低的因为优化后也并不能明显的看到有什么好处这一块主要影响转换率应用越小 可能用户下载的意愿就越高另外在进行预装时也有大小的要求。
一般来说我们可以通过下面几种方式来进行优化
资源文件压缩动态下载。so文件动态so不同的架构支持v7a、v8a。源代码用代码分析工具去除不再使用的代码插件化。assets动态下载压缩。proguard 混淆代码
2.1 apk组成
直接将apk 拖到android studio窗口或者我们把apk解压后能看到下面这些文件
文件描述classes(有多个).dexJava Class被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式lib存放so文件,可能有多种架构assets程序资源使用AssetManager来调用res资源文件如drawable、layoutAndroidManifestAndroidManifestresources.arsc编译后的二进制资源文件META-INF包含了APK中所有文件的签名摘要等信息
三、优化方向
我们的优化方案就对应这apk的组成
3.1 源代码
3.1.1 代码混淆
3.1.2 移除无用代码 studio 自带的工具 使用CPD/PMD工具 PMD是一个源代码分析器。它发现常见的编程缺陷如未使用的变量、空的catch块、不必要的对象创建等等. PMD 网站 PMD GUI网站 使用切面编程的方式进行统计AOP确认无用代码。
3.1.3 三方库的处理
统一基础库 统一三方调用的库等等
原则是同样的功能不要出现多套代码。
3.2 资源文件 删除冗余资源 资源混淆 资源压缩 jpg采取压缩算法不支持透明通道png无损压缩支持透明度webp无损压缩图像格式与JPG相比可大幅减少文件体积
虽然png是无损压缩。但是也有一些网站可以对png图片进行有损压缩比如tinypng网站
资源在线化动态下载 对于一些比较大又不是很及时要用的图片可以考虑从服务端下载。
可以使用下面三种方式找出无用的资源
3.2.1 方式一 Inspect Code
通过Android Studio 菜单栏 → code → Inspect Code在弹出的框框中选择 configure 在右下键在弹出的框框中输入 unused resources在左上角勾选对应的选项点击开始
如下图
这里的选项实在是很多我们只找出未使用的资源文件最好先将其他的选择全取消然后在勾选 unused resources
这时候就开始分析项目了我们耐心等待一会
3.2.2 方式二
菜单栏 → Refactor → Remove Unused Resources
这样直接就开始删了当然要检查下不要误删。
3.2.3 方式三 腾讯的 Matrix
Matrix是微信终端自研和正在使用的一套APMApplication 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-PATHmatrix 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.txt3.2.4 资源混淆
3.3 so瘦身
动态so; 指定架构支持如v7a、v8a;
另外还可以只保留一个cpu架构别的cpu架构自动适配程序运行过程中通过判断cpu架构选择合适的so
if(v7a) {xxx
} else {xxx
}
还有就是插件化这个是一个专题我们在另外的文章里面讲。
四、 推荐阅读
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏