前言kmm是kotlinMultiplatformmobile(kt移动跨平台)的缩写,目前不是正式版本,但可以使用
kmm跨平台的实现方法是将代码划分为三个块:
安卓原生代码
ios原生代码
kotlin共享代码在Android部分将kotlin共享代码编译为jvm文件,并将其作为lib添加到Android本机代码中。 ios是否要将kotlin共享代码编译为native(oc )? 编写代码并将其引入为框架
(图片来源于kt官网)
这确保了跨平台和平台的灵活性,性能比flutter更好
缺点是现在没有发行,使用的人少资料少。 双端本机代码可能会写得更多。 目前跨平台多功能平台(ui )没有ios版,请立即尝试。 一旦出现了跨平台ui,就应该真正实现跨平台
因为前一个环境是macos系统(苹果电脑),编译ios需要使用macos和xcode
安卓studio北极狐版本(2020.3.1 )以上
通过直接下载jdk-mac安装软件包,可以直接在jdk环境中放置环境变量
本文首先在as上安装kmm插件(用于创建kmm demo )
然后使用new project,kmm插件创建
创建成功并完成sync后,打开" androidApp "并指向运行,即可直接运行androidApp
是的,以kmm结束了!
emmm,您是如何运行ios的
选择iosApp
发现出现了一个x
请在这里修改iosApp规则
如果将此处的iosApp.xcworkspace更改为iosApp.xcodeproj,则可以将iosApp同时生成xcworkspace和xcodeproj视为as中项目和模型的差异
我们发现我们在点击运行,报告了错误(但还是保留吧)
因为我是第一次接触ios开发,所以不太清楚什么是具体的问题,但直观上我觉得是编译环境的问题。 因为我使用的是m1的macos,所以可能是缺省的kotlin编译成了用于native的x86,但是我看到了ios配置在kotlin共享模块的gradle配置中,所以让我们稍微修改一下并测试一下
原始配置为:
也许是去了else,因为我们不是ios专业的,现在只有一台m1苹果电脑,所以简单地配置了:如下
再次单击运行,表示未导入共享模块
如果您在这里查看一下,就会发现framework没有引入到xcode项目中,所以请在xcode中打开iosApp项目并导入framework
首先,在xcode中打开项目,单击open a project,然后选择该文件
这个时候xcode什么都没有吗? 我一脸陌生,然后知道必须导入模型,于是:
选择并确认目录中的iosApp.xcodeproj文件后,可以看到左列中包含文件夹
然后去as生成框架吧
双击此命令以生成ios使用的共享框架
首先单击蓝色的iosApp文件以打开配置文件,然后单击此加号
单击add other,然后单击add files,将我们生成的框架导入以下目录
将上面的目录放置在框架路径中
内容: $ { src root }/./shared/build /端庄外套/ios/podReleaseFramework/
配置成功后,再次在as上单击并运行,ios模拟器启动,程序也已运行。 但是,as不知为何崩溃了。 (已发送反馈。 到此为止应该可以正常工作,但现在as崩溃了,但也可以通过xcode运行。 但是,需要简单地进行配置
我们不能直接调用gradle来编译共享kt代码,因为xcode执行的是xcode只能去的东西。 在这种情况下,可以使用xcode脚本功能
将此脚本拖动到顶部以在xcode之前编译。 内容为以下:
JAVA_HOME禁止找到环境变量(如果使用zsh ) if(-f~~/.zshrc ); 避免找到thenecho ' zsh ' source//zshrc fi # Java _ home环境变量(如果使用bash );if(-f(//.bashrc ); thenecho ' bash ' source~~/. bashrcficd ' $ src root ' CD ./#其中Android项目目录名称# KMMsharedmodule是kmm模块。 Gradle project名称https://img.coder yuan.com/1622193265424.png./grad Lew : shared : clean : shared : linkpodreleleaseasefef
如果想提高速度,pps:可以消除:shared:clean。 通常没有状况。 如果有情况,可以手动调用
ppps:当然,此脚本仅在运行xcode时使用。 如果仅在as上运行iosApp,则可以删除此脚本。 否则,共享代码可能会被编译两次而浪费时间
可以使用xcode的执行功能。
办完事。
结语当然,因为我没有使用过xcode开发,所以可能会有配置和书写错误。 如果想请伟大的人指出来
接下来,kmm将来可能会更改api,因此文章的一部分可能会变旧,但会尽快修改
文章的一部分参考这个大人物的文章: kmm (kotlinmultiplatformmobile )入门)2)在现有项目中集成kmm可爱的程序员- CoderYuan.com
最后,EDG牛逼! EDG牛逼! EDG牛逼!