收藏文章 楼主
如何实现Android与iOS的APP共用一套代码?看Netflix如何做的
网友【chuang】 2020-11-07 17: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 17:02:11  回复

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

暂无用户组 升级
退出
等级:0级
美果:
美过
精华推荐
  1. 为何大火一直“不放过”洛杉矶?
  2. 全美境内,非法移民“驱逐战”打响了!
  3. 川普总统公开表示美中联手可以解决世界上所有问题,当日还会见了TikTok首席执行官!
  4. 在美国买房的省税攻略“十个妙招”
  5. 警告川普和马斯克的?美军特种兵策划了Cybertruck爆炸案
  6. 川普总统“喜获”年度人物封面,商界CEO们开始“跪舔”!
  7. 美国最高法院“无视了”川普的延期请求?TikTok在下周关闭了!
  8. 周受资 ~ 真正强大的CEO
  9. 重大胜利🤑川普总统“又赢了一把”
  10. 中国企业在2025 CES“疯狂圈粉儿”
  11. 首次入境美国在旧金山机场遭遇了小黑屋
  12. 移民故事:在北美生活十年后的“回头路”
  13. 怪自己心善帮错人!美国华人在Costco购物后,被警察抄家!
  14. 川普总统在接任首日或将推上百项行政命令
  15. 拿英伟达“开刀”,是中国GPU自主化的一步险棋!
  16. “复活版”TikTok“拿捏了”美国人的软肋?
  17. 胃癌发病率和筷子🥢有关系?
  18. 川普总统正式接任,成为美国第47任总统
  19. 金牌讲师在洛杉矶的生存之道
  20. 态度“回归自然”了?川普胜选后首次接受电视访谈
  21. 中国电影市场的2025春节档 ~ 简直就是神仙打架
  22. 美国政府即将全面解除对华限制?
  23. 罪犯也能当总统?美国的底线呢?
  24. TikTok在美国全面恢复了
  25. 川普总统在开工首日就向1300万非法移民动手了
  26. “CEO杀手”或面临死刑?超级明星律师为其辩护,好莱坞的专题纪录片即将开机拍摄!
  27. “TikTok难民”如何玩转中国社交网络?一夜间“小红书”刷屏全美
  28. 针对纽约州指控,他提出无罪抗辩!
  29. 川普总统首次公开回应“TRUMP”数字货币项目
  30. 最后期限了,TikTok将会卖给谁?伊隆·马斯克?
  31. 以色列和哈马斯终于同意停火
  32. 十年了,马航MH370的新一轮探寻工作开启?
  33. 美军再次增建两艘新航母
  34. 全美最昂贵房产分布的邮政编码榜单出炉
  35. 中美关系的新篇章?中国的人民日报开始征集“中美友好合作故事”
  36. 川普总统公开称赞中方领导人,认可中美可以友好相处!

美国动态 · 美果转盘 · 美果商店

Your IP: 18.191.154.143, 2025-02-04 06:02:00

Processed in 0.60414 second(s)

头像

用户名:

粉丝数:

签名:

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