[译] 谷歌寻踪圣诞老人应用(Santa Tracker)迁移到 Android App Bundle 记录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整体逻辑如下:

/* Copyright 2018 Google LLC.
SPDX-License-Identifier: Apache-2.0 */

override fun onCreate(savedInstanceState: Bundle?) {
// … 安装

// 游戏功能模块的 Id
val featureModuleId = intent.getStringExtra(…)

if (featureModuleName in splitInstallManager.installedModules) {
// 功能模块已经安装,直接运行
launchTargetActivity()
} else {
// 功能模块没有安装,请求安装
val mgr = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (mgr.activeNetworkInfo?.isConnected == true) {
// 有网络…
if (mgr.isActiveNetworkMetered) {
// TODO …流量网络,请求用户确认
showMeteredNetworkConfirmDialog()
} else {
// …否则,直接下载
startModuleInstall(featureModuleId)
}
} else {
// 没有网络,显示错误框并退出
onFeatureModuleLaunchFailure()
}
}
}

由于 Play Core API 的缘故,startModuleInstall() 的方法看起来有些复杂。需要在安装时添加一个用于回调的 listener,然后再请求安装,如下所示:

/* Copyright 2018 Google LLC.
SPDX-License-Identifier: Apache-2.0 */

private lateinit var splitInstallManager: SplitInstallManager
private lateinit var installListener: SplitInstallStateUpdatedListener

private fun startModuleInstall(featureModuleId: String) {
// 显示进度条
progressbar.isVisible = true
progressbar.isIndeterminate = true

// 添加 listener
splitInstallManager.registerListener(installListener)

// 发送请求,开始安装
val request = SplitInstallRequest.newBuilder()
.addModule(featureModuleId)
.build()
splitInstallManager.startInstall(request)
}

listener 会监听到安装完成的信号,然后运行游戏。可以在 这里 找到完整代码。

成果

如果你读到这里了,一定会想知道我们的成果如何……

Android Studio 分析 App Bundle(以及 APK)的工具相当好用,可以深入观察每个功能模块的下载体积。我们可以在其中看到我们应用的初始下载体积是 11.6MB (并没有达到 10MB 的目标),总下载体积是 25.5MB。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但……这些值只展示了生成的 Android App Bundle 文件,并没有计算 Google Play 动态下发(上文讨论过)节省的体积。观察特定设备下载体积最准确的方式是在 Google Play 开发者控制台 中。上传 App Bundle 后,就可以在 ‘Release Management’ -> ‘Artifact Library’ 看到特定设备的下发包体积:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到我们达到了 10MB 的目标,下载体积只有 9.21MB!相比 2017 年 60MB 的应用,我们减少了 85% 的体积! 🎉🎆
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

普惠众生

希望本文展示了迁移到 App Bundle 可以带给用户的巨大收益。尽管分离模块并不是什么举手之劳,但好的代码实践诸如高内聚低耦合也会收益良多。
关于上面的数字还有一小点要注意的是,其中也有我们使用的其他体积压缩技术的功劳,包括 asset 压缩和迁移到 R8。我们会在下篇文章中讨论这些。

  • 读者可能会好奇为什么是 26 个小时而不是 24?这是因为国际日期变更线 并不是一条直线。基里巴斯的时区是 UTC+14,这意味着它和豪兰岛和贝克岛(UTC-12 时区)间有 26 小时的时差。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-E3vBCQAz-1712014358826)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值