用Kotlin进行跨平台开发,看这一篇就够了
在移动开发领域,跨平台解决方案一直是热门话题。从最初的React Native到现在的Flutter和Compose,这些框架主要集中在UI层的跨平台,而Kotlin Multiplatform Mobile(KMM)则采取了不同的思路,专注于业务逻辑的跨平台共享。本文将介绍KMM的基本概念和入门实践。
KMM是一个SDK,旨在简化跨平台移动应用的开发。它允许开发者在iOS和Android应用之间共享通用代码,仅在必要时编写平台特定代码。简而言之,KMM注重业务逻辑的跨平台,与Flutter等UI框架形成互补。尽管目前主要处理业务逻辑,但KMM未来也可能扩展到UI层。
环境配置与HelloWorld
要开始使用KMM,首先需要一台Mac电脑并安装高版本的Android Studio。在Android Studio中搜索并安装“Kotlin Multiplatform Mobile”插件,建议同时将Kotlin插件升级到最新版本以避免兼容性问题。
安装插件后,可以创建一个Kotlin Multiplatform App项目。输入项目名称并选择配置,在iOS框架分发列表中选择常规框架选项以简化演示。创建完成后,项目结构包括androidApp、iOSApp和shared共享模块。
shared模块包含三个源集:androidMain、commonMain和iosMain。源集是Gradle中用于逻辑分组文件的概念,每个组有自己的依赖项。在KMM中,共享模块的不同源集可以针对不同平台。例如,commonMain可以使用多平台库如Koin、Apollo和Okio,而androidMain和iosMain则使用各自生态系统的常规库。
运行程序时,KMM插件允许在Android Studio中选择iOS模拟器,前提是已配置好Xcode或相关环境。这里以运Android程序为例,结果显示来自shared模块中commonMain下的Greeting类,其代码输出平台名称。在iOS设备上运行则会显示iOS版本号。
实现元旦倒计时功能
接下来,我们实现一个简单的元旦倒计时功能,计算当前距离元旦还有多少天。这属于公共逻辑,因此在shared模块的build.gradle.kts文件中添加依赖。
在commonMain中添加kotlinx-datetime库的依赖。然后,在shared/src/commonMain/kotlin目录下创建Kotlin文件,编写函数计算天数差。修改Greeting类的greeting方法,返回倒计时信息。运行程序后,Android和iOS应用都会显示相同的结果。
实现网络请求功能
对于更实用的例子,我们实现网络请求功能。首先在shared模块中添加依赖,包括Kotlin协程、序列化库和Ktor网络框架。在commonMain中配置这些依赖,并在androidMain和iosMain中分别添加平台特定的Ktor客户端库。
使用“wandroid”网站的每日一问接口作为示例。创建Api对象定义接口地址,然后编写HttpUtil类来创建HttpClient并实现获取数据的方法。这里使用了Ktor的内容协商和JSON序列化功能。
在Android端,使用Compose编写页面层,通过按钮点击触发协程进行网络请求,并将返回的数据显示为JSON字符串。这演示了如何共享业务逻辑,而页面层则根据平台独立实现。
总结
通过以上示例,你已经入门了KMM的基本使用。KMM允许在跨平台移动开发中高效共享业务逻辑代码,减少重复工作。随着Jetpack等库对KMM的支持,其生态系统正在不断发展,为开发者提供了更多可能性。在实际项目中,可以根据需求深入探索KMM的更多高级功能。