收藏文章 楼主
如何实现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. 疯狂打压华人精英,勒令华人CEO辞职… 川普政府的致命错误?
  2. 宗庆后家族的多处海外房产曝光,价值数亿元!
  3. 蔡文胜的2025大动作之五,香港投资版图在持续扩张!
  4. 盘点“数字游民”的精选停留地!2025“逃离美国”指南
  5. 英伟达的市值突破了四万亿美元,创人类历史纪录!
  6. 川普政府在力推药价改革和数字医疗系统
  7. 麻省理工学院发布AI学习平台“MIT Learn”
  8. 川普政府的对华政策突然改变了?
  9. 突然“失去住持”的少林寺情况如何了?
  10. 中美经贸谈判重启,瑞典磋商和商界代表团访华“双管齐下”
  11. 为激励员工,OpenAI打算豪掷96亿美元!
  12. 中国政府在构筑战略资源防线,重拳打击稀土走私!
  13. 美国年轻人的“中国观”悄然转变
  14. 香港永居 vs 美国国籍:身份选择背后的生活考量
  15. 苹果投资了6000亿美元,加速“美国制造”计划!
  16. 在美国可以感受欧洲风情的五座小镇
  17. 孩子沉迷手机的真相和破局之道
  18. 中美连谈5小时,川普总统公开感叹“中国太强硬”… 英伟达在加紧扩大芯片出口量
  19. 川普政府打算“发钱啦”
  20. 遥控器电池,被幼儿误吞… 欧系保险公司赔付了近1.4亿元人民币!
  21. 中国🇨🇳开始质疑英伟达芯片“存后门”
  22. 比尔盖茨的财富突然蒸发了510亿美元,真相却令人肃然起敬!
  23. “外星来客”以每小时21.6万公里的速度向地球飞来
  24. 健身网红在飞机上的着装引争议
  25. 核聚变技术或将成为黄金价格的颠覆者
  26. 川普政府计划改革移民签证制度和入籍考试
  27. 川普家族竟然靠它狂揽45亿美金!操盘手是赵长鹏?
  28. 萝莉岛是美国的政治中心?马斯克并非不懂政治,而是太懂了!
  29. 美国再次宣布退出联合国教科文组织
  30. 工作日没空?周末集中运动同样有益健康!
  31. “全球最强护照”排行榜又更新了(2025版)
  32. 川普总统签署了“对等关税令” 引发全球震荡
  33. 广西防城港“奔驰女司机事件”引发全网热议
  34. 房子属于你,但你得付费受他们管着!关于美国HOA
  35. 川普总统批评支持者,马斯克激烈回应!
  36. 川普总统“访华表态”继续反复

美国动态 美果搜索

Your IP: 216.73.216.165, 2025-08-19 21:05:29

Processed in 0.957 second(s)

头像

用户名:

粉丝数:

签名:

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