KMM 搭建环境,并运行安卓和ios
前言
kmm是Kotlin Multiplatform Mobile(kt移動(dòng)跨平臺(tái))的縮寫,雖然目前還不是正式版本,但也是可以用了
kmm的跨平臺(tái)實(shí)現(xiàn)方式是將代碼分成三塊:
安卓原生代碼
ios原生代碼
kotlin共享代碼,其中在安卓部分會(huì)將kotlin共享代碼編譯為jvm文件并當(dāng)做lib加入到安卓原生代碼中,而ios則是將kotlin共享代碼編譯成native(oc?)代碼,然后當(dāng)做framework引入
(圖引自kt官網(wǎng))
這樣既可以跨平臺(tái),又保證了平臺(tái)靈活性,并且性能相對(duì)于flutter會(huì)更好
缺點(diǎn)就是目前未release,并且用的人少資料少,可能雙端的原生代碼寫的會(huì)多一些,目前跨平臺(tái)ui(compose-multiplatform)還沒有ios版,所以目前可以先試試,等出了跨平臺(tái)ui后應(yīng)該就真正實(shí)現(xiàn)跨平臺(tái)了
前置環(huán)境
一個(gè)macos系統(tǒng)(蘋果電腦),因?yàn)榫幾gios需要用macos和xcode
android studio 北極狐版本(2020.3.1)以上
jdk環(huán)境,可以直接下載一個(gè)jdk-mac安裝包,就可以直接將環(huán)境變量配置上去了
正文
首先在as上裝一個(gè)kmm插件(用于創(chuàng)建kmm demo)
然后new project,使用kmm插件創(chuàng)建
創(chuàng)建成功后并sync完成后,選中androidApp并點(diǎn)運(yùn)行,就可以直接運(yùn)行起安卓app
好了,kmm完事了!
emmm,怎么可能,下面在運(yùn)行一下ios
?選擇iosApp
發(fā)現(xiàn)出現(xiàn)一個(gè)x
這里可以修改一下iosApp規(guī)則
?將這里的iosApp.xcworkspace改成iosApp.xcodeproj,iosApp中會(huì)同時(shí)生成xcworkspace和xcodeproj可以看做是as中project和model的區(qū)別,相當(dāng)于我們選擇一個(gè)具體的model來執(zhí)行
我們?cè)邳c(diǎn)擊運(yùn)行,發(fā)現(xiàn)報(bào)錯(cuò)了(后來發(fā)現(xiàn)好像不報(bào)這個(gè)錯(cuò)了?但還是保留吧)
?因?yàn)槲业谝淮谓佑|ios開發(fā),所以我也不太清楚是什么具體問題,但直覺來看應(yīng)該是編譯環(huán)境問題,我用的是m1的macos,所以可能是默認(rèn)kotlin編譯為native用的x86,而我看到kotlin共享模塊的gradle配置處有配置ios,所以我們稍微改一下并測(cè)試一下就好了
原配置如下:
?可能是走到else里了,由于我們不是專門搞ios的,并且目前只有一個(gè)m1蘋果電腦,所以就簡(jiǎn)單的改為如下配置:
?再次點(diǎn)擊運(yùn)行,然后提示沒有導(dǎo)入共享的模塊
?這里查了一下,是沒有將framework引入到xcode項(xiàng)目中,所以我們用xcode打開iosApp項(xiàng)目并將framework導(dǎo)入
我們先用xcode打開項(xiàng)目,點(diǎn)open a project,然后選擇這個(gè)文件
這時(shí)候xcode里空的什么都沒???弄得我一臉懵,然后才知道得將model導(dǎo)入進(jìn)去,如下
?選擇目錄中的iosApp.xcodeproj文件并確定,然后可以發(fā)現(xiàn)左邊欄有文件夾了
然后我們?nèi)s中生成一下framework
雙擊這個(gè)命令生成ios所使用的共享framework?
先點(diǎn)擊藍(lán)色的iosApp文件打開配置文件,并點(diǎn)擊這個(gè)加號(hào)?
?
?點(diǎn)擊add other再點(diǎn)add files,將我們生成的framework引入進(jìn)去,目錄如下
讓后將上面的目錄配置到framework path中
?內(nèi)容:?${SRCROOT}/../shared/build/bin/ios/podReleaseFramework/
配置成功后我們?cè)俅卧赼s中點(diǎn)擊運(yùn)行,發(fā)現(xiàn)ios模擬器啟動(dòng)起來了,程序也運(yùn)行上去了,但是as不知道為什么崩了(已提交反饋),正常到這里應(yīng)該就可以了,但是現(xiàn)在as崩了,但也可以從xcode中運(yùn)行,不過需要簡(jiǎn)單配置一下
我們由于xcode執(zhí)行只能走xcode的東西,不能直接調(diào)用gradle去讓共享kt代碼編譯,這時(shí)我們可以使用xcode的腳本功能
?
將這個(gè)腳本拖到最上面先于xcode編譯,內(nèi)容如下:
# 防止找不到 JAVA_HOME 環(huán)境變量(如果使用 zsh) if [ -f ~/.zshrc ]; thenecho "zsh"source ~/.zshrc fi # 防止找不到 JAVA_HOME 環(huán)境變量(如果使用 bash) if [ -f ~/.bashrc ]; thenecho "bash"source ~/.bashrc ficd "$SRCROOT" cd ../ # 這里為 Android 工程的目錄名 # kmmsharedmodule 為 KMM 模塊,Gradle project 名https://img.coderyuan.com/1622193265424.png ./gradlew :shared:clean :shared:linkPodReleaseFrameworkIos -PXCODE_CONFIGURATION=${CONFIGURATION}ps:這里會(huì)用到j(luò)dk環(huán)境,需要配置JAVA_HOME,如果之前沒有安裝過,就可以直接在官網(wǎng)下載一個(gè)macos的jdk的安裝版,這樣環(huán)境變量就直接配置好了
pps:如果想要提升速度,可以將:shared:clean去掉,一般不會(huì)有情況,如果有情況可以手動(dòng)調(diào)用
ppps:當(dāng)然這個(gè)腳本只是在xcode運(yùn)行的時(shí)候使用的,如果只在as中運(yùn)行iosApp的話可以將這個(gè)腳本去掉,否則可能會(huì)出現(xiàn)共享代碼編譯兩次導(dǎo)致浪費(fèi)時(shí)間的問題
然后就可以用xcode的運(yùn)行功能了.
完事.
結(jié)語
當(dāng)然,我沒用過xcode開發(fā),所以可能會(huì)有配置或者寫錯(cuò)的地方,如果有請(qǐng)大佬指出
其次,由于kmm可能未來還會(huì)改api,所以文章可能有部分會(huì)過時(shí),但是我盡量及時(shí)修改
文章部分參考該大佬的文章:KMM(Kotlin Multiplatform Mobile)入門(二)在現(xiàn)有工程中集成 KMM | 可愛的程序猿 - CoderYuan.com
最后,EDG牛逼!!!?EDG牛逼!!!?EDG牛逼!!!?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的KMM 搭建环境,并运行安卓和ios的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin-如何创建一个好用的协程作用
- 下一篇: Compose 手势事件:防止重复点击,