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

感谢阅读:

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

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

相关推荐
Cerrda2 小时前
开发体验升级:UnoCSS 自定义 SVG 图标热更新方案
架构·前端框架
Coffeeee6 小时前
如何使用Glide和Coil加载WebP动图
android·kotlin·glide
TrisighT6 小时前
Electron 跑在鸿蒙 PC 上,单窗口和多窗口内存差 800MB?我抓了 5 组数据
性能优化·electron·harmonyos
Kstheme6 小时前
把任何 GitHub 仓库变成系统设计课:这个开源项目做到了
架构
Kapaseker7 小时前
5 分钟搞懂 Kotlin DSL
android·kotlin
禅思院7 小时前
路由性能高可用架构实战方案
前端·架构·前端框架
恋猫de小郭7 小时前
AI Agent 开发究竟是啥?如何用 AI 开发 Agent ?深入浅出给你一套概念
android·前端·ai编程
黄林晴7 小时前
Android 17 正式发布!target 37 一大批旧代码直接不能用了
android
Carson带你学Android8 小时前
Android 17 正式发布:AI 终于成了系统能力
android·前端·ai编程
三少爷的鞋8 小时前
当 UseCase 开始长期监听,它可能已经不是 UseCase 了
android