运用那种方法集成

先运用kmp一致一部分事务逻辑,后期慢慢一致悉数事务逻辑。

根据ComposeMultiplatform的开展进度再决议UI层是否一致。

所以现在事务集成的方法如下图所示。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

为什么选用这种集成方法。

因为工程代码比较多有些代码比较久,有些根底库代码运用kmm集成会有不知道的坑。所以先运用kmm一致部分逻辑。为什么UI层面不运用CMP一致,因为现在咱们UI运用自定义的控件比较多,外加CMP在ios渠道中还处于alpha版别,所以UI层面悉数运用原生控件也有更好的功能。

在双端的集成运用

东西和版别装备

Androidstuio

主张Androidstudio运用最新的版别我现在运用的版别是AndroidStudioIguana|2023.2.1Beta2。

Plugin

在Androidstudio设置页面plugins中marketplace中搜索KotlinMultiplatformMobile然后点击下载装置。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

在install页面查看Kotlinplugin是否装置,假如没有装置需求装置Kotlinplugin组件。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

Xcode

主张装置当时系统支持的最新版别。

JDK

现在我装置的是jdk17,主张运用这个版别。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

Cocoapods

分为几个步骤

装置Homebrew

装置Ruby,我现在装置的版别。ruby可能会有utf-8的问题,网上搜一下装备一下环境变量解决。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

最后装置Cocoapods。

Kdoctor

前面几步装备好了,运用Homebrew装置Kdoctor。

Kdoctor是装备环境检测东西。运转Kdoctor终究显现如下。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

假如都显现的是绿色的对号,证明环境装备现已没有问题了。

创立KMM工程

不要运用KotlinMultiplatformwizard这个网站创立工程,直接运用Androidstudio创立工程。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

在创立工程时装备ios时依靠挑选cocoapodsdependencymanager。

为什么运用这个选项?

咱们ios项目中运用的库绝大部分是用pod来进行办理的。假如咱们需求运用这些库,需求依pod的方法增加进来。

终究工程结构

KMP 跨端在Android 和iOS 原生工程中的集成和运用

终究工程目录如上所示。

咱们一切的事务逻辑都写在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版别

KMP 跨端在Android 和iOS 原生工程中的集成和运用

其他装备

KMP 跨端在Android 和iOS 原生工程中的集成和运用

KMP 跨端在Android 和iOS 原生工程中的集成和运用

假如新建的项目不能正常运转,能够参阅我装备的版别,我这边本地能够正常运转。

引进和运用三方库

经过以上的装备咱们的工程能够正常在Android手机和ios手机上跑起来了。

假如要依靠三方库,咱们还需求一些装备。咱们根据不同三方库的类型来分别讲解。

现已适配完结的跨端库

这种类型的库现已完结了跨端适配,只需求在commonMain里增加依靠就能够。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

成功引进第三方库后咱们就能够在commonMain目录的代码里运用这个库了,其他目录里无法运用。

Android和iOS原生的三方库

这种类型的库便是原生开发最常用的库,没有进行跨端适配。所以不能在commonMain中引进,只能分渠道引进。

Android引进

在androidMain中进行装备就能够。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

成功引进第三方库后咱们就能够在androidMain目录的代码里运用这个库了,其他目录里无法运用。

iOS引进

因为咱们创立工程时ios依靠装备是由cocoapods办理,所以引进依靠文件也需求在cocoapods里装备。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

pod依靠方法依照以上方法进行依靠,假如需求更多的依靠方法参阅示例github.com/Kotlin/kmm-…

成功引进第三方库后咱们就能够在iosMain目录的代码里运用这个库了,其他目录里无法运用。

留意咱们引进的是ios的原生库,但在iosMain目录代码里咱们是依kotlin代码的方法运用的ios原生库。

详细是怎样完结的能够参阅kotlinlang.org/docs/native…

proandroiddev.com/kotlin-nati…

运用引进的三方库

androidMain代码直接运用就能够,正常的导入包。

iosMain代码因为运用的Cinterop东西转入的,所以依照一下方法导包。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

事务出包集成到原生工程中

经过以上的装备咱们现已能够正常开发事务需求了。可是咱们的目的是运用这个工程给Android和iOS原生工程出依靠包。

Android端出依靠包

履行shared下的gradletask,正常出包就行。

留意出的包只包括commonMain中的依靠,不包括androidMain中的依靠,所以假如在原生工程中运用依靠的包需求把androidMain中的依靠增加到原生工程中。

iOS端出依靠包

履行shared下的gradletask。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

KMP 跨端在Android 和iOS 原生工程中的集成和运用

履行红圈的task就行,不同选项对应的不同装备,能够依照自己的需求进行出包。

履行完后出的包在shared/build/bin目录下。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

把shared.framework目录全体拷贝到ios工程目录下。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

放到这个目录下。

留意shared.framework目录下只包括commonMain的代码和依靠,不包括上面说到的cocoapods装备的依靠。

假如要在ios原生工程中运用这个framework,需求把cocoapods装备的依靠也装备到原生工程中。否则会提示编译报错。

ios原生工程能够直接运用咱们导出库的逻辑。

KMP 跨端在Android 和iOS 原生工程中的集成和运用

结束

至此,咱们现已跑通了悉数的事务逻辑。

虽然咱们现已跑通了全体逻辑,可是假如cocoapods有其他依靠的方法咱们还需求探讨,还有工程化主动打包装备都需求考虑。更深入的部分能够参阅一下链接。

blog.csdn.net/ctrip_tech/…

kotlin.liying-cn.net/docs/refere…

kotlin.liying-cn.net/docs/refere…

proandroiddev.com/kotlin-nati…

kotlinlang.org/docs/native…

coderyuan.com/2021/05/31/…

juejin.cn/post/721811…

juejin.cn/post/721441…