[Kotlin翻译]Netflix Android和iOS Studio应用--现在由Kotlin多平台提供支持。

504 阅读5分钟

原文地址:netflixtechblog.com/netflix-and…

原文作者:medium.com/@NetflixTec…

发布时间:10月29日 - 4分钟阅读

David Henry & Mel Yahya

在过去几年里,Netflix一直在开发一款名为Prodicle的移动应用,以创新电视节目和电影的实体制作。实体制作的世界是快节奏的,不同国家、地区,甚至不同制作的需求都有很大差异。工作的性质意味着我们要在分布式环境中开发重度写作的软件,而在这些设备上,我们的用户中只有不到 ⅓的人在拍摄时能有非常可靠的连接,而且出错的余地有限。基于这些原因,作为一个小型的工程团队,我们发现优化产品交付的可靠性和速度是我们成功服务于不断变化的客户需求的必要条件。

网络连接不可靠的可能性很高,这使我们不得不向移动解决方案靠拢,以获得强大的客户端持久性和离线支持。对快速产品交付的需求促使我们尝试使用多平台架构。现在我们更进一步,使用Kotlin Multiplatform在Kotlin中编写一次平台不可知的业务逻辑,并通过Kotlin/Native编译成Android的Kotlin库和iOS的原生通用框架。

Kotlin多平台

Kotlin多平台允许您使用单一代码库来处理iOS和Android应用的业务逻辑。您只需要在必要的地方编写特定于平台的代码,例如,实现原生UI或使用特定于平台的API时。

Kotlin Multiplatform处理跨平台移动开发的方式与该领域的一些知名技术不同。在其他技术抽象掉或完全取代特定平台的应用开发时,Kotlin Multiplatform是对现有特定平台技术的补充,并着眼于取代平台不可知的业务逻辑。它是工具箱中的一个新工具,而不是取代工具箱。

这种方法对我们来说很有效,原因有几个。

  1. 我们的Android和iOS studio应用有一个共享的架构,在两个平台上编写的业务逻辑相似或在某些情况下是相同的。
  2. 我们Android和iOS应用中近50%的生产代码与底层平台解耦。
  3. 我们探索各自平台提供的最新技术(Android Jetpack Compose、Swift UI等)的欲望没有受到任何阻碍。

那么,我们用它来做什么呢?

体验管理

如前所述,我们的用户需求因产品不同而有很大差异。这就意味着需要大量的应用配置来切换功能的可用性,并为每个产品优化应用内体验。将管理这些配置的代码从应用本身中解耦出来,有助于随着应用的增长降低复杂性。我们在代码共享方面的第一次探索涉及到为我们的内部体验管理工具Hendrix实施移动SDK。

在其核心,Hendrix是一种简单的解释语言,它表达了如何计算配置值。这些表达式在当前的应用会话上下文中进行评估,并可以访问A/B测试分配、定位、设备属性等数据。对于我们的用例,我们正在配置生产、版本和区域特定应用功能集的可用性。

网络连接性差,再加上根据用户活动频繁改变配置值,这意味着设备上的规则评估比服务器端评估更可取。

这促使我们构建了一个轻量级的Hendrix移动SDK--Kotlin Multiplatform的绝佳候选者,因为它需要大量的业务逻辑,并且完全不受平台影响。

实施

为了简明扼要,我们将跳过Hendrix的具体细节,谈谈使用Kotlin Multiplatform代替Kotlin/Swift所涉及的一些差异。

构建

对于安卓系统来说,一切如常。Hendrix Multiplatform SDK通过gradle导入,作为Android库项目的依赖,与其他依赖一样。在iOS方面,原生二进制文件作为通用框架包含在Xcode项目中。

开发者人体工程学

Kotlin多平台源码可以在Android Studio和Xcode(包括lldb支持)中进行编辑、重新编译,并可以附加一个带有断点的调试器。Android Studio可以开箱即用,Xcode支持通过TouchLabs的xcode-kotlin插件实现。

从Xcode调试Kotlin源代码。

网络

Hendrix解释规则集--可远程配置的文件被下载到设备上。我们使用Ktor的多平台HttpClient将我们的网络代码嵌入SDK中。

磁盘缓存

当然,网络连接可能并不总是可用,所以下载的规则集需要缓存到磁盘。为此,我们使用SQLDelight以及它的Android和Native数据库驱动来实现多平台持久化。

最后的想法

在过去的几年里,我们一直密切关注着Kotlin多平台的发展,并相信这项技术已经到了一个拐点。Xcode的工具和构建系统集成已经有了显著的改进,因此,集成和维护所涉及的复杂性已经被无需编写和维护多个平台特定实现的好处所抵消。

我们的Android和iOS工作室应用之间的额外代码共享机会非常多。当我们考虑到Javascript移植也是可能的,该技术未来的潜在应用就变得更加有趣了。

我们对将我们的工作室移动应用演变成具有共享业务逻辑的瘦UI层的可能性感到兴奋,并将继续与您分享我们在这一过程中的学习成果。


通过www.DeepL.com/Translator (免费版)翻译