android app性能优化_Android性能优化之Apk 瘦身优化
瘦身
- 主要是下载转换率提高
- 头部App都有Lite版本
- 渠道合作产商要求
APK 分析工具
ApkTool 反编译工具
官网:https://ibotpeaches.github.io/ApkTool apktool d students.apk
Analyze apk
Android studio 2.2之后使用 - 查看apk组成大小,各资源占比 - 查看dex文件组成 - 可以进行apk对比
通过Analyze app
分析(打开方式:Android Studio下 ——> Build——> Analyze app
)
classyshark 二进制检查工具
https://github.com/google/android-classyshark 支持多种格式:apk,jar,class,so
等
nimbledroid app 性能指标系统
https://nimbledroid.com/ 可以通过上传apk得知: - 文件大小及排行 - Dex方法数、SDK方法数 - 启动时间、内存等
APK 组成
APK包结构如下:
lib/:
包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips
。大多数情况下我们可以只用一种armeabi-v7a。assets/
:包含应用可以使用AssetManager
对象检索的应用资源。res/:
包含未编译到的资源resources.arsc
,主要有图片资源文件。META-INF/
:包含CERT.SF和 CERT.RSA
签名文件以及MANIFEST.MF
清单文件。resources.arsc:
包含已编译的资源。该文件包含res/values/
文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在resources.arsc
文件中的内容路径 ,例如布局文件和图像。classes.dex
:包含以Dalvik / ART
虚拟机可理解的DEX
文件格式编译的类。AndroidManifest.xml:
包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式。
对lib文件目录进行瘦身
往往进行NDK开发的时候,so文件都比较大,将ndk修改为如下:
ndk{//设置支持的so库架构abiFilters "armeabi-v7a"}
armeabi-v7
主要不支持ARMv5(1998年诞生)和ARMv6(2001年诞生)
.
而许多基于 x86 的设备也可运行 armeabi-v7a 和 armeabi NDK
二进制文件。对于这些设备,主要 ABI 将是 x86,辅助 ABI 是 armeabi-v7a
。
如果适配版本高于4.1版本,可以直接上面这样写,当然,如果armeabi-v7a
不是设备主要ABI,那么会在性能上造成一定的影响。
优化res,assets文件
手动lint检查,手动删除无用资源
在Android Studio中打开“Analyze” 然后选择"Inspect Code..."
,范围选择整个项目,然后点击"OK"。
使用tinypng等图片压缩工具对图片进行压缩。
打开网址,将大图片导入到tinypng
,替换之前的图片资源。
大部分图片使用Webp格式代替。
可以给UI提要求,让他们将图片资源设置为Webp
格式,这样的话图片资源会小很多。当然,如果对图片颜色通道要求不高,可以考虑转jpg
,最好用webp
,因为效果更佳。
尽量不要在项目中使用帧动画
一个帧动画几十张图片,再怎么压缩都还是占很大内存比重的。所以建议是让UI去搞,这里可以参考使用lottie-android
,如果项目中动画效果多的话效果更加明显。
使用gradle开启shrinkResources
每1000行代码在apk当中才会占用5kb的空间
设置shrinkResources true
移除无用资源文件
要通过 ProGuard
启用代码压缩,请在 build.gradle
文件内相应的构建类型中添加 minifyEnabled true
:对无用的代码进行删除
minifyEnabled
这个是用来开启删除无用代码,比如没有引用到的代码shrinkResources
用来开启删除无用资源,也就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容,等等),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的
同样的资源代码测试
- 只有
minififyEnable false
或者minififyEnable false && shrinkResources true
APK大小为1.39M 资源文件和layout都存在且是有内容的
- 只有
minifyEnable true
866K 资源文件和layout都存在且是有内容的
minifyEnable true && shrinkResources true
资源文件在但是没有内容大小都变成67字节,layout
文件内容被清空
减少chasses.dex大小
classes.dex
中包含了所有的java代码,当你打包时,gradle
会将所有模板力的.class文件转换成classes.dex
文件,当然,如果方法数超过64K,将要新增其他文件进行存储。可以通过multidexing
分多个文件,比如这里的classes2.dex
。换句话说,就是减少代码量。我们可以通过以下方法来实现:
- 尽量减少第三方库的引用,这个在上面我们已经做过优化了。
- 避免使用枚举,可能几十个枚举的内存占有量才相当一张图片这样子,优化效果也不会特别明显。当然,如果你是个追求极致的人,我不反对你用静态常量替代枚举。
- 如果你的dex文件太大,检查是否引入了重复功能的第三方库(图片加载库,
glide,picasso,fresco,image_loader
,如果不是你一个人单独开发完成的很容易出现这种情况),尽量做到一个功能点一个库解决。
第三方库处理
- 基础库统一
- 选择更小的库,Android Methods Count
- 仅引入需要的部分代码:Fresco的webp支持
图片压缩
- https://tinyjpg.com/
- TinyPngPlugin
- 选择不同的图片格式
其他
- 用
7zip
代替压缩资源。 - 删除翻译资源,只保留中英文
- 尝试将
andorid support
库彻底踢出你的项目。 - 尝试使用动态加载so库文件,插件化开发。
- 将大资源文件放到服务端,启动后自动下载使用。
Facebook的redex
优化字节码redex
是facebook
发布的一款android字节码的优化工具,需要按照说明文档自行配置一下。
redex input.apk -o output.apk --sign -s <KEYSTORE> -a <KEYALIAS> -p <KEYPASS>
android app性能优化_Android性能优化之Apk 瘦身优化相关推荐
- Android性能优化(5):APK瘦身优化
文章目录 1. APK文件结构 2. APK瘦身优化 2.1 优化dex文件大小 2.1.1 Proguard 2.1.2 AndResGuard 2.2 优化资源文件大小 2.2.1 Android ...
- APK瘦身优化检测工具-Matrix ApkChecker 使用
简介 Matrix-ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,并输出较为详细的检测结果报告,用于 ...
- Android性能优化之APK瘦身最全总结
Android性能优化之APK瘦身最全总结 随着业务复杂度的逐渐增加,代码.资源也在不断的增加,此时你的APP大小也在增加.从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要 ...
- Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇
Android 性能优化,内存检测.卡顿优化.耗电优化.APK瘦身--详解篇 自2008年智能时代开始,Android操作系统一路高歌,10年智能机发展之路,如今 Android 9.0 代号P 都 ...
- Android性能优化之APK瘦身详解(瘦身73%)
image 公司项目在不断的改版迭代中,代码在不断的累加,终于apk包不负重负了,已经到了八十多M了.可能要换种方式表达,到目前为止没有正真的往外推过,一直在内部执行7天讨论需求,5天代码实现的阶段. ...
- Android性能优化系列之apk瘦身
Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...
- App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)
Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...
- Android App包瘦身优化实践
随着业务的快速迭代增长,美团App里不断引入新的业务逻辑代码.图片资源和第三方SDK,直接导致APK体积不断增长.包体积增长带来的问题越来越多,如CDN流量费用增加.用户安装成功率降低,甚至可能会影响 ...
- Android App包瘦身优化
Android App包瘦身优化 APK瘦身是对程序体验的优化,更大的APK需要占用更多的存储空间. APK的构成 APK瘦身前通过Analyze app分析出来的图片(打开方式:Android St ...
最新文章
- python gevent模块 下载_【python安全攻防】包、模块、类、对象
- java防止重复启动bat_java调用exe,及调用bat不成功的解决办法
- Web Api 内部数据思考 和 利用http缓存优化 Api
- 牛客寒假算法基础集训营4
- 【论文阅读】医疗影像图像增强
- 关于EasyUI中DataGrid控件的一些使用方法总结
- 【c语言】小游戏程序——弹跳小球
- win7出现问题事件名称APPCRASH的解决方法
- 【网络】什么是HTTPS证书?
- 每日一题——分发糖果
- CSS3实现倒影效果
- 如何实现MYSQL高性能,高可用服务器架构
- mock server 挡板服务搭建
- 计算机一级ps知识,2017年9月计算机一级photoshop考试试题
- p0级重大事故:超卖了100瓶飞天茅台,整个项目组慌得一逼~
- iOS 获取WKWebView内容高度做H5原生连接
- JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象
- 1.2 pyenv使用
- 中南大学计算机夏令营经验,一位保送至中南大学学长的保研经验分享!
- 刷脸支付优化用户体验赋能商家运营
热门文章
- 杭州招聘计算机专业毕业生,毕业季必看!杭州高校毕业生就业情况:这些专业最吃香!这个岗位最缺人!...
- win10系统进入监护人模式的方法
- java 线程安全的原因_java的多线程:java安全问题产生的原因与JMM的关系
- RedisTemplate常用集合使用说明-opsForValue(二)
- 【java8新特性】——lambda表达式与函数式接口详解(一)
- php一句话怎么写_PHP一句话木马后门
- 计算机知识探索怎么写,计算机基础知识及探索.doc
- centos选择什么版本_有几千个 Dubbo 实例的瓜子二手车,为什么要选择2.7.3版本?...
- Linux进阶之路————磁盘查询
- JVM 运行时数据区域总结