收藏文章 楼主
如何实现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. 英伟达H200芯片的对华销售仍然在受美国的两重限制
  4. 美国仍然依赖纸质信件的真相剖析
  5. 学习英语12年后,终于实现了“美国梦”!
  6. 顶级文凭可早获绿卡!H1B签证“全新加权”抽签制度生效
  7. 一美分硬币“Penny”铸造历史正式终结
  8. 美国华人揭示的五大高收入职业
  9. 黄仁勋警示川普政府,再不开放“对华AI芯片出口”就来不及啦!
  10. 多名移民法官在同时期被解雇,引发司法危机
  11. 特朗普总统宣布“平安夜”和“节礼日”也放假
  12. 美国移民局(ICE)新提案打算限制福利使用,有记录者可能影响绿卡申请!
  13. 强制注销户口?传闻中国在加强双重国籍监管
  14. 美宝家庭关切:双国籍审查和户口注销真相
  15. 美国在AI竞争中失利了?阿里千问模型在全球领先
  16. 在特朗普访华之前,白宫向中国“递三份礼物”
  17. 美国政府批准了对台3.3亿美元的军售
  18. 川普政府再次出奇招!拒绝所有胖子的移民申请?
  19. 在海外漂泊12年后的真实感受
  20. 中美高层通话后… 川普总统计划明年访华,芯片管制也松口了!
  21. 联邦政府启动“红色日落行动” 审查比特币矿机的供应链
  22. 川普总统正式签属涉台法案,解放军示警!
  23. 马斯克指控“美国慈善家”做空特斯拉,涉案逾百亿美元!
  24. 2026年版的“公共负担”新规复活,华人家庭遭遇精准打击!
  25. 川普政府终于听说了日本新首相【高市早苗】因为台海表态引发外交危机的事儿了?
  26. MIT稳居了CS榜首!美国大学的最新排名出炉
  27. 五角大楼的机密报告:中国导弹可以击沉美军航母
  28. 中美经贸磋商“展现战略对称”新态势
  29. 中美AI竞争的新格局已定?
  30. 感恩节餐桌的费用回落,零售商推出了低价套餐!
  31. 中美两国元首在釜山会晤:就关税、大豆和稀土已经达成共识
  32. SpaceX在加速IPO计划,目标估值1.5万亿美元!
  33. ICE启动了在社交媒体的全天候监控项目
  34. 人类史上“最贵CEO”诞生!马斯克的“万亿薪酬”背后
  35. 外国人的入境中国手续简化,可以提前在网上填报入境卡了!
  36. 恢复或加入?重获中国国籍的路径比较
头像

用户名:

粉丝数:

签名:

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