Netflix成功实现让安卓与IOS共用

河南白癜风QQ交流群 http://liangssw.com/shishang/12953.html
全文共字,预计学习时长6分钟图源:Google近些年,Netflix一直在开发一款名为Prodicle的移动应用程序,借此推进电视节目和电影制作领域的创新。如今,实体制作领域发展迅速,不同国家、地区,甚至不同生产部门之间,对实体制作的要求亦是不同。实体制作的独特性质,要求我们在分布式环境中的设备上开发出高写入软件,可只有不到三分之一的用户设备能同时连接上可靠的网络,设备的容错能力也相当有限。作为一支小型工程团队,我们逐渐意识到,必须不断优化产品,提高产品可靠性和交付速度,才能满足客户不断变化的需求。由于用户很可能连接上不可靠的网络,因此我们决定推出移动解决方案,增强客户端持久性和离线支持能力。为了快速交付产品以满足客户需求,我们决定尝试使用一套多平台架构。目前我们正在这一点上发力,使用KotlinMultiplatform编写平台无关性业务逻辑,并通过Kotlin/Native技术将其编译为分别面向Android系统的Kotlin库和面向iOS系统的本地通用框架。KotlinMultiplatformKotlinMultiplatform支持用户在处理iOS和Android应用程序的业务逻辑时使用单一代码库。用户只需在必要时编写特定平台的代码即可,例如实现本地UI或使用特定平台的API时。KotlinMultiplatform与以往各类知名跨平台移动开发技术有所区别。其它技术不是抽象化就是全面取代平台特定应用开发,而KotlinMultiplatform是对当前平台特定技术的补充,致力于取代平台无关性业务逻辑。换言之,KotlinMultiplatform是工具箱中新增的工具,而非取代整个工具箱。事实证明,新方案行之有效:·我们的Android和iOSstudio应用获得了共享架构,能够在两套平台上编写相似甚至完全相同的业务逻辑。·在我们的Android和iOS应用中,近50%的影视制作代码与底层平台实现解耦。·我们可以畅通无阻地探索不同平台(AndroidJetpackCompose、SwiftUI等)上提供的最新技术。那么,我们是如何使用KotlinMultiplatform的呢?体验管理如上所述,不同生产部门之间的实际需求存在巨大差异。这意味着我们需要大量应用程序配置来切换可用功能,并为每个生产部门优化应用内部体验。随着应用的不断发展,应用中负责管理这些配置的代码将被解耦出来,有助于降低应用程序的复杂性。我们对代码共享的首次探索,是让内部体验管理工具Hendrix实现移动SDK。Hendrix的核心是一种简单的解释性语言,用于表示配置值的计算方法。这些表达式能在当前应用会话语境中进行评估,还可以访问A/B测试分配、位置、设备属性等数据。在我们的用例中,配置了可用的制作方法、版本以及特定区域应用功能集等。较差的网络连接,加上用户活动响应中频繁变更的配置值,都表明用户设备端的规则评估优于服务器端的规则评估。为此,我们需要创建轻量化Hendrix移动SDK——在这方面,KotlinMultiplatform凭借着强大的业务逻辑和彻底的平台无关性脱颖而出,成为不二之选。图源:unsplash实现为了简便起见,这里不再介绍Hendrix中的具体细节,主要讲讲使用KotlinMultiplatform替代Kotlin/Swift时存在的一些差异。创建对Android系统来说,一切照常运行,不受太大影响。HendrixMultiplatformSDK通过gradle以Android库项目依赖项的形式导入,方式与其他依赖项相同。而在iOS系统中,本地二进制文件作为通用框架包含在Xcode项目中。面向开发者的人体工程学KotlinMultiplatform源代码可以进行编辑、重新编译,并能够在AndroidStudio和Xcode(包括lldb支持)中配合一款带有断点的调试器。AndroidStudio支持开箱即用,在Xcode中则需要通过TouchLabs提供的xcode-kotlin插件才能使用。通过Xcode调试Kotlin源代码网络Hendrix解释规则集(即远程可配置文件)已下载至设备,这里我们使用Ktor的MultiplatformHttpClient将网络代码嵌入至SDK中。磁盘高速缓存当然,有时也会出现网络连接不可用的情况,因此需要将下载的规则集缓存到磁盘中。为此,我们使用SQLDelight及其在Android系统和本地数据库中的驱动程序实现Multiplatform的持久存储。过去几年来,我们密切


转载请注明:http://www.aierlanlan.com/rzgz/6123.html