收藏文章 楼主
如何实现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. 中国已经全额缴纳了联合国会费,联合国的财政危机缓解!
  2. 川普总统宣布加沙战争结束,峰会聚焦“中东和平”!
  3. 中美AI竞争的新格局已定?
  4. 马斯克的模块化生产技术在革新汽车行业
  5. 45岁后“人生黄金期”是认知和创造力的新高峰
  6. 中美航班“绕行俄罗斯领空”政策引关注
  7. 700万人参与了反川普集会?
  8. 美国青少年“67”流行语的现象引关注
  9. MIT稳居了CS榜首!美国大学的最新排名出炉
  10. 美国“H-1B”签证新规:在境内的申请人,免缴10万美元费用!
  11. Zillow和Redfin“摊上大事儿”!五大州的总检察长起诉了房产平台合谋做局
  12. AWS最大区域故障,带崩多项服务!
  13. 川普总统签署了备忘录,贩毒集团成为“国家之敌”!
  14. 大学排名更新:顶尖学府稳固,新兴学校快速上升
  15. 联邦法院驳回了川普政府的“出生公民权”行政令
  16. 马斯克成为全球首位身家5000亿美元的富豪
  17. 川普政府打算发放两千美元的关税补贴
  18. 中美两国元首在釜山会晤:就关税、大豆和稀土已经达成共识
  19. 人类史上“最贵CEO”诞生!马斯克的“万亿薪酬”背后
  20. 中美稀土博弈,美国政策在急转直下!
  21. 我的人生有三个账户!伊隆·马斯克在斯坦福大学的最新演讲
  22. 川普政府“双失利”?
  23. 一美分硬币“Penny”铸造历史正式终结
  24. 谷歌的科学家已经连续两年摘得了诺贝尔奖
  25. 骨胶水的研发获突破,临床试验显示了安全有效!
  26. 中美因为“稀土管制”引发的贸易摩擦升级了
  27. 黄仁勋警示川普政府,再不开放“对华AI芯片出口”就来不及啦!
  28. 美国司法部起诉了柬埔寨“电信诈骗集团”的头目
  29. 联合国大会“史上最尴尬”一幕:他上台后,观众纷纷撤离!
  30. 华人购房遭遇国籍歧视,法院裁决后依然隐忧犹存!
  31. 佛罗里达的一名中学生在AI提问,然后被捕了!
  32. 中美经贸磋商“展现战略对称”新态势
  33. 美国的房地产市场显现了矛盾信号
  34. 中美贸易的争端升级,中国实施“长臂管辖”颁布3项针对性措施!
  35. 全球高等教育的新趋势:留学生求学地“多元化”
  36. 在美国买房半年后,总结了两个扎心感受!

美国动态 美果搜索

Your IP: 216.73.216.184, 2025-11-21 23:52:21

Processed in 0.10504 second(s)

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息
已有0次打赏
(3) 分享
分享
取消