运用那种方法集成
先运用kmp一致一部分事务逻辑,后期慢慢一致悉数事务逻辑。
根据ComposeMultiplatform的开展进度再决议UI层是否一致。
所以现在事务集成的方法如下图所示。
为什么选用这种集成方法。
因为工程代码比较多有些代码比较久,有些根底库代码运用kmm集成会有不知道的坑。所以先运用kmm一致部分逻辑。为什么UI层面不运用CMP一致,因为现在咱们UI运用自定义的控件比较多,外加CMP在ios渠道中还处于alpha版别,所以UI层面悉数运用原生控件也有更好的功能。
在双端的集成运用
东西和版别装备
Androidstuio
主张Androidstudio运用最新的版别我现在运用的版别是AndroidStudioIguana|2023.2.1Beta2。
Plugin
在Androidstudio设置页面plugins中marketplace中搜索KotlinMultiplatformMobile然后点击下载装置。
在install页面查看Kotlinplugin是否装置,假如没有装置需求装置Kotlinplugin组件。
Xcode
主张装置当时系统支持的最新版别。
JDK
现在我装置的是jdk17,主张运用这个版别。
Cocoapods
分为几个步骤
装置Homebrew
装置Ruby,我现在装置的版别。ruby可能会有utf-8的问题,网上搜一下装备一下环境变量解决。
最后装置Cocoapods。
Kdoctor
前面几步装备好了,运用Homebrew装置Kdoctor。
Kdoctor是装备环境检测东西。运转Kdoctor终究显现如下。
假如都显现的是绿色的对号,证明环境装备现已没有问题了。
创立KMM工程
不要运用KotlinMultiplatformwizard这个网站创立工程,直接运用Androidstudio创立工程。
在创立工程时装备ios时依靠挑选cocoapodsdependencymanager。
为什么运用这个选项?
咱们ios项目中运用的库绝大部分是用pod来进行办理的。假如咱们需求运用这些库,需求依pod的方法增加进来。
终究工程结构
终究工程目录如上所示。
咱们一切的事务逻辑都写在shared目录。commonMain目录写Android和ios渠道无关的事务代码,只能运用kotlin言语完结。androidMain目录写渠道相关代码,kotlin言语java言语都能够完结,不过还是主张kotlin言语。
iosMain目录写渠道相关代码运用kotlin言语,不能够运用java言语。
androidApp目录
壳工程应用程序的入口,用于调试调用shared工程的代码。
iosAPP目录
壳工程应用程序的入口,用于调试调用shared工程的代码。
commonMain目录
写通用的事务逻辑,不触及渠道相关的代码。
androidMain目录
写commonMain里边详细触及到Android渠道API的完结。
iosMain目录
写commonMain里边详细触及到iOS渠道API的完结。
关于gradle和工程装备问题
此处是关于kotlin版别和agp版别gradle版别装备问题。
gradle版别
其他装备
假如新建的项目不能正常运转,能够参阅我装备的版别,我这边本地能够正常运转。
引进和运用三方库
经过以上的装备咱们的工程能够正常在Android手机和ios手机上跑起来了。
假如要依靠三方库,咱们还需求一些装备。咱们根据不同三方库的类型来分别讲解。
现已适配完结的跨端库
这种类型的库现已完结了跨端适配,只需求在commonMain里增加依靠就能够。
成功引进第三方库后咱们就能够在commonMain目录的代码里运用这个库了,其他目录里无法运用。
Android和iOS原生的三方库
这种类型的库便是原生开发最常用的库,没有进行跨端适配。所以不能在commonMain中引进,只能分渠道引进。
Android引进
在androidMain中进行装备就能够。
成功引进第三方库后咱们就能够在androidMain目录的代码里运用这个库了,其他目录里无法运用。
iOS引进
因为咱们创立工程时ios依靠装备是由cocoapods办理,所以引进依靠文件也需求在cocoapods里装备。
pod依靠方法依照以上方法进行依靠,假如需求更多的依靠方法参阅示例github.com/Kotlin/kmm-…
成功引进第三方库后咱们就能够在iosMain目录的代码里运用这个库了,其他目录里无法运用。
留意咱们引进的是ios的原生库,但在iosMain目录代码里咱们是依kotlin代码的方法运用的ios原生库。
详细是怎样完结的能够参阅kotlinlang.org/docs/native…
proandroiddev.com/kotlin-nati…
运用引进的三方库
androidMain代码直接运用就能够,正常的导入包。
iosMain代码因为运用的Cinterop东西转入的,所以依照一下方法导包。
事务出包集成到原生工程中
经过以上的装备咱们现已能够正常开发事务需求了。可是咱们的目的是运用这个工程给Android和iOS原生工程出依靠包。
Android端出依靠包
履行shared下的gradletask,正常出包就行。
留意出的包只包括commonMain中的依靠,不包括androidMain中的依靠,所以假如在原生工程中运用依靠的包需求把androidMain中的依靠增加到原生工程中。
iOS端出依靠包
履行shared下的gradletask。
履行红圈的task就行,不同选项对应的不同装备,能够依照自己的需求进行出包。
履行完后出的包在shared/build/bin目录下。
把shared.framework目录全体拷贝到ios工程目录下。
放到这个目录下。
留意shared.framework目录下只包括commonMain的代码和依靠,不包括上面说到的cocoapods装备的依靠。
假如要在ios原生工程中运用这个framework,需求把cocoapods装备的依靠也装备到原生工程中。否则会提示编译报错。
ios原生工程能够直接运用咱们导出库的逻辑。
结束
至此,咱们现已跑通了悉数的事务逻辑。
虽然咱们现已跑通了全体逻辑,可是假如cocoapods有其他依靠的方法咱们还需求探讨,还有工程化主动打包装备都需求考虑。更深入的部分能够参阅一下链接。
kotlin.liying-cn.net/docs/refere…
kotlin.liying-cn.net/docs/refere…