服务粉丝

我们一直在努力
当前位置:首页 > 情感 > 故事 >

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

日期: 来源:36氪收集编辑:36氪

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


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

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

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的支持。

通过Xcode调试Kotlin源码。

网络

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

磁盘缓存

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

最后的思考

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

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

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

译者:boxi。

相关阅读

  • 全城通停!18日起,慈溪纳入“甬城泊车”

  • 5月18日18时起,“慈溪智慧停车”将正式纳入“甬城泊车”平台。这标志着我市在全国各城市中率先实现“一个平台、全城通停”的停车格局。市民朋友只需使用同一个APP/小程序,就
  • 网约车平台违规派单 交通部门约谈“喊停”

  • 网约车因存在违规行为导致乘客投诉增多,5月12日,市交通运输局组织该局有关部门,集中约谈了滴滴、高德两家网约车平台公司负责人。约谈指出,近期,两家网约车平台公司存在违规派单
  • “湾钻3”海工平台交付

  • 近日,天津凯胜海洋工程设备有限公司与中海油服合作,成功交付“湾钻3”海工平台,这是东疆今年交付的首艘平台,为后续海工平台处置提供了良好的示范意义。此次交付的“湾钻3”,采用
  • 万吨级海上油气平台“倒车入库”完成安装

  • 恩平20—4钻采平台在海上安装中。中国海油供图记者从中国海油获悉:13日,万吨级海上油气平台恩平20—4钻采平台在珠江口盆地海域完成安装,创造了我国海上油气平台动力定位浮托安

热门文章

  • 甘肃漳县:干部情撒麦田 助力夏粮归仓

  • 炎炎夏日,农事繁忙;麦穗飘香,颗粒归仓。近日,漳县马泉乡工会组织开展“干部情撒麦田,助力夏粮归仓”志愿服务行动,切实发挥广大干部职工的示范带动作用,扎实细

最新文章

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

  • 编者按:移动app开发最烦人的地方在于,针对不同的平台(Android/iOs),开发者需要开发不同的版本,能不能像Java那样一次编写,到处运行呢?Netflix的移动app开发团队利用Kotlin Multiplat
  • 长白县发现首例中华秋沙鸭产卵孵化

  • 近期,吉林省白山市长白县十二道沟镇林业科工作人员发现中华秋沙鸭产卵孵化,这是该镇通过人工扩建鸟巢,首次吸引中华秋沙鸭入驻并产卵孵化。每年3月中旬到5月底,中华秋沙鸭和鸳鸯
  • 梁稳根卸任三一集团董事长

  • (梁稳根在2021中国民营企业500强峰会上做主旨演讲。 湖南日报全媒体记者 田超 傅聪 摄)湖南日报5月15日讯(全媒体记者 曹娴)三一集团15日晚间发布公告称,梁稳根由于年龄原因不再
  • 所有的励志书,都可归结为这11条简单原则(上)

  • 编者按:励志类的图书和文章可以说是经久不衰的主题了。毕竟,谁不想过上完美的人生呢?谁没有感到困惑无助的时候?但是,那些励志自助书看多了,你大概会有似曾相似的感觉,怎么又说这个