美文网首页Android性能优化
Android App体积优化篇

Android App体积优化篇

作者: 耗子_wo | 来源:发表于2020-02-27 16:52 被阅读0次
    最近在进行App包的体积优化觉得有点意义于是想记录下来分享给大家

    需求是这样的:最近项目在进行但是有客户以及产品提出App的体积过大安装包.apk 达到了73.5M的体积,提出要减小体积。一开始是想抽点点时间来进行这个需求不想花太多时间,开会的时候召集IOS工程师以及Android工程师一起提了几个思路包括:

    • 1.查看无用的第三方库;
    • 2.查看无用的图片;
    • 3.查看是否有过大的图片;

    因为App经过了几波开发和设计所以可能里面会有些乱,先让工程师先去查找并且报上来,隔了2天左右报上来的Android 这边没有无用的第三方库,无用图片已经去掉,似乎没有过大的图片,整体体积优化几M都不到后来赶项目就做项目去了没有继续跟踪,但是最近又提到了体积大的问题这次我决定自己去看个究竟。

    我的思路比原来多了一点:

    • 0.查看是否有无用的资源;
    • 1.查看无用的第三方库;
    • 2.查看无用的图片;
    • 3.查看是否有过大的图片;

    我和工程师方向不同他们是从开发项目入手,我打算从release包入手这样才能真正分析过大的原因,分析release包两种方案:利用Android studio就可以很方便分析还可以查看下载大小的情况;可以手动解压缩查看里面的文件夹,我两种都用了于是拿了一个release包来下手看看情况,首先不用说了下载解压,查看App各个文件夹的情况,发现了如下几个情况:

    1. assets文件夹里面有个fonts的字体文件体积非常大(大约14M)然后我又去项目中搜了下引用这个字体的class类找到了,但是这个引用的class类居然没有被其他引用最后让工程师叫过来询问说是以前需求要求改变字体但是后来需求取消了,于是找到了第一条大的

    2. 进入lib文件夹里面这个文件夹体积最大很多so的库在里面先按照体积排一个序,发现最大的是叫做libhyphenate_av.so的库在arm64-v8a 文件夹里面有7.1M,在armeabi-v7a里面也有个4.5M 非常大于是先从这个入手询问了新相关开发的工程师这个库是集成的一个聊天的库他觉得没问题,但是我又发现了一个名字叫libhyphenate.so的库(体积排名不靠前但是还是被我发现了,这个库arm64-v8a里面只有2.6M,armeabi-v7a只有1.6M)另其查询发现_av.so的库是个带音视频的功能更强大,但是我们只用到了最基本的功能因此是不需要的,马上去掉编译运行看看效果果然可以运行,说明了导入第三方库的时候要搞清楚需求以及库的作用,又给我抓到一个大鱼

    3. 最后是res文件夹这个里面体积也大主要是图片多,分为hdpi xxhdpi xxxhdpi主要是三类打开最大的xxxhdpi查看依然是排序查看,居然一个开机启动图片达到了1.9M也太大了而且只是这一个文件夹其他的文件夹估计也大,查找到了几个大于几百K的图片这些是肯定要改的,剩下的很多200多K-20K的图片咋一开始觉得没问题,但是查看几个以后发现还是有问题因为有些图片按钮,小ICON的体积达到了20-30K以经验来看觉得是有问题的,一般来说大厂的会在几K左右,于是我下载了几个大厂的.apk下来,让UI一起过来解压看看里面类似的图片体积,翻了好几个文件夹果不其然他们类似的图片比我们要小得多,于是和UI沟通UI说图片是sketch直接弄出来的当时没有发现很大对比才知道需要用PS去修改下尺寸以及体积,最后把图片大于5K的图片都交给UI去检查修改,这次图片文件夹体积估计能减小将近一半左右,
      PS:另外Android图片的体积优化如果不够还可以用Android Studio自带的工具进行优化(我个人觉得首先要UI先解决本身的问题,再利用这个工具进行压缩而不是一开始就用这个工具进行压缩),大概原理就是利用支持的WebP的格式进行优化具体操作如下,最后面要强调的图片也要仔细检查因为有些图片是第三方库使用的,像这些图片可以先不动优先处理自己App的图片
      https://www.jianshu.com/p/e388520a9edc

    4. 移除无用的资源还是利用Android Studio的自带工具进行点击AS上的Analyze菜单按钮,选择Run Inspection by Name,会出现一个弹窗, 输入unused resources,会弹出“inspaction scope”选择窗口,选择检查的范围,一般选择整个项目或模块。“inspaction scope”窗口下面还可以设置文件过滤,选择好后点ok就开始检查了,如果资源文件是通过反射机制调用的,Lint是无法知道的,所以使用lint检查出的每一个资源都需要人工进行确认,防止发生异常删除
      PS:Gradle构建系统支持自动移除无用的资源,只需要在你的Gradle配置文件中加入minifyEnabled true shrinkResources true 但是搜索以后发现这个其实还是有问题的因为有些图片是被动态加载的这句指令会影响整体运行所以不太推荐

    5. 移除低配置手机的.so库(其实是第四点的补充),说白了就是移除armabi里面的库,因为armabi指的是armV5指令集的手机,应该是比较老的一类了当然有些App为了全面性还是支持的,但是我们做的是智能家居产品的App所以应该可以去掉,去掉的时候要注意些细节就是要进去对比下armeabi,armeabi-v7a,arm64-v8a这三个文件夹要确定armeabi里面的库armeabi-v7a,arm64-v8a对应都有才行,比如我就遇到了有一个库在armeabi里面而不再armeabi-v7a里面,我就把这个库拷贝到了armeabi-v7a里面,然后在gradle里面的配置去掉armeabi选项不编译即可

    “四大板斧” 下来整体优化下来App体积从原来release包的73.5M优化到了45M左右,整体效果非常明显,其实App体积优化主要还是细心加耐心但是细想一下好像开发好像也是如此,其他行业也都大抵如此。

    嗯,嗯···

    (PS:如果想看 IOS App体积优化篇 的出门左转即可)

    相关文章

      网友评论

        本文标题:Android App体积优化篇

        本文链接:https://www.haomeiwen.com/subject/oxtthhtx.html