收藏文章 楼主
如何实现Android与iOS的APP共用一套代码?看Netflix如何做的
网友【chuang】 2020-11-07 09:02:11 分享在【时代发展的印记】版块    1    3

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

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

网友分享在meiguo.com上的图片
Kotlin Multiplatform

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

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

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

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

在我们的 Android 与 iOS 应用当中,近 50% 的生产代码与底层平台保持解耦。

我们能够灵活探索不同平台(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 插件使用。

网友分享在meiguo.com上的图片
通过 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

出处:头条号 @InfoQ

meiguo.com 发布人签名/座右铭我已经有美国绿卡了,只差美果绿卡啦!
大家都在看
楼主新近贴
回复/评论列表
默认   热门   正序   倒序
meiguo.com 创始人

emotion

3   2020-11-07 09:02:11  回复

回复/评论:如何实现Android与iOS的APP共用一套代码?看Netflix如何做的

暂无用户组 升级
退出
等级:0级
美果:
美过
精华推荐
  1. 全球AI人才的争夺战白热化,顶尖研究员成为了科技巨头争夺焦点
  2. 中美通话的内容简短,但意味深长!
  3. 中美各自取消91%关税!为防🇺🇸川普政府反悔,🇨🇳重申关键问题!
  4. 韦伯望远镜(JWST)发布迄今为止最大的早期宇宙地图
  5. 任天堂的Switch 2正式发售,参数细节全曝光!
  6. 盖茨列出了10项改变世界的技术名单
  7. 判刑15年!发币ICO的定性为诈骗
  8. 美国“非法移民家庭”遣返行动引发了“婴幼儿无国籍”的危机
  9. 美国房价仍然高位,“美国梦”成奢望!
  10. 旅居海外十几年,母亲是心头之痛!
  11. 在美国,千万别做的这些事盘点!
  12. 嘴唇经常干裂起皮,或许并非缺水!
  13. 英国2岁男童竟然刷新了门萨俱乐部“最年轻男性”会员纪录
  14. 世界瞩目的电话,十个不寻常的细节剖析!
  15. 出乎全世界意料,中美两国的“2025日内瓦谈判”太亲密了吧?
  16. 美国暂停了学生签证预约,申请者在社交媒体平台的活动须谨慎!
  17. 美国联邦调查局警示:“新型医疗保险”骗局泛滥
  18. 中美贸易战的谈判再起,稀土贸易成为焦点
  19. 川普和马斯克的公开交锋升级了
  20. 手机充电习惯是影响电池寿命的根本原因
  21. 马斯克声称川普在“爱泼斯坦名单”,白宫回应:局面令人遗憾!
  22. “蜗居”纽约的中国穷人:男女同住,毫无私隐… 却坚持不肯回国
  23. 美国企业在强化回归办公室的工作要求
  24. 中美两国元首针对当下双边关系和经贸合作,☎️通话交流!
  25. QQ等级256级用户诞生,首次解锁“时光企鹅”图标!
  26. 能熟练运用AI也不行?硅谷的40万人在近期被炒鱿鱼
  27. 川普家族“哈佛风波”和签证政策的突变
  28. 川普总统:加拿大可以免费加入“金穹”导弹防御系统
  29. 美国对华为“HarmonyOS”采取行动,引发科技领域的新争议!
  30. 川普政府的关税政策或将加速中国崛起,助力中国成为全球的经济主导力量!
  31. 鲁比奥声称将会收紧中国留学生的签证审批政策
  32. 马斯克的“130天政府生涯”终结后…
  33. 金星地壳似乎剧烈变化了,NASA即将启动新任务探索求证!
  34. 马斯克打算组建新党“美国党”代表中间派
  35. 互联网女皇“340页AI报告”猛料刷屏
  36. 属于中国的世纪可能已经到来

美国动态 美果搜索

Your IP: 216.73.216.9, 2025-07-06 09:55:04

Processed in 0.04499 second(s)

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息