[译] Android Studio Project Marble_ Apply Changes,成功定级腾讯T3-2

深入探讨 Android Studio 团队如何构建 Instant Run 的后继者 —— Apply Changes。

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

Android Studio 团队有一系列深入探讨 Project Marble 细节和幕后情况的文章,本文是其中的第一篇。从发布 Android Studio 3.3 开始,Project Marble 就致力于保证 IDE 基本功能的稳定性和流畅度。这篇文章是由 Apply Changes 团队的 Jon Tsao(产品经理),Esteban de la Canal(技术负责人),Fabien Sanglard(工程师)和 Alan Leung(工程师)共同完成。

Android Studio 的一个主要目标是为你的 app 提供快速的代码编辑和验证工具。当我们创建 Instant Run 的时候,我们希望它能够明显加速你的开发流程,但是现在看来它并没有达到预期目标。作为 Project Marble 的一部分,我们一直在重新思考 Instant Run,并提出了一个更实用的替代方案 Apply Changes。Apply Changes 作为一个可以加快开发流程的新方法,最初在 Android Studio 3.5 的 Canary Channel 发布预览。在这篇文章中,我们想深入聊聊它是如何工作的,以及迄今为止我们的工作。

Instant Run

通过 Instant Run,我们想解决两个问题:1)节省构建和部署应用程序到设备上的时间,2)使应用程序在不丢失运行状态的情况下部署更改。为了在 Instant Run 中做到这一点,我们在构建的时候重写你的 APK 来注入钩子,以便在运行的时候进行类的替换。要更详细的了解 Instant Run 背后的架构,可以参考几年前 Medium 上的这篇文章

对于简单的 app,这个方案一般都表现很好,但是对于更复杂的 app 来说,它可能会使构建时间变长,或者会由于 app 与 Instant Run 构建过程之间有冲突而导致令人头疼的错误。随着这些问题的出现,我们在后续的版本中持续改进提升 Instant Run。但是,我们无法完全解决这些问题,让它符合我们的期望。

我们后退了一步,决定从头开始构建一个新的架构,它就是 Apply Changes。和 Instant Run 不同,Apply Changes 不会在构建的时候修改你的 APK。取而代之,我们用 Android 8.0(Oreo)上支持的 Runtime Instrumentation 以及更新的设备和模拟器在运行时重定义类。

Apply Changes

对于运行在 Android 8.0 或者更新版本上的设备和虚拟机,Android Studio 现在有三个按钮来控制应用程序重启的程度:

  • Run 会部署所有的改动并重启应用程序。

  • Apply Changes 会尝试应用资源和代码的更改,并只重启 Activity 而不是重启应用程序。

  • Apply Code Changes 会尝试应用代码的更改,而不重启任何东西。

通常只有方法体内部的代码更改才对 Apply Changes 具有兼容性。

原则

基于在 Instant Run 上的经验和反馈,我们采用了一些原则来指导我们的架构设计和决策:

  1. 将构建/部署的速度和状态丢失两者独立开。我们想将节省构建和部署的时间,与在不丢失运行状态的情况下部署更改这两个目标分开。不管是一般的运行或者调试,或者代码的热替换,快速构建和部署应该是所有部署类型的目标。作为构建 Apply Changes 的一部分,我们发现了很多可以优化构建和部署速度的领域,在后面的文章中,我们会详细介绍它们。

  2. 稳定性至关重要。即便在 100 次中这个功能以极快的速度运行了 99 次,如果你的 app 因为这个功能而崩溃了一次,并且你花半个小时来尝试找出原因,那么其他 99 次获得的收益也就全部被抵消了。由于我们坚持这一原则,Apply Changes 不会像 Instant Run 那样在构建期间修改你的 APK。带来的副作用是,在我们进行稳定性优化的早期版本中,Apply Changes 会比 Instant Run 的平均速度稍慢,但是我们将继续提高构建和部署的速度。

  3. 透明。Instant Run 按钮会自动决定是否在必要时重启你的 app 或者 Activity,对于这样不可预测性和行为不一致性的反馈,我们也考虑了进来。我们希望在任何时候你都能清楚透明的了解 Apply Changes 要做什么,如果你的代码有不兼容的修改会发生什么。因此如果有检测到与 Apply Changes 不兼容的修改,我们现在会明确提示你。

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。点击我的GitHub下述资料免费领取
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题

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

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

以添加下面V无偿领取!(备注Android)**
[外链图片转存中…(img-ZFhF2lZe-1710986283335)]

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值