Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52722 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

22 | 包体积优化(上):如何减少安装包大小?

Library合并与裁剪
Library压缩
Dex压缩
Dex分包
去掉Debug信息或者去掉行号
ProGuard
开发模式升级
业务梳理
ROM空间
运行内存
安装时间
应用市场
推广成本
下载转化率
使用ReDex优化应用的包体积
包体积优化的工作
应用关注包体积吗?
下一期讨论“资源优化”
学会思考与钻研
移动优化的“深水区”
规则监控
依赖监控
大小监控
Native Library
代码
包体积与应用性能
为什么要优化包体积
2G时代的流量限制
课后作业
总结
包体积监控
包体积优化
安装包的背景知识
如何减少安装包大小

该思维导图由 AI 生成,仅供参考

曾经在 15 年的时候,我在 WeMobileDev 公众号就写过一篇文章《Android 安装包相关知识汇总》,也开源了一个不少同学都使用过的资源混淆工具AndResGuard
现在再看看这篇 4 年前的文章,就像看到了 4 年前的自己,感触颇多啊。几年过去了,网上随意一搜都有大量安装包优化的文章,那还有哪些“高深”的珍藏秘笈值得分享呢?
时至今日,微信包体积也从当年的 30MB 增长到现在的 100MB 了。我们经常会想,现在 WiFi 这么普遍了,而且 5G 都要来了,包体积优化究竟还有没有意义?它对用户和应用的价值在哪里?

安装包的背景知识

还记得在 2G 时代,我们每个月只有 30MB 流量,那个时候安装包体积确实至关重要。当时我在做“搜狗输入法”的时候,我们就严格要求包体积在 5MB 以内。
几年过去了,我们对包体积的看法有什么改变吗?
1. 为什么要优化包体积
在 2018 年的 Google I/O,Google 透露了 Google Play 上安装包体积与下载转化率的关系图。
从这张图上看,大体来说,安装包越小,转化率越高这个结论依然成立。而包体积对应用的影响,主要有下面几点:
下载转化率。一个 100MB 的应用,用户即使点了下载,也可能因为网络速度慢、突然反悔下载失败。对于一个 10MB 的应用,用户点了下载之后,在犹豫要不要下的时候已经下载完了。但是正如上图的数据,安装包大小与转化率的关系是非常微妙的。10MB 跟 15MB 可能差距不大,但是 10MB 跟 40MB 的差距还是非常明显的。
推广成本。一般来说,包体积对渠道推广和厂商预装的单价会有非常大的影响。特别是厂商预装,这主要是因为厂商留给预装应用的总空间是有限的。如果你的包体积非常大,那就会影响厂商预装其他应用。
应用市场。苹果的 App Store 强制超过 150MB 的应用只能使用 WiFi 网络下载,Google Play 要求超过 100MB 的应用只能使用APK 扩展文件方式上传,由此可见应用包体积对应用市场的服务器带宽成本还是会有一点压力的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了移动应用开发中的包体积优化问题,并指出了包体积对应用性能和用户体验的重要影响。文章提出了多种优化方法,包括删除无用或低价值的业务、采用小程序和H5开发模式等。此外,还详细介绍了代码优化、Dex分包、Dex压缩等技术手段,特别强调了Dex分包和Dex压缩对于包体积优化的重要性。文章还介绍了Facebook和ReDex的相关优化实践,为移动应用开发者提供了有益的技术指导。另外,还提到了oatmeal在Tinker中的应用以及对Native Library的优化方法,包括Library压缩、Library合并与裁剪等。总之,本文通过深入分析和技术实践,强调了包体积优化对于提升应用性能和用户体验的重要性,为移动应用开发者提供了有益的技术指导。文章还提到了包体积监控的重要性,以及对包体积的监控方法和规则。最后,文章提出了课后作业,鼓励读者尝试使用ReDex项目来优化应用的包体积,并欢迎读者分享自己的包体积优化工作和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • Geek_a8c19d
    Sample里的Release包dex重排优化后APK变大 redex --sign -s ReDexSample/keystore/debug.keystore -a androiddebugkey -p android -c redex-test/interdex.config -P ReDexSample/proguard-rules.pro -o redex-test/interdex_output-release.apk ReDexSample/build/outputs/apk/release/ReDexSample-release.apk

    作者回复: 重排并不是为了减少size,不过可以diff一下是哪一块变大了。会不会只是压缩率的问题

    2019-09-23
    2
  • nb Ack
    老师您好。我想问一下减少 apk 体积是不是可以通过配置 ndk { abiFilters 'armeabi-v7a' } 减少打出的 so 文件。听说微信就是这样的?这会有什么问题吗?

    作者回复: 在国内为了减少安装包体积,一般都是单abi的,不仅仅是微信

    2019-08-02
    2
    1
  • elephant
    F家的方案总是让人不可思议,经常想大喊,你们至于么,方案搞得这么黑科技!!!以前看fresco和reactnative实现,请问我跪的标准么。😂

    作者回复: 对的,不过感觉他们玩的太飘了,可以参考但是不好全盘接受

    2019-03-05
    1
  • CoderAndy
    Facebook把dex放在assets下那么在首次启动解压后,如何执行dexopt?或者会不会执行该操作?

    作者回复: 不执行dexopt,直接通过oatmeal自己生成odex

    2019-02-13
    2
    1
  • Allen
    其实更好奇怎样在启动速度快的要求下 减少包体大小 还是这两者必须择一呢

    作者回复: 类似dex分包以及某些手段,是既能减少包体积又能提升启动速度。 如果需要权衡的事情,我们要看自己的应用处于哪个阶段,目前更加严峻的是哪个问题

    2019-02-09
    1
  • 詹伟
    动态库压缩,动态库拷贝成功后才有戏,如果拷贝失败了怎么破,apk内直接读是不能压缩的

    作者回复: 只能删除一些缓存文件,或者提示用户清理空间了

    2019-09-04
  • 天空
    项目用了small插件化,ApkChecker不能分析以so库的插件,怎么办?

    作者回复: 可能需要适配一下才行

    2019-06-02
  • joker°
    mess 还是在维护的~

    作者回复: 抱歉抱歉

    2019-05-07
  • 小小代码
    还有个问题,Redex重分包的功能,如果我使用通过-printconfiguration "build/outputs/mapping/proguard-rules.pro"生成的合并之后的Proguard文件,会打印 InterDexPass not run because no ProGuard configuration was provided的日志,但我实际上配置了Proguard文件啊

    作者回复: 需要拼到命令行中: redex -P proguard_rule.txt -c interdex.config boot-free-debug.apk -o redex.apk

    2019-04-13
  • 小小代码
    试了下Redex重分包的功能,发现个问题,如果我使用通过-printconfiguration "build/outputs/mapping/proguard-rules.pro"生成的合并之后的Proguard文件,会打印 InterDexPass not run because no ProGuard configuration was provided的日志,但我实际上配置了Proguard文件啊

    作者回复: 可以拼在命令行中: redex -P proguard_rule.txt -c interdex.config boot-free-debug.apk -o redex-uc.apk

    2019-04-13
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部