KMM 搭建环境,并运行安卓和ios

KMM 搭建环境,并运行安卓和ios,第1张

前言

kmmKotlin Multiplatform Mobile(kt移动跨平台)的缩写,虽然目前还不是正式版本,但也是可以用了

kmm的跨平台实现方式是将代码分成三块:

安卓原生代码

ios原生代码

kotlin共享代码,其中在安卓部分会将kotlin共享代码编译为jvm文件并当做lib加入到安卓原生代码中,而ios则是将kotlin共享代码编译成native(oc?)代码,然后当做framework引入

(图引自kt官网)

这样既可以跨平台,又保证了平台灵活性,并且性能相对于flutter会更好

缺点就是目前未release,并且用的人少资料少,可能双端的原生代码写的会多一些,目前跨平台ui(compose-multiplatform)还没有ios版,所以目前可以先试试,等出了跨平台ui后应该就真正实现跨平台了

前置环境

一个macos系统(苹果电脑),因为编译ios需要用macos和xcode

android studio 北极狐版本(2020.3.1)以上

jdk环境,可以直接下载一个jdk-mac安装包,就可以直接将环境变量配置上去了

正文

首先在as上装一个kmm插件(用于创建kmm demo)

然后new project,使用kmm插件创建

创建成功后并sync完成后,选中androidApp并点运行,就可以直接运行起安卓app

好了,kmm完事了!

emmm,怎么可能,下面在运行一下ios

 选择iosApp

发现出现一个x

这里可以修改一下iosApp规则

 将这里的iosApp.xcworkspace改成iosApp.xcodeproj,iosApp中会同时生成xcworkspace和xcodeproj可以看做是as中project和model的区别,相当于我们选择一个具体的model来执行

我们在点击运行,发现报错了(后来发现好像不报这个错了?但还是保留吧)

 因为我第一次接触ios开发,所以我也不太清楚是什么具体问题,但直觉来看应该是编译环境问题,我用的是m1的macos,所以可能是默认kotlin编译为native用的x86,而我看到kotlin共享模块的gradle配置处有配置ios,所以我们稍微改一下并测试一下就好了

原配置如下:

 可能是走到else里了,由于我们不是专门搞ios的,并且目前只有一个m1苹果电脑,所以就简单的改为如下配置:

 再次点击运行,然后提示没有导入共享的模块

 这里查了一下,是没有将framework引入到xcode项目中,所以我们用xcode打开iosApp项目并将framework导入

我们先用xcode打开项目,点open a project,然后选择这个文件

这时候xcode里空的什么都没???弄得我一脸懵,然后才知道得将model导入进去,如下

 选择目录中的iosApp.xcodeproj文件并确定,然后可以发现左边栏有文件夹了

然后我们去as中生成一下framework

双击这个命令生成ios所使用的共享framework 

先点击蓝色的iosApp文件打开配置文件,并点击这个加号 

 

 点击add other再点add files,将我们生成的framework引入进去,目录如下

让后将上面的目录配置到framework path中

 内容: ${SRCROOT}/../shared/build/bin/ios/podReleaseFramework/

配置成功后我们再次在as中点击运行,发现ios模拟器启动起来了,程序也运行上去了,但是as不知道为什么崩了(已提交反馈),正常到这里应该就可以了,但是现在as崩了,但也可以从xcode中运行,不过需要简单配置一下

我们由于xcode执行只能走xcode的东西,不能直接调用gradle去让共享kt代码编译,这时我们可以使用xcode的脚本功能

 

将这个脚本拖到最上面先于xcode编译,内容如下:

# 防止找不到 JAVA_HOME 环境变量(如果使用 zsh)
if [ -f ~/.zshrc ]; then
    echo "zsh"
    source ~/.zshrc
fi
# 防止找不到 JAVA_HOME 环境变量(如果使用 bash)
if [ -f ~/.bashrc ]; then
    echo "bash"
    source ~/.bashrc
fi

cd "$SRCROOT"
cd ../ # 这里为 Android 工程的目录名
# kmmsharedmodule 为 KMM 模块,Gradle project 名http://www.kaotop.com/file/tupian/20220518/1622193265424.png
./gradlew :shared:clean :shared:linkPodReleaseFrameworkIos -PXCODE_CONFIGURATION=${CONFIGURATION}

ps:这里会用到jdk环境,需要配置JAVA_HOME,如果之前没有安装过,就可以直接在官网下载一个macos的jdk的安装版,这样环境变量就直接配置好了

pps:如果想要提升速度,可以将:shared:clean去掉,一般不会有情况,如果有情况可以手动调用

ppps:当然这个脚本只是在xcode运行的时候使用的,如果只在as中运行iosApp的话可以将这个脚本去掉,否则可能会出现共享代码编译两次导致浪费时间的问题

然后就可以用xcode的运行功能了.

完事.

结语

当然,我没用过xcode开发,所以可能会有配置或者写错的地方,如果有请大佬指出

其次,由于kmm可能未来还会改api,所以文章可能有部分会过时,但是我尽量及时修改

文章部分参考该大佬的文章:KMM(Kotlin Multiplatform Mobile)入门(二)在现有工程中集成 KMM | 可爱的程序猿 - CoderYuan.com

最后,EDG牛逼!!! EDG牛逼!!! EDG牛逼!!! 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/994417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存