首页 >热门资讯> ERP > Netflix 技术博客:更换移动 App 引擎的探索 >

Netflix 技术博客:更换移动 App 引擎的探索

转载时间:2021.08.27(原文发布时间:2020.11.02)
213
转载作者:36氪企服点评小编
阅读次数:213次

神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。

编者按:移动app开发最烦人的地方在于,针对不同的平台(Android/iOs),开发者需要开发不同的版本,能不能像Java那样一次编写,到处运行呢?Netflix的移动app开发团队利用Kotlin Multiplatform进行了这方面的探索,这次他们首先实验的是将业务逻辑抽离出来,让两种app共享。原文发表在其官方技术博客上,标题是:Netflix Android and iOS Studio Apps — now powered by Kotlin Multiplatform

Netflix 技术博客:更换移动 App 引擎的探索


过去几年的时间里,Netflix一直在开发着一款移动app,名字叫做Prodicle,我们希望能够对电视节目和电影的实际拍摄进行创新。实际拍摄的世界节奏很快,在不同的国家、地区之间,甚至从一种拍摄到另一种拍摄之间,需求都会有很大的不同。这项工作的性质意味着我们要在分布式的环境下,在不到1/3的用户设备拥有非常可靠的连接,且误差容许量有限的情况下,开发需要大量写操作的软件。出于这些原因,作为一个小型工程团队,我们发现,为了可靠性和产品交付速度而进行优化,是我们成功满足不断提高的客户需求所必需的。

网络连接不可靠的可能性很高,这使得我们被迫要依靠移动解决方案来获得健壮的客户端持久性和离线支持。快速交付产品的需求让我们开始尝试多平台架构。现在,通过利用Kotlin Multiplatform,用Kotlin一次性编写与平台无关的业务逻辑,然后针对Android编译成Kotlin库,针对iOS通过Kotlin/Native编译成原生的Universal Framework,我们又更进了一步。

Netflix 技术博客:更换移动 App 引擎的探索

Kotlin Multiplatform

Kotlin Multiplatform可以让你将单一的业务逻辑代码库应用到iOS和Android app上面。你只需要在必要的是编写平台相关代码,比方说,实现原生UI,或者要利用平台相关API时。

Kotlin Multiplatform的跨平台移动开发方案跟这个领域的一些知名技术不一样。别的技术都是把平台相关的app开发抽象化或者完全取代掉,Kotlin Multiplatform却是对现有平台相关技术的补充,致力于替代与平台无关的业务逻辑。这算是给现有工具箱增加一个新工具,而不是要把工具箱替换掉。

这种做法对我们来说效果很好,原因有这么几个:

  1. 我们的Android和iOS Studio app有着共同的体系结构,两个平台都写有类似或者在某些情况下相同的业务逻辑。

  2. 我们的Android和iOS app里面几乎50%的生产代码都是跟底层平台分离的。

  3. 我们对探索各自平台提供的最新技术(Android Jetpack Compose,Swift UI等)的渴望丝毫没有受到任何阻碍。

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

体验管理

如前所述,我们的用户需求在不同产品之间的差异很大。这种差异会转化为大量的app配置,对功能可用性进行切换,要优化每个产品的应用内体验。把管理这些配置的代码跟app本身去耦合,可以有助于降低app的复杂性。我们对代码共享的首次探索包括我们的内部体验管理工具Hendrix的移动SDK实现。

Hendrix的核心是一种用来表示应该如何计算配置值的简单解释性语言。这些表达式是在当前app会话的上下文中计算的,而且可以访问类似A / B测试作业、位置、设备属性等数据。我们的用例是配置产品的可用性,版本,以及特定区域的应用功能集。

糟糕的网络连接再加上为了响应用户活动而频繁变更配置值,意味着在设备侧进行规则计算要比在服务器端进行计算更好。

于是我们就开发了轻量级的Hendrix移动SDK——而这是应用Kotlin Multiplatform的理想选择,因为它需要大量的业务逻辑,并且完全与平台无关。

实现

为简便起见,Hendrix的具体细节我们就跳过不谈了,这里就讲讲用Kotlin Multiplatform来替代Kotlin / Swift会涉及到的一些差异。

Build

对于Android来说,一切照旧。就像其他任何的依赖项一样,Hendrix Multiplatform SDK会被当成Android库项目依赖项,通过gradle导入进来。至于iOS,原生二进制文件作为通用框架已包含在Xcode项目里面。

开发人员工效学

Kotlin Multiplatform的源码可以进行编辑,重新编译,并且可以给Android Studio和Xcode附上带有断点的调试器(包括lldb支持)。Android Studio开箱即用,还可以通过TouchLabs的xcode-kotlin插件实现对Xcode的支持。

Netflix 技术博客:更换移动 App 引擎的探索

通过Xcode调试Kotlin源码。

网络

Hendrix会对规则集——已下载到设备本地的远程可配置文件,做出解释。我们用Ktor的Multiplatform HttpClient来把我们的网络代码嵌入到SDK里面。

磁盘缓存

当然,网络连接未必总能在线,所以需要把下载的规则集缓存到磁盘上。为了实现Multiplatform的持久性,我们用了SQLDelight以及它的Android与Native Database驱动程序。

最后的思考

在过去几年的时间里,我们一直在密切关注Kotlin Multiplatform的发展,现在我们认为这项技术已经达到拐点。Xcode的工具和构建系统集成已经得到了显著改善,相较而言,不必编写和维护多个平台相关的实现所带来的好处,已经大大超过了集成和维护所牵涉到的复杂性。

我们的Android和iOS Studioapp之间还有很多其他的代码共享的机会。考虑到JavaScript transpilation(一种从源码到另一种源码的编译)也有可能性时,这项技术的潜在未来应用会变得更加有趣。

我们的studio移动app有可能会演进为瘦UI层+共享业务逻辑,我们对这种可能性感到兴奋,我们会继续将在这条道路上学到的东西分享给大家的。

译者:boxi。


[免责声明]

资讯标题: Netflix 技术博客:更换移动 App 引擎的探索

资讯来源: 36氪官网

36氪企服点评

ERP相关的软件

行业专家共同推荐的软件

限时免费的ERP软件

新锐产品推荐

消息通知
咨询入驻
商务合作