ios开发 引入的第三方framework变红_Kotlin跨平台开发(一)
Kotlin跨平台开发今天我们来简单介绍一下使用kotlin进行跨平台开发,使得一处代码,多处运行。一、简介首先,我摘取了一些官方文档上的基本介绍。kotlin语言在一开始设计的时候就有一个明确的目标,那就是能够在所有平台上使用,能够使用kotlin开发任意平台的应用。 同时kotlin还有一个重要的目标,就是能够在不同平台间共享代码。kotlin不仅可以编译为jvm平台的字节码文件,还能够直接编
Kotlin跨平台开发
- 今天我们来简单介绍一下使用kotlin进行跨平台开发,使得一处代码,多处运行。
一、简介
首先,我摘取了一些官方文档上的基本介绍。
kotlin语言在一开始设计的时候就有一个明确的目标,那就是能够在所有平台上使用,能够使用kotlin开发任意平台的应用。 同时kotlin还有一个重要的目标,就是能够在不同平台间共享代码。
kotlin不仅可以编译为jvm平台的字节码文件,还能够直接编译成二进制文件以及js文件。有了对 JVM、Android、JavaScript、iOS、Linux、Windows、 Mac 甚至像 STM32 这样的嵌入式系统的支持,Kotlin 可以处理现代应用程序的任何组件与所有组件。 这为代码与专业知识的复用带来了宝贵的收益,节省了工作量去完成更具挑战任务,而不是将所有东西都实现两次或多次。
它是如何工作的
总得来说,多平台并不是为所有平台编译全部代码。这个模型有其明显的局限性,我们知道现代应用程序需要访问其所运行平台的独有特性。Kotlin 并不会限制你只使用其中所有 API 的公共子集。 每个组件都可以根据需要与其他组件共享尽可能多的代码, 而通过语言所提供的 expect/actual 机制可以随时访问平台 API。
expect/actual
在一些情况下我们可能需要针对不同的平台编写不同的代码。 这时我们需要通过expect关键字在公共代码部分定义需要在不同平台实现的类或者方法,然后在各平台对应的目录下通过actual关键字去实现对应的类或方法。 如图中所示,在公共代码部分,writeLogMessage方法通过expect关键字定义。
然后我们需要在不同的平台中去实现该方法 如js平台的实现:
jvm平台的实现:
多平台库依赖其他多平台库
二、项目搭建
(一)项目创建
这里建议使用最新的idea,虽然理论上项目使用gradle构建,用Android studio应该也是没问题的,但是idea自带项目骨架,还是方便不少。
1.使用idea新建项目,在kotlin项目中选择Multiplatform Library
小技巧:
- 默认的项目构建依赖的gradle版本本地没有,需要下载,此时可终止任务,修改本地存在的较新版本的gradle。
- 项目默认会构建macos平台,会下载相关依赖库,如果不需要macos平台可以终止任务后在build.gradle中移除macos相关配置
(二)项目结构
创建项目后会自动生成以下目录
commonMain目录是公共代码所在的目录
注:默认没有iOS目录,如果需要iOS平台需自行手动创建
commonMain内的结构和普通项目类似
(三)项目build.gradle
默认文件:
根据需求修改后的文件
提示:Kotlin版本、Gradle版本、Xcode版本、系统版本都存在依赖关系,所依赖的第三方库也存在依赖关系建议均使用最新版本可以通过maven仓库搜索查看最新版本
四、打包发布
(一)执行打包任务
打开右侧gradle面板
执行assemble任务
然后在项目目录下可以看到build目录
(二)本地依赖包
在build目录我们可以找到各个平台需要的库文件
在bin目录下可以找到iOS平台需要的framework文件。 js目录下是js平台可以使用module。 jvm以及Android平台可以直接使用libs目录下的xxx-jvm-version.jar文件
(三)上传maven仓库
我们也可以使用maven-publish插件将库上传到maven仓库中。 构建脚本会分个平台生成多个平台的jar包,然后上传至maven。
apply plugin: 'maven-publish'
在build.gralde文件中引用maven-publish插件,并配置后,在右侧gradle的面板中即可看到对应的publish任务
1.本地maven仓库上传
执行publishToMavenLocal任务即可将各平台库打包成jar并发布到本地的maven仓库中。 我们也可以选择性的发布某一个平台的jar到本地maven仓库中。
2.远程maven上传
执行publish任务即可将各平台库打包并发布到本地的maven仓库中。
(三)npm仓库上传
对于npm仓库的上传,可直接修改build/js目录下pacakage.json的相关配置,然后执行npm publish命令进行上传
五、库的使用
kotlin跨平台技术实际上已经为我们生成了各平台对应的库,在库的使用上与以往没有什么差别。 Android和jvm平台可以使用本地或maven仓库中jvm平台的jar包 iOS平台可以使用build目录下生成的framework库文件 js平台可以将build/js目录作为module使用,或将module上传至npm
下一章我们将继续介绍在多个平台能同时使用的网络库、序列化库,使网络请求相关的代码只需要一份,即可在多个平台运行。
更多推荐

所有评论(0)