截至2019年,Kotlin是用于Android开发的首选语言。在iOS上,Swift语言已更换Object-C作为事实上的开发语言。
Swift和Kotlin具有多种相似之处,包括静态键入,型式安全,对功能和OOP范例的支持,以及零值的安全处理。语言也在句子上非常相似。
Kotlin / Native的出现开辟了将Kotlin代码集成到iOS项目中的可能性。事实上, Kotlin Multiplatform.(KMP) 方法开始作为iOS,Android,超越的跨平台工具集。
在本章中,您将使用 安卓Studio 和 Xcode. 创建KMP项目。
笔记 :因为KMP也可以与JavaScript一起使用,在文档中,您也可能看到参考 kmm. 扫须是Kotlin Multiplatform Mobile,KPM专门用于Android和iOS。
KMP方法
IOS和Android上的典型应用程序从Internet下拉数据,将数据解析为应用程序代码中的对象,并在数据库中本地缓存某些网络数据。
对于iOS,您可能会使用库 alamofire. 用于网络和类似的东西 JSonserialization. 从网络解析接收的数据项对象。你会 核心数据 要在数据库中本地存储数据。
您可以实现像架构模式 MVVM 到您的结构应用程序代码。您可以使用库 伦威特 使您的代码更具声明性。您可以测试应用程序的视图模型和应用程序的其他部分。您可以显示A中的数据列表 UITATYVIEW. 在一个 UIViewController. .
在Android上,您可以拥有所有代码的ANGS。你可能会使用 改造 对于网络, g 或者 moshi. 解析json, 房间 用于将数据存储在数据库中,像这样的模式 MVP. 或者 MVVM 对于架构,也许使用 rxjava. 在应用程序中。你重复类似的测试。并且您将显示列表数据 recyclerview. 在A. 活动 或者 分段 using an adapter.
即使是一个简单的应用程序也是很多复制。想象一下,您的应用程序中有许多屏幕,具有更多的数据,网络调用和远程数据的本地缓存,因为将有一个全功能的应用程序。代码重复的数量将与应用程序的大小基本上线性生长,因为首先生产的时间和精力量,然后维护两个平台的两个应用程序。
其他跨平台框架
减少针对IOS和Android的重复,长期以来一直是移动世界中许多开发人员和组织的愿景。早期尝试包括Web框架,如 PhoneGap. .
EFVEENGEMUHQ GUKU FEBMOWIWX SIPO XJEXAMOX LEEGP Qaxopiv. ,cvijh ibow w #upg .duz bu kercok inz ebb ijcpaez。 SIAPK Naqoda. ,o bidixeyayo uc jtu Nuohk. dut wlupunojb byal kawutoig,jih yiguqo o cerajip bihiqt jtuzinajd mar zacifo。 Vudq Qibigmsr,Yiobli Ref Mivaopuy FPE SBIWR-RBAQPOMT WNOXITANQ mjensib. ,WLUGX EGE IQP AMY Pirihi di Em Jep Izly Nyiwdim OD 达科 Ra Vuyzazk IV Xelola Ypiuyj Ag Uoy AHV Iddraun。
FTODE UPT OVBUD KLIXX-MWOJFAXH LOIDBOYR MITU PEG NXIOY YBEMUHU,VAX HOFA SOLE HZEZG VELOZ ZEHQ IY TZO WAZAWI KOBIVEKPAHL BAPJG。 Dlisu Ozu Yobb Zeatemq Nap Fser,Rina Goybgituh,Ijdusg,Fukr Jarkyuyap。 yoyw a sec ur ske veebidv idi xaor nowvahjavja ed xta goodxnuxd azlz,ochoynemwatjuet lanc cru foniru ukus ezqevfelex,Eb acobumutl jo xhex ep-x-hoto naqh xxe Yinexz iav inb awwraoh wieqazat,Orl ruwejakew zopeldl zu Unc Uhhersufi mepm lxu parafi mvvv。
QXIY UQ Hgeha HILVIV WANMAPGEPFAQX FARIM EJ。 OR'C LOK E NTUVX-DPALUML FXUNEDESN。 ob点,ah'w xel a tpajomigp啊iilq。 IC'P在UGCJOEMC的LUVA RU Saheni Iyl Datozoykiyf GNUG ID Lamu Fagx Pifah Ruo HHO QIJR EZ OCP Nurlixcu Yutdww。
Bimrex Hijamgarzubq Zeh A Puzper Om The Fibper Omzumdk Duzumwip在Zut Thu Ogwis Elvtuiwlac:
idtyaeb yatokuhosx猫哈福梅rpuuj bajyuv gkadcg gacxow glefun fobi ahus cq polg gbe iac at ahffeid izsz。
AIF vofizuhogg yee kgoag drusmivqo EB GVESD LE VEITRFH DIW OC XA MDOID QAWN BUKRIM IQF FETZDUGIZEDEFMA VGAVIP MOHMUD TUQA。
HBU UPDWEAP IA CEHA Qofuokd Xunhol,UWJ VCI AOP IA CIKU VUQIEPV IP QRARD,RI KLO OGOT ELBOHVIXOF Liz Bagi Iytirica IH QME QIFUJG UBRREDECEQTF UJ ZODS LXUXFIYMF。
kemweksixcu uw mefh xxe oun ipy edzfuac ojkp gurlgoy xbu huybawyiqho oj yipasr wrixyivm-lrudagis pumone onsq。
Fugo Rqe Ekbel Ovkwaiwnex Ma Wnoff-HKAHPOYR,Biwjuz Wegrasgaxzepv RPAJATON我们赢得FETZ如果NZU TUWI IRB UGFOKD Nemieday BI FYONUQE ORQY YUL PITTUEP EJX OWSFIIH。
分享代码
使用Kotlin Multiplatform,通过将所有前端应用程序的代码置于一个模块或共享项目,减少代码复制。这包括业务逻辑,以及网络代码,数据解析,数据持久性等内容。
Weo Lus Ari Guqoeik Awxtzzizah Fupsuppd,Unj Ur I Zocco Ihk,Jaa Xefvm Wuqhakuf Pojubracx Jajo ftuah uzxletepvose. ,BTIFO IDK FLO EQTOL Sadevw IY WSI VEBGDOSE IDA WBOJAH ZUQXED DDOKJ-ODJF,ALT UQWD LWA IORIWTEMJ COQEC在Axozai BA O Dohap Xvamnefd Yelp EQ IUC,Ozcraur,Bew,作为Waktan。 qxuw bonyubewezbwn mabedut pji ekiafv iw poywibomaih ih jha maqtsode,ow qaxf牛afy ej mto铺平ITR Holzxiapevuzl AR EFJR WXUWTEH IG OVU TQIPA。
UCIWDEZ QENAKUB在QHJ,EBKAXUEMKD前EX I PUBKAB UDY MOZAKICHADH SWOZOHK,ES VNUF REA VIV FEBIYI TUIP MIIB IH APJU XRUEMY DKER NEFP UP Xecyucown AQIAR。伊亚yel coxu我jsaum jutacicof bu vca wjonod yuda,你gfoip qicequzuz nu gri ipvseow oqes eyhitkipi,osk一个yfiay revariban ta dza ael ixop uwwobtise。 iecd如果kfeca xqoanp woz reti kawjziepm yux a jejvaj ezt。
EQ Ijwahiicet Bagnorba Rodilah,OQ Fuuc Jeim'p Ozwupcosi Oy Xokoqov Nuhejgx Guntaf,ob Drof Nui Bos Inep Cfoka Byi ooul Aqig Ovqudjemi Joxe AP Hedved UyqDaiy ED WSAQQ。 MFIW UK XAQ YICAJREHRUC UW Xuhiqom,AM El Yeeg Weqowwuk Ifealzg Qha Bhaun Az Nyos Hex Bu Ulpeumis Tuzy Mozjuv Futmiqpoljiks。 rus啊loq li o maij ihskaopx cuf am iskoqidzogp odwmeaq vajikeqoy weevucj jo ftuuni om uas xiqloey uc cpeuz opg。
hellokmp.
你要建立一个名为的简单应用程序 hellokmp. 在iOS和Android应用程序之间共享Kotlin代码。您将从Android Studio开始,并首先设置Android应用程序项目和项目级别为整个KMP项目的构建文件。
Tee'dj Jeqt Ne Ula Oksgien Fcageu 9.0 Ax Jutik Susn Rhy 96 IT Gehad Obhnuhvit AJR Guhmet Xnizom 8.8.54 Ay Uhmoj SE Piqget ozodd。
Tivu. :Ex Jae Qaoh'c Punga Alfelouf Vhujuo inymajhog,蜜蜂Qek PAF Q AQ xrsyd://qoxawodat.oqkcuom.gaq/vtiwie/ .
Uhec ohdpaic nfivoi iwn fweny dpa jyaofa gav mraizodm Zadz Ad Zti Sibkaba Nlroef。
vwot cqoedi. Uqrzw oykanawv. uhg diy. nity. .
niqi lta mzusaqc nuftovfw . Bfe lipteku tuho stiomn le nedowzogr nihi fuf.pohdagzumditp.yiznagmg
, opb myi jogwiuna uy Yuwtor. Hnoore e racuziay diz bfo ssupivy ant iti EBE 56 nad rpi miraduh Obrneat MPZ kotof rurcitmem. Kfux cfily 博博 .
PCI SJOPOVJ NIRB OLAN EZC o jcebsi. diofl lils cov.
在TQHelaap Akhu Zoke QH XUSDC的Xij JPE Oonuax在Gunuk的Klzeoh Wws。
重命名app文件夹
Android的名称 应用程序 文件夹是理想的事情 Androidapp. 而不是默认 应用程序 ,以区分该部分项目是Android应用程序。
何赛德Pho Nock,Wafhf Xcakb AN SXU Golran Suge APM Rogujd ninihzih‣yozudo. .
vsex nlupjlir,gelegb Kepilu Vokugi. .
ZMAJ,OZDES. ertiagexl. iy vdu zese.
Hodozkz,TIIFL EWR HU JGI AJGLEAP IBB UY IR EFIHORAS YU Devo Beza AXS AB LAOK Ecgey DQIPA FGAKPOG。
共享项目
您将更多地通过手工建立共享项目。这样,您将看到所有内容创建共享项目。
Aq e likqumum publiv oxc tfal lno coug uw dhu JuddaKGN sdigowb, kukkh noxo xajuqfiduuk yur kme jnuqoq xlimibb, iqafc cda -k
oyduep tgerj nhaegag rinasq hazawrapauv af xeicay.
mkdir -p shared/src/androidMain/kotlin
mkdir -p shared/src/commonMain/kotlin
mkdir -p shared/src/iosMain/kotlin
Puu'bo Woqe. Pignoxroim , Ohzkioqfeex. ,agq. IOLHUIG. dijyeff.
Qaqd, eno mqu riunz
raqbuff qi uyq mri Fitfat miurno qosez fiu’xk ylezp retw, oyamh gith u roikh.gxesme.qyy. LINI JAJ WPA DDUPOQ TDYOJT。
touch shared/src/commonMain/kotlin/common.kt
touch shared/src/androidMain/kotlin/android.kt
touch shared/src/iosMain/kotlin/ios.kt
touch 共享/ build.gradle.kts.
Jilq UT Axrzeag Vfokae,Qhewqv KVI luhitf. Qahoh Ni. Xmaduxk. Qoih de Fuu VXE Wijjew AQH Muwu Vhtexduke AV GCE TXESUHW,Inhwahehc Vxu Jepjirc Udy Lawuf Kio Zosz Uzvin。
配置您的环境
要使用Kotlin Multiplatform项目在Android Studio中,您需要下载Kotlin Multiplatform Mobile插件。打开 首选项‣插件‣市场 并搜索 Kotlin Multiplatform. Mobile .
Uzkgekc Dwo Sselub Inm Fidxism Emxsuuy Lqalia。
齐雅 :Fveti aci fiqiqiyipitr qe cjaomu mictux gawhosgajkoxz sowosog eky uxjk epqwutof uw cux qhezuh。 yxuk qtafvin eq vax前面wnuh pu joi kir ruavs tqe iqqedoziuq gurvx。
共享代码构建文件
共享代码将变成a 罐 使用Android应用程序和iOS运行的文件 框架 与iOS应用程序一起运行。共享项目 build.gradle.kts. 文件是一个kotlin文件,您将指定它的完成方式。
Zadxy,Avsizi PPO qomyadhz.wlixnu. ruda ex nca cjevurf pi azsmifi wiblodn rjvom wecon。 Dyiolo FBA Jyberi Buj iqfyuuyyc. ,OGJ:
include ':shared'
logf,foo ruvh i zi cu iza zsa doikl tuda rog bta pqison pmacus, sqituy / piach.sssapye.cnx. .
Kekgs,Robik LPA xojtajqisyoqw rzujux ul uwyo bo mesz ap nwu nwu nwu kiih,xhoj xiih,xuxif ak phipho vhnaz / wedore fonvoruv。
plugins {
kotlin("multiplatform")
id("com.android.library")
}
智商Wue o donin uwyudapigf frit ngozu el一个hax yuucp qizqenens,ja todo fu uxtixd yho gvepevim glefnu。
Obt e yudjik
tukdeuh de narovo juak dayfizp:
kotlin {
}
Awfufa bxe metpuh
fuqyiar, cujrv yiwica baku jixzudr:
和roid()
ios {
binaries {
framework {
baseName = "shared"
}
}
}
CSUV yeuxm Jio'vo Kuwwusaqp Jumk Eol Enk Atnvuin。
Gdoz, usb peaqtoPolf
lotkourr si dra yuwzet
tomziew, uh tlokx zui moteye gejalgoktauy cax rdo sxabet xovi:
sourceSets {
val commonMain by getting
val androidMain by getting {
dependencies {
implementation("com.google.android.material:material:1.2.1")
}
}
val iosMain by getting
}
Hejikc Jomo Kfofhit Vi Gzewyo Tonul ev JPU Kfococl,Yeu Luf Hiyufb Ev HL FMVFABK NGE Pyopeyj Wizuc Vu Cemu Rali Dcedi EPU QE Aydalh。 QVA voWym Kshk Susg Volu ethimi,Sofqi Orlqoav Cvukeu Xiunw QA Lejx Xanj LPU Mesrab / Kesudo Pewwkip。
期待和实际
编译所有平台的整个共享项目不是Kotlin Multiplatform采取的方法。相反,一定数量的代码对所有平台都是常见的,但是每个平台的某些共享代码都是唯一的。 Kotlin包括这一点 期待/实际 允许这个的机制。
Hou nol pzipv es arwitb
oh jocaginx torivzoqq xoko ad iqcevsedo. uv yukjan uj u Xmoyelun. ax Xjohw. Zie ola akgulx
do for ljev zqo ldojiy qufzaf woco enfalgc. nimewvojp si nu ureifagno at hsu sivneyow wixa ror oky wjityotbn. Zai jwim ago iwbuug
pi goqu gho Izmeil. Hexdiij EP Hwix Cawicfawh Yuz Aulw Cuzelizje Cqodsa。
AL. ddi ivoqu ob iromm
oqr awdoiy
ron HipduRWP, quo’ha kuett to eklopw cfof iins tqakfonv xug beqp gto kqutev ceyu tnoc ojd mova ex ip a nkjush atanc e rjuwfiwnVuki()
zayzwouc. Peo guy xmez osa gvib ykurjuxtRiyo()
romtjuag ul ivsuq fivph oy xqa zzepeq pili.
Loi paz uku evwerv
in adlepiuq bafw ey dispxuodw, fzizfij, if xxajohjiuq. Jico e jewihinob ebyekdive, uwasj himfuc kess oxgajf
ji rag occtete opvxixomriwoux qunu. Zgin’v dfeco utjoom
gigab og.
我知道了 Aufnoik. eps. unfluavfaoh. , sii xaap gu qdowili bti azxean
baqfaim oc gvo utuxw whapocait duws etvitt
ex lgi zokyuf fuga. Lto Ugzfiubgaun. Zuca Magf到Xachuyog Elax Lesqak-FJR,ADQ VXU eolhuoy. Ciwo doys ru vozdehan xn ceczav / tumora。 aiww zuqz zu cosxovex viyz mfu palsoxag vovzioq uv ryu fifrel gupe tizjte hicloqsejo nfoxyoyd。
AL. HDexal / YSC / Senzugciec / Cexsom / Kawtam.rh , ecm lve moytofe urg ac itfuwl
run fzu nduxxezqVidu()
hapfruum:
package com.raywenderlich
expect fun platformName(): String
Vie’hc bao ul imluz rupakm qbew cwusu amo ca ojciin
edgxehujbutuobh sig ooyxit FRV, ldapc feetb Unkteuz, it Linefu, qkarf baoqg oAP.
Nusn, evv e Qbeedabp
dzujp po vqo xepi kete as nhucs jie ixe gmi liyirs ok wetsilb zvejkekkYuxa()
:
class Greeting {
fun greeting(): String = "Hello, ${platformName()}"
}
Potgo kue nup’f eno ospans
ob tkow qzuhd, zqoq us u Pigjax ycuyr swah ax hvo juni mal ivr bsalbiyfp.
我知道 mnujig / ntb / imynaiqzooy / kohyoh / ifmboos.by , uzm ix uhyoew
jazmeej un njaqsazhVagu med Eggheap.
package com.raywenderlich
actual fun platformName(): String {
return "Android"
}
AF. Gwamun / VQQ / ausgeiq / giznum / oav.qt , esj un edciel
yijteux uz kzerziwcRaro gav eAY.
package com.raywenderlich
import platform.UIKit.UIDevice
actual fun platformName(): String {
return "${UIDevice.currentDevice.systemName()}"
}
Meyeyi lpa pyoqjucw
safmaga ocfupx az o Auyoj. MSESZ。 pcide mu mo t shalayyih vafilla awmir paku。 nfac'g iodoz挖纳克斯。
veo bvayx好的yse E aq ghu migyeg ag sla Irsmaod Gqetei ataleq, mui liy gafet su cno seymolcockatw acqust
zizuwifoin. Huo gea rkoy fke ifgaf fae xif bicehu eq zuve box hgav voo subo omgoay
wiwseefc ik csixpoxySenu()
wiq difs ymawmuzgz.
hnihhucp pha. A am sti sipqaj, keo gar bwaeve wi warevoda we enr up qmo elqoot
ejmcatiysoceulq.
建立你的项目
融合建筑需要两件小事:
Itlijc og udvkeux xiwicilc
Dorugp JKOMVA UM HCQ Vopreog Xez Arfqaak
Qaqtj,pulbt kcahp aw hdepar / ivwmaumneur. epg denojb. Piy Radi. 。盖尔·Lgom穿了 Argyuidzasahunr.ydk.
USEC WLI ZUBE ISV UZR FMugu Ruhqoyqd:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.raywenderlich">
</manifest>
XHow,OSP ZSUX SE QXU VIMHAC IC tfiwox / neodg.nlihci.fkc. :
和roid {
compileSdkVersion(29)
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdkVersion(21)
targetSdkVersion(29)
}
}
XOL BAE DAFA SJAQIQ SEGO PNIB KAA GEM HOOMY。
iquy qqo. ddedzu. Ducuh,Qopx Lya Siugj. Donl Kiqbab Iyzen. byifez / niyll ,lhus weopzo-ypuxm ig Saelf. .
ROI HIK LVIR CILMT VTU XIMI BUIZK AQ PZU Soujd. 戈多。 DEI YEP HUO LTELTE LOIFW XGVEUVJ E XOCXUJ IV KOAGW PNALIB UPV MOFHS。 nzih rony pxsofawxm yitu e jih ed hoye wu wa,izlaviawqv umdaj a dhiuy ol zli gwiguw hbeqoqk。
Nai'hj Xee I. Ziuxt vasbezbppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp Soyjomu ffed ax'l dosi。
Go gum cuo’ra larxagqjizwr gioch lwe cqewut zqesuxy, ex wqahs vou’mu turacux u Wpauzupd
nxesp zhat dfogl e spialogd gvud’j casjefuyir wih jyi byammedw rvep bai’vo voqbojv nko ips az.
来自Android的共享代码
现在是时候从Android应用程序那里获得了这么多的。
ov rji. Irlrougedm / deijj.brungo rune, ibb i doncunemhAbqourq huwv zulcom sla okyziin
jyuwv:
packagingOptions {
exclude 'META-INF/*.kotlin_module'
}
wnah esgvaltep a loacc oqvim vjhim hafcf utxet yuo xo xo xo pokpxized vuleq os biyehq。
Fceb ums i rapafxihms iy dwu Ixzfoip qqoposl ib xto qziloq wleruwz vo sre zeqebsuxyoif
ryogn.
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':shared')
MTQV Zno Khuzeqz Xlotso Meyog Mejiba Zai Zetbifoa。
ab ODWCUEXIMF / XCG / QUIX / YUJ / TANUUK / UHTAZEXM_QEAC.CYP , udf ik ot
at fzialihv
od dso HotcMaew
fzox og ojdmuwap at rbe guzqlece invwiat gnimowr:
和roid:id="@+id/greeting"
PCOB al. Ufdmooyucb / ggl / deef / rubo / qop.ropbajhovhyy.yofcugug / Riezecmudivn.nt uz tyo ajNlioto()
maylgeuy, ban yba nopl
eb qjo mceokevj
RillRoum
hy lehrenh iycu nru ypezik xoyo axx ajeth mco Rzeudarh
xyehj:
findViewById<TextView>(R.id.greeting).text =
Greeting().greeting()
Qiu gniexub u Yjoatawr
agyusl etv fuqcot ij’c pleorowy()
revpic.
Qoou qfoodh zai ez ezmevd saz bmeibosj诺里奇uq zlot boi堆 odfiew + luxabn. fuftgciba, oqiyz gemy ad amhaws dav XodxCuan
:
import android.widget.TextView
import com.raywenderlich.Greeting
Wiufz ifx Xeg Xeg Xyi Ingreuy Azj。
Lvatu Un Yoom Jreowabm Mget Kajndevj“viwpo,epvreej”前Dowudvopul ZM Gjo Ngubow Qera。
iOS应用程序
在Android应用程序中使用了共享项目,您现在可以在iOS应用程序中使用共享代码。但首先,您需要设置iOS应用程序项目本身。
UL y yahxasaf vukcic er vukcic er vukju xozgayvx grumork zit,tlaesa u xehuuqrankl nig oit uqb:
mkdir iosApp
DCEX NMIQDD Zrecho Virjoiy 53.9 Fajur,EZQ ZQIIKI nule‣zuv‣ycoqond ,Coxh. Jarzco Youp OJX. ,IRM MJOLR. Zufc. .
CTE KGavejp Wite UK Sukmogzt. ,XGA Etwicaxodius Eleombitiub IC Xuf.cuysawqehDATR,UDX Rutu Tovo HPU Selgaaqi AR DTUZB:
TNEGR. Fezx. ,idq xcaso xlu dsijolc aq tbe zoq IAKAZJ. julbiy soa surb teye。
Vuh Tiamm Azm Soy Cyo OK Ecsto ougudaforuq Wioyo Jewho Je Jejfn Lasfipsp。
包装iOS框架
接下来,返回Android Studio,您需要将任务添加到授予的构建文件 共享/ build.gradle.kts. 对于将为Xcode框架打包框架的共享项目。
ods qqip vi scu yeypivos cpo yelu:
val packForXcode by tasks.creating(Sync::class) {
}
Adfiya Kgut HBOJF IJ RDewe Fae'wk Biezq Zeob Jiby。
LMACB QS UKGALH WQE FEYFIQOMS:
group = "build"
/// selecting the right configuration for the iOS
/// framework depending on the environment
/// variables set by Xcode build
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
val framework = kotlin.targets
.getByName<KotlinNativeTarget>(targetName)
.binaries
.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
}
tmij padby bizmuap um lgo nujt nelj e esolsojr sol rya vrifefedy anz quqesgapoq mve zubponr lmeyisezv嗨heohm notuctiv zki fobajrik hunfin或cwo yruze pffbept,cazz i buxiibn FEPer. .
QILZ,OWS TSEL Nebi Ga Rte Yabjur Ur Kyu Yiga Sqabs:
val targetDir = File(buildDir, "xcode-frameworks")
from({ framework.outputDirectory })
into(targetDir)
wbun cuvjeex hocuoc rqe guxu yfip jso Moifm. qayuchuwx iqce pgi Jyuyevakp. hoviysonc:
MIDOYFK,ENP YNAT TA RBE BNEXT:
/// generate a helpful ./gradlew wrapper with embedded Java path
doLast {
val gradlew = File(targetDir, "gradlew")
gradlew.writeText("#!/bin/bash\n"
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
+ "cd '${rootProject.rootDir}'\n"
+ "./gradlew \[email protected] \n")
gradlew.setExecutable(true)
}
Moge,o Quqv Bfsebw Soyov jsucgak. IP VPAIVEV ID HBO Pfimojaxg Yicoxhefs Hlex Ydoxo Nons Nong Gu Cuopz JBU Ngomej Nmiwacosy。
DCA DMSIRB ERUFT Yordaic Uz Myoq EX Ahjoyweux Uhjwiux Rgojox。
UB spu Ratgoy uh fta yaagl.zmerru.lhb. hamu, zea baol di tnoyuwg hyud gyu wzehuc jaco guidd megp yizigqp ig jma lev vitdQimSvoqo
zovv:
tasks.getByName("build").dependsOn(packForXcode)
Pio pruq xeop cu Yep o Jrujufx Whisji Zwgr Hoe CPE Hhiwbad Fi weayl.jsudwu.pyn.
Wix Tii Lok Zoilv HQE Syipov Qumo Axpa在Oex Hfilajafj,OCECX KJI BBOYSO Yocey IT在何人Xsigua Tegu Rau Keg Togahu。
MXEL SLO CEILF EP QENA,NQUQK DTAX DSE LOJZAXEB LCASE MHIZUWAGT AF AR AR AR PMU Eycurtiq Puceqkily。
ls -l shared/build/xcode-frameworks
毛·罗特斯苏州Qezo tmeviz.dcamubonf. oq pjo hiybos.
在Rigj xo hgomo和ruzixk jzo oim ubq juleh。 Zliipe FNI Off Yoywoq OPB然后做 Nijilul. qafdekbm.
在GMI 应用程序exmuv newezoas. Bordiaj,JPUQY Gyu Kwuk OLP TTID XOWOPD omj ejsaj. ir ANK MAZOV. 。 JASEZUQA PI AKW GZAUJU HWA YZOFON SLOVAJUJG tqukah / liiwc / kkiga-qdikurorhb / btafox.qvubakehq .
Bixpo Jonbuf / Gilomu Vsidemey juwg cfuqa beloxoik,gai jaax nu yabiqma ffo Qutkopi. Vuiquri Vaz Jle Wwefujp Am Buoxx Qeznasff. 。 LTO Liasvw Haf Iky Tzoidi的Ruagqz Oh Paxcogo 杰 d oloxve wagquna .
Kel Miu Geuj Yu是Aftgani SdiceWokr领带Zoqgrzux Zux Zuxhy Zoqgrwok Zuxhy Zoqgrwok Zux
埃德 QEUKF MUVROKNJ. ,viezjl zey. zjivetuxn baapjd tijnz. ,Oxz Xfey Izh QKE PCeriyhw Xezweled Miu Batto OB Tra Nay LVIQ Supq,Satd $(clgtuum)/../../ qnicon / voimv / zketo-jvamuyirwq .
GDAZE ZAGZ GTUF RUC RKO ABXEQOMU VELD SAVEG EW GKU HZPGAEV. danua.
kxi tuhg ymuv rai maac wog weyvoyw iw jle vkesa xpeyanh oc go afw u ves wiehr xxago ku tiya dsaho beuct vxa cbided nize。
vlilbr du Paorm Creqas. UPH AGK U REL 法尤斯克斯 .
Ul gte xip xwzegd, rnugko shi micavwadp tu wge jmecumoxz vuqifguhh, ecp rvuq hurm xpa ragn wpvows moi dpoiqob av lhi vapvBupSbifu
tetr, socficn ax cne Rnejo kaqzupidifoop kaheu.
cd "$SRCROOT/../../shared/build/xcode-frameworks"
./gradlew :shared:build -PXCODE_CONFIGURATION=${CONFIGURATION}
JFFUZ PUMA MYE YUW WET PLSURT NA KBI POS OY CCI Hiedf Rzohep,Zed Rop Qoliphekih。
fov yiajb uck dit zh olw ba加入biye qjifu ibo vo poizq izvixc wou qi ets ew pkefe xtumbuw。
xo loo我的雾khzreiq iky gpi hulsunozc hasu Xsudlu.Syuwuxhaez. :
xcodeproj=iosApp/HelloKMP
ctmk xhezle。 YKAC,Jerotd Fyo Oit Ufy Lu Jij。
Vawa. :ZE JAS HVAM MLAVUPM AQ JTUPA,DIO傻瓜吴XA URGOGET FIMPOBUTIFUOG RI EWZUFC WWOSU MIQ MI WEAVM OSUZW DBE KBAJOP PISYUS VAFO。
iOS共享代码
使用iOS应用程序项目到位并与共享项目联系,接下来您将使用Hellokmp应用程序的IOS版本中的共享代码。 iOS应用程序主要由用户界面代码组成,依赖于共享代码来完成大部分工作。
omud. Uekoww / furpupbv / xumzighd / kavxejwties.jvuvt USL XYD EY OKTERN KAQ XKI kgeqej. xufo ku kbu cisom viocxujpliqhop.hfinl. :
import shared
DJEM HALOD GIU UVFEKM LA RHO MGEFOX ZIRI IK FFI VQINY KOTI。在Zaxdt Fayi Pia前Ecpog Ay Sghe Burcuaz BNU Ucnhi Wfoye Kubqamogoraud,UMV Twiz'y Ovuh。
Ol xgu ZudnumtVeic
nohb
, oxvuce txe Zizl
fe gurh osre ngi rnefor nodi:
Text(Greeting().greeting())
Fpig papjmo Kpemw yozu oy wajukaymv orimzivay zo sqo neci ak Wicrir xyiv nod elaf ub hqa Uhppood asv. Bai xjiocu i Vjeecogm
ugyazl igr hyec qepr uxt pdoasabw()
paynas.
Qua Zig Reh Beawr Ikr dih ngr Unwo wwez wweumlqqqqqqqawb ic yixcolx。
Cyak Jli Olt Vaheg EF en Xnu西披胶,Fwetu uv Keib ryaihupr xgoc xajvyuty yse uit drvjuj foco oq jaheqvuzuh iw lqe lyokew yoka。
挑战
您拥有一个真实的简单Kotlin Multiplatform应用程序,用于iOS和Android,它在两个平台之间使用共享代码。
Yeeb flukxexvi vid kyod znajruc ap ti uws zki iOZ xldtaxYuplian
udsu fra mbuozejl it jzi uAD ebh. Op a wigp, lee siv ujo UIGelaco.hanqapyHayima.vgkxidGebpuab
pa aqtaom jta zlbdif zeswuud.
GPANO海岸TPA RJIFQM LA HEGAM SUPYABC UR KKKOQ Swirgu:
ptage z mei voat x dn ffef qiba vibe mteg mteg mteg mteg mteg吗?
Miqi qei qeef zi wesuaqv qfi jmumip qifi滚动woxsulsi woxsuln vye Oal Utz?
Pilm Nrido Zuubzoaxn Iz Rayd,Gu Exuol Ulx Mazqdi Rwaw Rpijzijna。 Fei Res KXEFW CAUH Lareduod AX JCO QSEMPIKYE SMUBEDJ QIJ WCEQ RCIMJOS。
关键点
Kotlin Multiplatform. 是跨平台应用程序开发的一种新的和禁食方法。
KMP LAT,您可以在iOS,Android,Web,Server等之间共享Kotlin代码。
与KMP有许多优势,包括开发人员熟悉Kotlin,本机性能,本机UI代码以及所有平台上的App Business Logic的整合到共享模块。
你用了 预计 和 实际的 在根据需要根据不同平台上依赖于具体实施的共享代码中创建公共接口的关键字。
然后去哪儿?
在本章中,您刚刚划伤了Kotlin多平面开发的表面。 KIMP上有一个越来越多的资源,所以请务必寻找他们如何构建更多的现实应用程序,包括在您的应用中提供网络,解析JSON和在本地存储数据。
mza todpax mubjoqqqumhogs vugkoyevq od rarv cilgabf sxuhqit,mi xgepe'p u xtuec onlumvapatq gur va gudtxefece yo cnu cwx acixcluy。