让安卓与IOS共用代码,Netflix是如何实现的?

559 篇文章 5 订阅

全文共2367字,预计学习时长6分钟

图源:Google

近些年,Netflix一直在开发一款名为Prodicle的移动应用程序,借此推进电视节目和电影制作领域的创新。如今,实体制作领域发展迅速,不同国家、地区,甚至不同生产部门之间,对实体制作的要求亦是不同。

实体制作的独特性质,要求我们在分布式环境中的设备上开发出高写入软件,可只有不到三分之一的用户设备能同时连接上可靠的网络,设备的容错能力也相当有限。作为一支小型工程团队,我们逐渐意识到,必须不断优化产品,提高产品可靠性和交付速度,才能满足客户不断变化的需求。

由于用户很可能连接上不可靠的网络,因此我们决定推出移动解决方案,增强客户端持久性和离线支持能力。为了快速交付产品以满足客户需求,我们决定尝试使用一套多平台架构。

目前我们正在这一点上发力,使用Kotlin Multiplatform编写平台无关性业务逻辑,并通过Kotlin/Native技术将其编译为分别面向Android系统的Kotlin库和面向iOS系统的本地通用框架。

 

 

Kotlin Multiplatform

Kotlin Multiplatform支持用户在处理iOS和Android应用程序的业务逻辑时使用单一代码库。用户只需在必要时编写特定平台的代码即可,例如实现本地UI或使用特定平台的API时。

Kotlin Multiplatform与以往各类知名跨平台移动开发技术有所区别。其它技术不是抽象化就是全面取代平台特定应用开发,而Kotlin Multiplatform 是对当前平台特定技术的补充,致力于取代平台无关性业务逻辑。换言之,Kotlin Multiplatform是工具箱中新增的工具,而非取代整个工具箱。

事实证明,新方案行之有效:

· 我们的Android和iOS studio应用获得了共享架构,能够在两套平台上编写相似甚至完全相同的业务逻辑。

· 在我们的Android和iOS应用中,近 50% 的影视制作代码与底层平台实现解耦。

· 我们可以畅通无阻地探索不同平台(Android JetpackCompose、Swift UI 等)上提供的最新技术。

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

 

体验管理

如上所述,不同生产部门之间的实际需求存在巨大差异。这意味着我们需要大量应用程序配置来切换可用功能,并为每个生产部门优化应用内部体验。

随着应用的不断发展,应用中负责管理这些配置的代码将被解耦出来,有助于降低应用程序的复杂性。我们对代码共享的首次探索,是让内部体验管理工具Hendrix实现移动SDK。

Hendrix的核心是一种简单的解释性语言,用于表示配置值的计算方法。这些表达式能在当前应用会话语境中进行评估,还可以访问A/B测试分配、位置、设备属性等数据。在我们的用例中,配置了可用的制作方法、版本以及特定区域应用功能集等。

较差的网络连接,加上用户活动响应中频繁变更的配置值,都表明用户设备端的规则评估优于服务器端的规则评估。

为此,我们需要创建轻量化Hendrix移动 SDK——在这方面,Kotlin Multiplatform凭借着强大的业务逻辑和彻底的平台无关性脱颖而出,成为不二之选。

图源:unsplash

 

实现

为了简便起见,这里不再介绍Hendrix中的具体细节,主要讲讲使用Kotlin Multiplatform替代Kotlin/Swift时存在的一些差异。

创建

对Android系统来说,一切照常运行,不受太大影响。Hendrix MultiplatformSDK通过gradle以Android库项目依赖项的形式导入,方式与其他依赖项相同。而在iOS系统中,本地二进制文件作为通用框架包含在Xcode项目中。

面向开发者的人体工程学

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

通过Xcode调试 Kotlin源代码

网络

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

磁盘高速缓存

当然,有时也会出现网络连接不可用的情况,因此需要将下载的规则集缓存到磁盘中。为此,我们使用SQLDelight及其在Android系统和本地数据库中的驱动程序实现Multiplatform的持久存储。

过去几年来,我们密切关注Kotlin Multiplatform的发展,也坚信这项技术已经迎来拐点。面向Xcode的工具与系统集成创建已经显著提升,相比较不用编写和维护多个特定平台的实现所带来的好处,集成和维护的复杂度要小很多。

我们的Android与iOS Studio应用之间还存在着广阔的代码共享空间。也许未来Kotlin Multiplatform与JavaScript之间也能实现代码转换,相信这也将是个非常有趣的话题。

一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值