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个要点。

感谢阅读:

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

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

相关推荐
&有梦想的咸鱼&7 分钟前
Android Compose 框架文本选择与编辑模块源码深度剖析(三)
android
车载诊断技术18 分钟前
电子电气架构 --- 汽车面对软件怎么“破局“?
数据库·人工智能·架构·汽车·电子电器框架·汽车面对软件怎么破局·智能电动汽车概述
二流小码农40 分钟前
鸿蒙开发:远场通信服务rcp会话问题
android·ios·harmonyos
林川的邹3 小时前
数据权限框架(easy-data-scope)
后端·程序员·架构
stevenzqzq3 小时前
kotlin @JvmStatic的使用
android·开发语言·kotlin
氦客3 小时前
Kotlin知识体系(二) : Kotlin的七个关键特性
android·开发语言·kotlin·安卓·特性·data class·密封类
Code额3 小时前
微服务的网关配置
网关·微服务·架构
前端大卫3 小时前
【Chrome 官方示例】🔥手把手教你解锁 Performace 选项卡
前端·javascript·性能优化
水滴石轩3 小时前
HarmonyOS Next 用户认证应用
架构
阿豪元代码3 小时前
Perfetto 快速上手指南1 —— Trace 的抓取
android