KMM 搭建环境,并运行安卓和ios
前言
kmm是Kotlin 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 ]; thenecho "zsh"source ~/.zshrc fi # 防止找不到 JAVA_HOME 環境變量(如果使用 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:這里會用到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牛逼!!!?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的KMM 搭建环境,并运行安卓和ios的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin-如何创建一个好用的协程作用
- 下一篇: Compose 手势事件:防止重复点击,