收藏文章 楼主
如何实现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. AI半壁江山是中国人?黄仁勋“敲警钟”:美国须觉醒!
  3. 美国驻华大使馆:“赴美生子”一律拒签
  4. 关税战持续了96小时… 突然大反攻?
  5. 美国《时代》周刊:DeepSeek【梁文锋】
  6. 美国“大规模”取消国际留学生的签证
  7. 华尔街“教父”空降北京,李嘉诚的“228亿美元交易”突遭截胡
  8. 川普总统:在未来几周内开始发放“金卡签证”
  9. 哪些关键技术决定了如今大模型格局?Google的首席科学家“万字演讲”回顾AI发展的十年
  10. 【读懂AI Agent】MetaGPT、Mila、斯坦福、耶鲁、谷歌的合作论文
  11. 在量子世界“玩儿游戏”?物理学家展示了量子计算机的新前景
  12. 盘点美国最繁华的城市 top10
  13. 这位美国年轻人在中国玩儿一圈,浪费掉美国政府的16亿美金?
  14. 遭遇无故吊销学签,藤校的中国留学生起诉且赢了🇺🇸国土安全部!
  15. 瞄准美国公民了?川普总统的“驱逐行动”在变本加厉
  16. 关于“跨国婚姻”婚姻绿卡,给配偶申请绿卡的各种细节问题!
  17. 美国小伙儿在武当山修行十余年,终于获得“中国绿卡”了!
  18. 中国“不陪川普玩”了… 从此不理会美方闹剧!
  19. 2025年,必须认识的一个英文单词 ~ tariff
  20. 美国人在凌晨三点排队,不为苹果手机… 竟然是为中国毛绒玩具“拉布布”?
  21. 中美关税战的最佳写实作品~乌合麒麟发布《就不跪》
  22. 中美博弈2.0了?川普政府“百日执政”,撤回对华善意!
  23. 独自搭乘美国硬座火车,52小时横穿美国!
  24. BBC:在川普政府的关税打击下,为何中国不低头?
  25. 近半数中国小包裹的接收人是贫困美国百姓?
  26. 美国华人在近期出入境美国,绿卡和签证的持有者须知!
  27. 让人意外!股神【巴菲特】突然宣布退休
  28. 童工可以合法夜班了?
  29. 贸易战的结局已定?中美两国“各退一步”?
  30. 川普关税政策可能导致意外后果
  31. 华人科学家再次遭遇系统性排查,75%留美学者“萌生去意”!
  32. 台湾政府:一场误会呀
  33. 马斯克的丑闻?和多名女性有染,有上百个孩子?
  34. 这小伙年仅25岁,已经是百亿美金公司的创始CEO了!
  35. 百万民众“上街游行”抗议川普政府的百天?
  36. 中方意识到谈判时机已至?迅速派出“王牌代表应邀”和美国财长会面了

美国动态 美果搜索

Your IP: 3.145.106.222, 2025-05-12 14:52:46

Processed in 0.10597 second(s)

头像

用户名:

粉丝数:

签名:

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