您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 百科

Netflix如何实现Android与 iOS共用一套代码?

时间:2020-11-16 11:40:35  来源:  作者:

过去几年以来,Netflix 一直在开发 Prodicle 移动应用,借此在电视节目与电影制作领域推进创新。时至今日,实体生产的具体方式可谓日新月异,不同国家、地区甚至是不同生产体系之间都存在着巨大的方法与需求层面的差异。工作性质的变化,意味着我们需要在分布式环境中的设备上开发出高写入强度软件,其中约三分之一用户的网络连接条件并不稳定,容错能力也相当有限。作为一支小型工程团队,我们意识到必须对可靠性及产品交付速度进行优化,才能满足不断变化的客户需求。

由于网络连接的可靠性不高,因此我们更倾向于推出移动解决方案,借此实现强大的客户端持久性与脱机支持能力。为了快速交付产品,我们决定使用一套多平台架构。现在,我们使用 Kotlin Multiplatform 编写平台中立性业务逻辑,并通过 Kotlin/Native 将其编译为分别面向 Android 的 Kotlin 库与面向 IOS 的原生通用框架

Netflix如何实现Android与 iOS共用一套代码?

 

Kotlin Multiplatform

Kotlin Multiplatform 允许我们在 iOS 与 Android 应用程序的业务逻辑中使用同一套代码库。您只需在必要时编写特定于平台的代码即可,例如实现原生 UI 或者使用特定于平台的 API 时。

Kotlin Multiplatform 与以往各类知名跨平台移动开发技术有所区别。其它技术主要以抽象化或者全面取代平台特定开发方法作为主要诉求,并致力于替换掉一切特定平台应用开发方兴未艾。与之相反,Kotlin Multiplatform 是对当前平台特定技术的补充,致力于替代各类平台中立性业务逻辑。换言之,Kotlin Multiplatform 的诉求在于为解决方案库带来新工具,而非取代整个解决方案库。

事实证明,新方案效果不错,具体表现为:

  1. 我们的 Android 与 iOS studio 应用获得了共享架构,且能够在两套平台上编写相似甚至完全相同的业务逻辑。
  2. 在我们的 Android 与 iOS 应用当中,近 50% 的生产代码与底层平台保持解耦。
  3. 我们能够灵活探索不同平台(Android Jetpack Compose、Swift UI 等)上提供的最新技术,再无任何后顾之忧。

那么,我们是如何使用 Kotlin Multiplatform 的?

体验管理

如前所述,用户在不同产品中的实际需求存在巨大差异。具体而言,这些差异将转化为大量应用程序配置,要求我们切换可用功能并优化每款产品的应用内体验。而将应用当中负责管理这些配置的代码解耦出来,将有助于降低应用程序的复杂性。我们对代码共享的首次探索,是为内部体验管理工具 Hendrix 建立移动 SDK。

Hendrix 的核心是一自足简单的解释语言,用于表示如何计算配置值。这些表达式将配合当前应用会话上下文进行评估,并能够访问 A/B 测试分配、位置、设备属性等数据。在我们的用例中,具体配置范围包括生产可用性、版本以及特定区域应用功能集等。

糟糕的网络连接以及用户活动响应配置中的频繁值变更,意味着我们有必要将规则评估从服务器端迁移至更灵活的用户设备端。

为此,我们需要构建轻量化 Hendrix 移动 SDK——在这方面,Kotlin Multiplatform 凭借着强大的业务逻辑与全面的平台中立性脱颖而出。

实现

为了简便起见,这里我们不再介绍 Hendrix 中的特定细节,主要讲解使用 Kotlin Multiplatform 替代 Kotlin/Swift 中的一些差异。

构建

对于 Android,一切照常运行,不受太多影响。Hendrix Multiplatform SDK 通过 gradle 以 Android 库项目依赖项的形式进行导入。而在 iOS 方面,原生二进制文件将作为通用框架被包含在 Xcode 项目当中。

面向开发者的人体工程学

Kotlin Multiplatform 源代码可以进行编辑、重新编译,并能够在 Android Studio 与 Xcode 中配合一款带有断点的调试器(包括 lldb 支持)。Android Studio 可实现开箱即用,在 Xcode 中则需要通过 TouchLabs 的 xcode-kotlin 插件使用。

Netflix如何实现Android与 iOS共用一套代码?

通过 Xcode 调试 Kotlin 源代码

网络

Hendrix 解释规则集(即远程可配置文件)已被下载至设备。这里我们使用 Ktor 的 MultiplatformHttpClient 将网络代码嵌入至 SDK 当中。

磁盘缓存

当然,有时候网络连接的可用性将无法保证,因此需要将下载的规则集缓存到磁盘当中。为此,我们使用 SQLDelight 及其 Android 与原生数据库驱动程序实现 Multiplatform 的持久存储。

总结

过去几年以来,我们一直密切关注 Kotlin Multiplatform 的发展,也坚信项目已经迎来发展拐点。Xcode 的工具与构建系统集成已经得到显著改善,用户不必编写及维护特定于多种平台的实现,能够将节约下来的精力投入到更具价值的应用设计与开发当中。

我们的 Android 与 iOS Studio 应用之间还存在着广阔的代码共享空间。也许未来我们还会再进行一轮 JAVAScript 转换,相信这也将是个非常有趣的话题。

我们很高兴能够将 Studio 移动应用开发为具有共享业务逻辑的瘦 UI 层,后续我们还将不断与大家分享我们在发展道路中的见闻心得。

原文链接:

https://netflixtechblog.com/netflix-android-and-ios-studio-Apps-kotlin-multiplatform-d6d4d8d25d23



Tags:Netflix   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
对世界各地的司机来说,堵车是最令人沮丧的经历之一。每个人都缓慢得像是在爬行一样,有时是因为出现了一个小问题,有时则是毫无理由的拥堵。作为Netflix的工程师,我们一直在不断评估如何重新设计流量管理框架。如果我们知...【详细内容】
2020-11-16  Tags: Netflix  点击:(122)  评论:(0)  加入收藏
过去几年以来,Netflix 一直在开发 Prodicle 移动应用,借此在电视节目与电影制作领域推进创新。时至今日,实体生产的具体方式可谓日新月异,不同国家、地区甚至是不同生产体系之间...【详细内容】
2020-11-16  Tags: Netflix  点击:(143)  评论:(0)  加入收藏
本文最初发布于 Netflix 技术博客,经授权由 InfoQ 中文站翻译并分享。什么是 Dispatch?简单说,它是一个管理事件元数据和资源的危机管理编排框架。通过与组织中使用工具(像 Slac...【详细内容】
2020-09-27  Tags: Netflix  点击:(150)  评论:(0)  加入收藏
作者:人月神话,新浪博客同名简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践今天谈下传统ESB服务总线里面的可视化服务设计,服务组合编排和微服务里面的...【详细内容】
2020-08-14  Tags: Netflix  点击:(91)  评论:(0)  加入收藏
编辑​​原文来自Fast Company,作者Dan Singer;Enrico D’Angelo最近,Apple、Google、Microsoft、Nvidia(英伟达)和腾讯都官宣了新的游戏分销服务,还有报道称Amazon也可能...【详细内容】
2020-06-28  Tags: Netflix  点击:(37)  评论:(0)  加入收藏
Docker如何做资源隔离,还是不做?怎样做才能最大化利用服务器资源,避免浪费?我们看看Netflix是如何做到的。吵闹的邻居(Noisy Neighbors)我们都曾有过吵闹的邻居。无论是在咖啡馆...【详细内容】
2019-08-26  Tags: Netflix  点击:(208)  评论:(0)  加入收藏
▌简易百科推荐
我们有时候在音频通话过程中,想要改成视频通话。如果挂断当前的通话再重新发起视频通话就会显得比较麻烦。 因此很多app提供了将音频通话升级成视频通话的功能,同时也有将视频...【详细内容】
2021-12-23  充满元气的java爱好者  博客园  Tags:WebRTC   点击:(5)  评论:(0)  加入收藏
随着移动互联网的发展和智能手机的普及,手机端成为了最大的流量入口,占据着一半以上的流量来源。所以很多企业在开发网站之前,也会考虑到开发手机网站。不过,手机端网站并非是对...【详细内容】
2021-11-03  小刘吃吃吃  搜狐号  Tags:手机网站   点击:(33)  评论:(0)  加入收藏
2010年,谷歌宣布正式退出国内市场,随后,各大厂商推出的手机也不再预装GMS(谷歌移动服务)。 与海外安卓用户不同,国内安卓用户对软件的需求不需要基于来自GMS框架下的Google Play(谷...【详细内容】
2021-10-08  雷科技    Tags:安卓App   点击:(49)  评论:(0)  加入收藏
一、滑屏操作不需要看到欢迎页面,直接做里面的后续操作就好了。也就是我想记住一些用户的习惯, 不要像第一次访问一样,有一个重置与否,给它关闭了。# 重置与否desired_caps["noR...【详细内容】
2021-06-17  美好一点    Tags:Appium   点击:(145)  评论:(0)  加入收藏
架构也因项目而异。不同的项目需求不同,对应的架构也会不同。架构分层API的设计完毕之后。接下来我就会考虑App项目的总体架构了。总体怎样架构,我也以前做过不少尝试。早期的...【详细内容】
2021-05-24  每周IT  今日头条  Tags:App架构   点击:(196)  评论:(0)  加入收藏
很多企业或个人开发者在开发好App之后,会遇到一系列上架难题,本文以华为应用市场为例,帮助你解读如何快速完成应用市场上架提交&审核。...【详细内容】
2021-03-16    知乎  Tags:华为应用市场   点击:(459)  评论:(0)  加入收藏
过去几年以来,Netflix 一直在开发 Prodicle 移动应用,借此在电视节目与电影制作领域推进创新。时至今日,实体生产的具体方式可谓日新月异,不同国家、地区甚至是不同生产体系之间...【详细内容】
2020-11-16      Tags:Netflix   点击:(143)  评论:(0)  加入收藏
作者:ypaapyyang,腾讯 WXG 后台开发工程师,个人公众号:码农课代表。本文旨在分析分布式配置系统的必要性、可行性,及其关键要素,并介绍一款基于该系列分析,在微信研发体系下的实践...【详细内容】
2020-10-20      Tags:分布式   点击:(90)  评论:(0)  加入收藏
与其天天看华为怎么被禁,天天聊鸿蒙OS怎样怎样,不如来点实际的,加入成为华为开发者!安卓的开发者们入坑了吗?华为要打造自己独立的生态,迫不得已,逼出来的国产OS终究要来。 Harmony...【详细内容】
2020-10-12      Tags:HarmonyOS   点击:(1082)  评论:(0)  加入收藏
集成华为HMS SDK的游戏或普通应用,调用接口(比如getCurrentPlayer登录接口)总是报错6003。该错误码官方文档表示:签名证书指纹错误,签名证书指纹主要用于校验应用的真实性,确保应...【详细内容】
2020-10-12      Tags:HMS SDK   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条