| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 面试必知点——apk瘦身/包优化 -> 正文阅读 |
|
[移动开发]Android 面试必知点——apk瘦身/包优化 |
工程分析如果真机运行过后,我们可以通过 Android Studio Build -> Analyze APK - > 选择 app/build/output 下的apk文件 debug 或者 relase 两个文件夹下的 apk文件。下图为demo工程的 分析结构图 (忽略raw 文件为啥那么大 -,-) 由上图可知一个APK主要包含如下文件夹(当然有些文件可能我这个Demo APK没有包含):
文件
瘦身优化Res 目录优化
Andorid PNG图片压缩以PNG资源为例,PNG 图片相对于 JPEG 图片来说,它是一种无损的图像存储格式,同时多了一条透明度A通道,所以一般情况下,PNG 图片要比 JPEG 图片要大,如何缩小图片所占内存大概分为三种办法(个人推荐度依次递减):
说完我上述的资源优化后(个人观点),我们简单的分析一下 AAPT2 打包资源的源码思路。(6.0源码)
其实看到源码中部分的判断 已经知道AAPT2 使用的压缩为 Indexed_color 方式,通过判断将 PNG图片分为四种压缩方式
使用调色板模式,最终图片的大小就是 一个像素 1 字节 + 调色板中一个颜色 4 字节
灰度模式,这种是最节省的模式,一个像素 1 字节
灰度模式,同时存在透明通道,一个像素 2 字节
RGB 模式,删除了透明通道,一个像素 3 字节
ARGB 模式,一个像素 4 字节(没有压缩) 在不损坏图片画质的情况下进行压缩 也算是比较保险的压缩方式,当然也可以使用 第三方的一些压缩方式: pngcrush、pngquant(相对推荐 压缩后的提及其他人测试会更小一点)、tinypng 这里暂时不展开一一说明了。工具用就完了… Assests 目录优化
libs 目录优化Android系统现在支持很多种CPU架构(如mips、arm、x86等),市面上主流机型都是arm架构。所以可以有选择地保留某些架构的so,从而降低lib文件夹的大小。一般只保留armeabi或者armeabi-v7a即可。操作也是比较简单,只需要在根目录的build.gradle下配置:
resources.arsc文件压缩个人感觉这里的优化文件名称压缩 收效甚微。部分数据看下图 如果应用不需要支持多种语言的情况下(只保留zh 国内的文字),我们只需要在build.gralde里面进行如下配置即可完成无用语言资源的删除,这样在打包的时候就会排除私有项目、android系统库和第三方库中非中文的资源文件了,效果还是比较显著的。
dex压缩Dalvik是Android平台运行时的环境,但是Dalvik虚拟不支持直接执行Java的字节码,所以会对编译生成的 .class 文件进行翻译、重构、解释、压缩等处理,这个处理过程是由 dx 进行处理,处理完成后生成的产物会以 .dex 结尾,称为Dex文件。如果单个Dalvik Excutable(DEX)字节码文件内的方法数不可以超过65536个,所以需要DEX分包配置来避免这个限制,使应用能够构建并读取DEX文件。 这里就推荐 官方提供的优化方案:Proguard代码混淆 在build.gradle里面设置minifyEnabled为ture,同时在proguardFiles指向proguard的规则文件即可(如下代码)。
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:00:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |