Android之Apk全面瘦身,极致瘦身优化

怎么做到包体积超小,功能还要超多,是一件很不容易的事情。

前言、瘦身优化的好处

Android瘦身优化的好处主要包括以下几个方面‌:

  1. 提高下载转化率‌:小型化的APK可以减少用户的下载时间和流量消耗,从而提升下载转化率。大型APK通常需要更多的流量和时间来下载,这可能会让用户望而却步。通过瘦身优化,可以显著减少APK的大小,使用户更容易下载和安装应用‌12。
  2. 加快安装速度‌:较小的APK文件在安装过程中需要处理的数据量更少,因此安装速度更快,减少了用户的等待时间‌2。
  3. 减少内存占用‌:安装解压后的APK可能会占用更多的存储空间。通过瘦身优化,可以减少安装后的内存占用,使得应用更加适合在低端设备上运行‌1。
  4. 提升加载速度‌:优化资源文件和代码可以减少不必要的加载项,从而加快应用的启动速度和页面加载速度,提升用户体验‌。
  5. 降低服务器带宽成本‌:对于应用市场和应用开发者来说,较大的APK会占用更多的服务器带宽和存储空间。通过瘦身优化,可以降低服务器带宽成本,特别是在应用市场如Google Play对超过100MB的应用有特殊的上传要求时‌

一、清理无用资源

  1. 使用android studio 下面Refactor->Remove unused Resource来删除无用资源
  2. 使用Lint工具检查出无用资源
  3. 开启shrinkResources去除无用资源:在build.gradle 里面配置shrinkResources true
  4. 删除无用的语言资源
arduino 复制代码
android {  
        defaultConfig {  
           resConfigs "zh"  
           }  
 }
  1. 清理第三方库中冗余代码

二、图片资源优化

  1. 使用压缩过的图片
  2. 只用一套图片 对于绝大对数APP来说,只需要取一套设计图就足够了。从内存占用和适配的角度考虑,这一套图建议放在xhdpi文件夹下
  3. 使用不带alpha值的jpg图片: 对于非透明的大图,jpg将会比png的大小有显著的优势,虽然不是绝对的,但是通常会减小到一半都不止
  4. 使用tinypng有损压缩: 支持上传PNG图片到官网上压缩,然后下载保存,在保持alpha通道的情况下对PNG的压缩可以达到1/3之内,而且用肉眼基本上分辨不出压缩的损失
  5. 使用webp格式: webp支持透明度,压缩比比jpg更高但显示效果却不输于jpg,从Android 4.0+开始原生支持,但是不支持包含透明度,直到Android 4.2.1+才支持显示含透明度的webp,使用的时候要特别注意。
  6. 使用svg 矢量图是由点与线组成,和位图不一样,它再放大也能保持清晰度,而且使用矢量图比位图设计方案能节约30~40%的空间,现在谷歌一直在强调扁平化方式,矢量图可很好的契合该设计理念。有如下优点:
    1)占用存储空间小
    2)无极拉伸不会出现锯齿,可以照顾不同尺寸的机型
    3)Android Studio自带很多资源
  7. 使用shape:特别是在扁平化盛行的当下,很多纯色的渐变的圆角的图片都可以用shape实现,代码灵活可控,省去了大量的背景图片。
  8. 使用着色方案: 相信你的工程里也有很多selector文件,也有很多相似的图片只是颜色不同,通过着色方案我们能大大减轻这样的工作量,减少这样的文件
  9. 对打包后的图片进行压缩: 使用7zip压缩方式对图片进行压缩,建议使用微信的AndResGuard
  10. 设计层面:如何选择??
    1)SVG适用场景: 图标
    2)PNG适用场景: LOGO
    3)JPG适用场景: 高保真图像(照片)
    4)webp适用场景: 网络传输
    5)Android 5.0之前要适配的话, 不采用SVG的这种替换方案,直接上PNG

三、资源动态加载

  1. 在线化素材库
  2. 皮肤插件化动态加载
  3. 模块插件化,动态加载

四、lib库优化

  1. 使用一套V7或者V8的库
  2. so插件化,让其动态加载

五、压缩资源

使用7zip压缩资源:对于assets或者raw文件夹中的资源,可以使用7zip压缩,使用时进行解压。

六、代码混淆:

arduino 复制代码
android {  
    buildTypes {  
        release {  
            minifyEnabled true  
        }  
      }  
  }

为什么代码混淆可以让apk变小?

1)可以删除注释和不用的代码。

2)将java文件名改成短名

3)将方法名改成短名

七、资源(res)混淆 :

资源混淆简单来说希望实现将res/drawable/icon,png变成res/drawable/a.png,

或我们甚至可以将文件路径也同时混淆,改成r/s/a.png。

建议使用微信的AndResGuard

八、使用微信AndResGuard:

使用微信AndResGuard对资源混淆并且压缩图片res等资源

九、Facebook的redex优化字节码:

redex是facebook发布的一款android字节码的优化工具.

十、极致瘦身

全动态插件化,让App做成了没有任何业务的一个空壳子

参考我前面文章:
零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构
大型项目架构:全动态插件化+模块化+Kotlin+协程+Flow+Retrofit+JetPack+MVVM+极限瘦身+极限启动优化+架构示例+全网唯一

github地址
gitee地址

十一、总结

本文重点介绍了Android的Apk瘦身优化需要时10个要点。

感谢阅读:

欢迎用你发财的小手 关注,点赞、收藏

这里你会学到不一样的东西

相关推荐
白总Server2 小时前
多智能体系统的中间件架构
linux·运维·服务器·中间件·ribbon·架构·github
_一条咸鱼_3 小时前
揭秘 Android TextInputLayout:从源码深度剖析其使用原理
android·java·面试
_一条咸鱼_3 小时前
揭秘!Android VideoView 使用原理大起底
android·java·面试
_一条咸鱼_3 小时前
深度揭秘!Android TextView 使用原理全解析
android·java·面试
游离状态的猫13 小时前
JavaScript性能优化实战:从瓶颈定位到极致提速
开发语言·javascript·性能优化
_一条咸鱼_3 小时前
深度剖析:Android Canvas 使用原理全揭秘
android·java·面试
_一条咸鱼_3 小时前
深度剖析!Android TextureView 使用原理全揭秘
android·java·面试
_一条咸鱼_3 小时前
揭秘!Android CheckBox 使用原理全解析
android·java·面试