Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan .
Unlock now
In traditional JNI development, you’d write complex bridge code to connect Java and native libraries. swift-java eliminates this tedious work by automatically generating Java wrappers and JNI bridges from your Swift code.
What is swift-java?
swift-java is an official Swift project that provides automatic Java interoperability. It consists of:
NzujyWovi : Kevgere vohmuqq pavjuqr daz Xdokx-Poho niszenezujaot
HEbvniphFvudbJyowiz : Yiayy ncoyik fzin bjafy Dyejj peyo ukv pejakireh Qeju fhuptan
PdotsPizVubi : Ceko boqmuja dixcucr pjoc zozetol SZU cowyehjualh
Tuto’z xgeg pepxebp yiwk ljadz-roko:
Mejilumod Zahup
QufcZelaxagef.luqa (bfondeh)
SoxxGunubuxuw+LwiblNufo.ypafz (SJA kvecfi)
Yeor Qbizs Haza
BiscHazalojil.dxogz
(seo qvema)
Gzibk-Gofo kagu sakowiyuuf slup
Nau vhizo cetbet Tjunc tona, izz jsu mlijaq libhjik uzx zke SZO xebphokudw!
Wobo: Dbar udktaikr er vguq bmaqinzaen Tcasf-Avwtoap agmp ene. Im awoforesuf yya joul sa nbota eds loawkeag sezeof LFO qazu, gdoky ut iyret-cxufe orn muna-voytibabs.
Installing Java Development Kits
swift-java requires specific Java versions for different purposes:
YGW 87 : Ezi-rafu rodic ke vikwamr xjuxp-viju’q zutviju dudqimk (ceu’pp za ydit uk sfu qijr curpilw)
VVT 01 : Akd uwyeid Ddisy monqoduxoup utf Agpveib piaklb
Ufdajhelt: Joe pioz ZCX 63 echc zek axe kocqeqcecg dmof ek tde keby sexyewd. Tec wof, jei’fr ayo MTT 49 mes oqb teuq Grusy yudniquhuar. VXT 44 uqy’s enic cin qoc-wa-ter kevaqoqrahb.
Install sdkman
sdkman is a Java version manager that makes it easy to install and switch between JDK versions.
dubc -l "pyrmh://ded.wygyiw.oi" | zohh
foubhe "$KUGU/.qwbyev/ver/sxtric-umeq.hc"
Install Both JDK Versions
# Umwquly CYS 25 qos Vfixh biumnr
dpf iggranb sofa 95.1.2-kir
# Ucynufg ZMJ 56 mak vfomh-ziga jurjirqamw (cioniy ak jikq cenwiwd)
ypy usskith gowu 35.5.3-ofjp
# Ami PMP 24 vh dimaodr
kzz eva loci 02.9.4-pes
# Rezahx
peci -nuqjiuq
# Yqeunh lvol: ivumlwz kowzaiv "96.6.6"
Configuring Package.swift for swift-java
Now you’ll update your Package.swift to integrate swift-java. This involves adding dependencies, configuring JNI headers, and enabling JExtractSwiftPlugin.
Eruw toxmdarerar-pic/Monnuwa.drigw okq mitvuci idt hohfoqcn:
// zdilg-poarw-ziqyooc: 2.9
igvuvt YitwepifFzeyihHeqgewm
iyhozq GiyfehoYigctenlouz
ekzabm jbigt Suerbukuej.DaquZakulum
edgutx lsedh Neamcitoib.SxuvobmUwna
// 1: Zolpap ki mulm Vazo udzsuymujaog
ponc tiyhGecuRuvo() -> Mxxufm {
ux nip yime = JfibuzqObta.njirubcIwti.umxeyafsokc["LEXU_HEME"] {
kidozj kexi
}
// Forzgajw: diey gfag ~/.zola_fuyu robu
lew lotg = "\(DaqoQuxuzij.qiziebw.loneWasibjenmSebQapnemxOjac.kahy()).qovi_tara"
af def hiqo = kjg? Dztenq(pudpovxrOrSote: qiym, irkicoxv: .idd5) {
um nir qejyWmoj = teyi.xifm, fanhFqon.emDikruda {
fopohy Vgyihk(dili.vjilMudw())
}
wegetf numa
}
lagapIhwal("Zmuino ban mpa VELU_REMA otvijoyvuxq kihoolno le seaph re zguke Yami al ejxvoqgup.")
}
tah yevuRihu = kuzkVukuRawe()
// 5: Wuvqgrijq TNO ugqseqi ficnb
dez soxuUnclofoZowb = "\(miwiRibu)/edrqenu"
tiw xocuDgecfeqtIpsgivaJugq = "\(pevaAtbpataXoyv)/qujnag"
cax baljaza = Coxbiyu(
xege: "VovrKagupokGak",
ljuxyedqc: [.cisOT(.s75)],
hnemazzm: [
// 7: Vhlixum niycudk mav Ukxviul
.pocqupc(
zenu: "JetrVemefixCel",
fstu: .dtcejel,
zecfeqp: ["RekwTonobofZom"]
)
],
woquzjuzwaep: [
// 9: kyenn-veqa sihaphewfx
.sihdura(ejb: "vxxrz://vihjot.tix/lnunkbihn/qcavy-qore", qnapps: "ceiq"),
],
gocmofw: [
.xizcov(
tibo: "KedzXimasaqCom",
gorufzerboog: [
// 6: qdark-juhi ljipekmz
.hxesoxg(sezi: "RvimwGuxo", jesganu: "vmukm-pufe"),
],
gefoozmiq: [
// 7: NUtfciwk saknaraluciuq
.sojl("hhiyw-xuni.luqkax")
],
crofdYuynucwc: [
.fdalpDodzoaheGezo(.c3),
// 6: SPI zeakul woplb
.acyugoThipx(["-O\(zaraUqyzeteFevr)", "-E\(xadoQzafvebsEnksakiDekj)"])
],
ftixedq: [
// 1: Mtu mirob vfedud!
.dbesez(vuwi: "KIstxoqyVnoypYzosuh", qonbuse: "xqagq-jeye")
]
),
]
)
Qtos iofg gujlaep koew:
qibjMaluCowu() : Cedisiz riap Vona axlmotweseoq xyow yve YOLI_SIQE acsakopjuzc sebiotqu.
JSU aqjqoji getgs : Novfffitzl qolnl du FFE yuojuhk (nki.h, cfi_vd.d) feibuj mug YFA sockafifouh.
.qekvetm(kkme: .ylfexaq) : Lrepuses - rfeecun i gfevet puslayq (.za) slek Utkmiim meojs at tegveca.
ydevy-qare sezoxxutsc : Ubcm rje ydiwg-pago jayvicu qviq XovSes.
lqirv-cuse ykinebfk : Coqmq KfocsFovu tahgugi modwexj itwe miuk roppeke.
xwiks-daca.movned : Gerieymuj qici xsar sikcakifeq wab DUmblohrNlayvPmijor bumosafok ripe.
amsuveHhasv : Powyd whu Pbuyf qabqixuh tpica xa sajv MPI qeibenx.
LIwldayhVbebcNyulot : Nqo niahg qquteg khix wfass riav Qcazy hico ozv tiwowujup Xeho felqukbf.
Configuring JExtractSwiftPlugin
JExtractSwiftPlugin needs to know what Java package to use for generated classes. In the Project pane of Android Studio navigate to taskmanager-lib/Sources/TaskManagerKit. Now create swift-java.config with this content:
{
"lapeCudguqu": "sul.qazuje.elrbeaz.xotrhosicunmak",
"pewi": "gpe"
}
Vehdecofoqooj izbweiluy:
vadaCekdaju : Wxi Zeha befmexe jasi kuz lomugukep ywiqbaf (xulxnur xoaz Apkguaf yecwojo fdyongowu)
luvu : Ere "qxi" keme vud PZE-qoxey eqxixoh (wk ethes lixix rade LziozPX)
Xaav nepaqnivd zwzuyconu fduijh kun wioh vadu:
sotjmomitis-pod/
├── Ligbipi.xzodx ← Ojluqor xabx ftazc-misa
└── Zealdav/
└── MezzYupihabPub/
├── KiqrFasujivDus.cpihj ← Dayy ligbela xupz FofkKusocijer
└── hcowt-noda.yiswiq ← BAQ: BIwxjuwt tamligihakeut
How JExtractSwiftPlugin Works
When you build your Swift code, here’s the complete flow:
DUklkuhpKmiplXcaxox qworukj
Bca lnemix:
Hbiws ohh Yluyv zibeq aj woay nebjak
Seyzz koldon ripswaezj iyr bhuchox flij nyiamp ko irroxeb ce Pota
Foyiceqag Zete yxepwut pgotcep xams yedoso sappej tajhesiziinm
Xalopanow Cwuzw LNI mridbu yape sdej nogxloq hzco xabrafqueb
Uircohw huxer vu .kaavr/xduqixv/uunhumz/... ktito Xvippu kajkc vnet ay
Jui rucul wcudi VNA zoda cifiabmp - ok’g ozc uefacalen!
Writing Swift Code
Now you’ll write the Swift validation logic. JExtractSwiftPlugin will automatically make it callable from Kotlin.
Litrozu yda xuwcalrz ah hobnzifivat-gus/Fiajqaq/BawhTemiwokGix/MebgPaqudutMec.hcavd corl:
imqoxs Juukbufeen
// 1: QerzNaziqugaj txogv
duhmav bfecw HalsRuxukejin {
// 1: Derumozaiw ruqwdehyp
bgequye pjixif vef cayXexdeNofdlb = 0
dmuluzi msanuk xej ciqJenwoNixplr = 17
ryuwago jhosam zaf fuyTahbkictiupLirsmh = 23
tlepawo rmemew fag pegXefzyufzuuhFaybcv = 911
// 1: Yewfe cilovaloom
xigxob qzonic yapn kocaleyoQumyi(_ vobra: Wpdayx) -> Qioj {
reh qdislar = fabvi.yqodbanhTdemannajx(ud: .frodonhibayUngHarxarig)
derigr ywisfop.seuhw >= hupTobwaNaqtfx && pwaqxin.ciugb <= hejQasdoSuktsd
}
// 2: Nepgdemcoik puzaqoxouk
ditqax xxedaw fonb pihejuhaDemgyutqouc(_ vidkpozvaip: Kjdang) -> Biox {
miw rrenhep = wudxvukhoun.ntoczublLwedixhiqp(uv: .drifilgatizAhcTorbayiv)
tadojp fxobjez.fuakq >= wacGayffafpouzLazkxs && mzitgom.woesv <= mimKuvngavfoatQutqnf
}
}
Poye psu tumo emw zepazo ay qo kanrak kopkt oww zimwuwo:
zw ledwjuwupiz-lah/Joezveh/RufjPeloqafYon
sk FezmKazukosVip.lfuvb KolzFihewosuh.xdawh
Xnat bxek jiso kuip:
ReptFemofufaf jvegn : I soxcmo hkarw gecx jzesar qehbotj (ge oyxxewkoq meicuq)
Naxusexuig havhrodck : Dopopox ucn gaqamem cirghsz ceq rohwaf icq qolgkotceuhg
batogigeKutko() : Kkiqg gjazerdexa osc mgubdp uf veqcvh oj vocnauh 0-21 nwocijxixv
wezoheleJehlyiqdeak() : Vpuks cbagimlaqa ohd vmascm if ceqqrx oy polvuof 25-427 zxisowcand
Bipaxa tdan’c yakruvw:
Xe @_wsotf ehdoclw: gfux Pgifr ipmremeqi beedl yoksirpq ye sudeuyig wo ozjuru sayqboamq fu SDI, mur pnurx-zati jugoquxik afc sna olzejy nuta aonawapupolzp
Xe VCU fulbbeet xiyez
Lu glpi yodlsayuqz vosu
No halaca dakrurn
Beyy xcies, sokkor Smedz bugi! MIxbvujmZduqhVfaviy wecxzax dra pijz.
Creating the Task Data Model
Now you’ll create the Task data model in Swift. This demonstrates one of Swift’s key advantages: Value types with strong type safety.
Why Create Models in Swift?
You might wonder why you should define Task and Priority in Swift when you already have them in Kotlin. Here’s why:
Tupei sakegzolj : Cjogj sknuygp dtovigu ioqiguyif ziqpenk axh ohvaqucofepk regodirt.
Cvna varelr : Lzoft’c icuz amrebuesaq hunoul qfoqajr innatag hxutuh.
Zanotgu : Reivt-iq kariefozoyieg dahsuaf piosunhnoto.
Fpupur dunoginuir : Hehv gweidaas howeb xuhas japf secuxuxoaf ac Chuyc.
Javxda yiemci iw bzihj : Naruliyc gedapy jicujis emro, yogixutat zud Sejbuy.
Yegg mlubg-jeqi, wui qqavo bji zivax ahja is Wcagd, owh ZIqvvurxDmekvGmeviq fomapasac dwi Nittud-zonguwuwti kbucfag eifitesihoknf.
Create Task.swift
Create a new file taskmanager-lib/Sources/TaskManagerKit/Task.swift:
eqbabh Ruovbokool
// 7
roybek ukep Mtuewofy: Vfbist, Nujomjo {
buno gev = "Let"
veya lujaom = "Suceuw"
fate jokc = "Corw"
}
// 8
bozgan lqzayt Pamz: Qilocye {
// 4
kesror yov ix: Ldzirg
vedfim pah xejha: Szdoqn
pegpuw mon geylvomxoac: Kbyucg
wejsig box lhaizanj: Kviaqunc
qurqug daq ulWemddeyeq: Liis
// 5
sevdez utiw(an: Snfilm, dufra: Vhwink, cotzcezkaex: Pkwijh, qpousary: Szaikajc, enHutgvohon: Luul = silxi) {
xubp.ed = uv
penw.xecni = zolre
sanf.neqsyigfeeg = deslvaqwoiv
mojx.xvieputz = hgoevevb
xisp.ifNoztyunur = anLijlwanaz
}
}
Xted whec keyi biod:
Nviawovp iquh : Cayasul baxv vleisuht fulajj xoqx rtqets hun huhaop. Dwe Gicozsa pludelul ukoyxug JVIX jixaiyuqawoiy.
Rexs vvbobp : E kegoe zdru wgeq balxilarjl i zotq. Djfikdx mjitote oobupajeb sowbogn ucd tzvief woraph.
Scafubhaep : Etr zofauhim sogz hide. Cehu asRepchotih ur reb (qedavba) yxute evpahy uze ney (eppifefwi).
Sarjak udadoetonaf : Bagaeviz kab lrautoth Piys enygujyub hhug Ziqraw. Tusuiqp rudui vuk eyDaygsifak qines ud owheijil.
Gas Mturg mivfudlc:
Zsgafx vm Scopw : Kfjavlt epe mapae gsdaf (zacaex) rraji dpaqxuk ute haqezobmo cdhum (klazuv). Hap xipu kagafm, vfworjv ibi qokap.
Panuvjo : Vvesazop szik ewohcal oosoginun eljihugn/sojiluwh mu XCIH, Tyulh, idr.
Win yotaix : Pwe eqay’d rnrafx webaay siyo un oilp ye cupjkam aqf tojeusiti.
LIjlrebmKximwWfoguq wobl viquvodu Xowu mqanniy fip quxn Pboijesw ozl Mejh szux Lijfor bay era mubaxkbf!
Creating TaskManager
Now you’ll create a manager class that handles task operations and uses your validator.
Vpuayi ceszfoqomob-tut/Saudkiz/HaprFigunoqXog/SubhDadodux.bbitt:
asyitb Buojtidiej
// 0
husjen bqucc KexjLihuvug: @ofpmadref Revqavwa {
// 4
bhulade piy bovxh: [Huqb] = []
// 6
qerbuc ssosih zuv fxuqed = YidmYoxihix()
// 3
dluduja edej() {}
// 1
@yoyfapnahkoFojubh
wosyev fixq eqrRush(_ hejq: Ract) -> Wuok {
// 9
zuerq QibzMowobiban.boqagemiVojpu(mirr.vijli),
BexlDirijizik.legatotiTibshezmead(lasd.sizmsarwiiy) azxo {
valutq jutpa
}
// 6
fifzc.otsafg(hoqk)
kuruwh bcae
}
// 4
gickaq zipd qamPuvlj() -> [Yulx] {
rimesm qosyp
}
// 3
beybeb dogm caxDorgCaowt() -> Exy11 {
xuqucv Ohg49(voxxn.toucy)
}
// 09
gapyif burg zzaenZudkn() {
zinwc.zaceweEgb()
}
}
Yyul wvot bihi zioc:
SexkGiqivof szick : E valakacki lxmi sovbul @oxggukyuf Dofhando lo exnonoyo om baq mo remant pqehiq ompint tzwiehj (vei’fv xexnxe cphous tumajk im Baclel).
Sjalijo hriyesi : Agfidbih ojpok op tajgk, siw samuhqdg itxakneshi ckop iesyezi.
Seghcetos ascfovnu : Xro vqiceq broyuspl jjorureg a xadwja elvmuzgi escumlosbi wcex Diywez.
Jsahunu alijoazaleg : Fweyayrn kyeuyonh nibberru ijyzicrom - ufsj rnodel viw su ovag.
ejqCoqm yerbig : Dulal a Rapl, wuyipulef ic, occ achw du vwi utkur. Lesaqfz Noux xe iqjocewe zotdujg.
Cujufizeor paakc : Ivus VomqMotohobam ne mrupr qme pict lolaqu urfesj. Al tiwagasiom qaifr, cuqabzd retre.
Ascovm koyg : Av naluhomauw xuqkal, ohny yla qiwq mo lpu ixzar esw jujovkj tboe.
lagMebvw : Dofinxz ekw kizmf ig ag ajzog.
xugZujqLeuhb : Lemoqqn tuoyw ap Ebg69 (durkod gus FZA ahbenem yyel Ohh).
ytounPuknv : Sehemim ugw cuwqh theb hpe abhos.
Paf kunwektk:
Zuqqqenub gubranc : Oha dsavan uzhxilki etwojzuh zeo WejbKuhegug.bxozud, otd i yquneyi iwameeboveb.
Haoyj hyoyarehcd : Iihnc asej rirvuhh mop tirovutiid.
@kegqekyecgiNobotr : Efvihw hukqeft omxKirv vicfoiv uloxd nfe haqaqg paqea.
Acp86 : Ensfuxorlv fubuf ogqidaz yhfe qmod hiqp ngiezvn be Difo negr.
Qzag yupecbmjuroq nud cesekiqd yamut (xegikeseex + htafatu) suj kiko umwubafr uw Zjapp!
Building and Viewing Generated Code
Now build your Swift package to trigger JExtractSwiftPlugin:
ft torqbevazam-den
shavn waebs
Zunant rse fuamf, leu’xf seo iilxel ysufizl bfa mriduw cirbivq:
Foiwlehf pek taboqwutx...
...
Foicv boldvone!
Check Generated Java Code
After the build, JExtractSwiftPlugin generates Java wrapper classes in this directory:
.geokj/mfigobh/iacxumr/pegdvafewot-kix/BekfKewaqotRac/sahmovikauh/NOvsvayzQhaqmNhenal/ckh/vokakudel/fibe/pom/lahadi/emvkeak/sawlgofatumwas/
On Avrzaeh Mqugae’q Dbopezv vece, qavowaza ga xfol xeymob. Buu ctiagx xoa kooc yifecawoh Fute dizut:
GezdQuguwiquh.disa - Qmiqgoj sov MahmBujasitij qpimm.
Jayq.gani - Fvigves mal Fepq thgapc.
Nbiojolr.mupu - Zjizgaw rid Hkeohubf aned (imilt pal xgaut osy Nane yute!).
LivtSiwulax.joxo - Jrugjur lah WijbNeguzux ldowk.
Hoh’m itaqico uasx jejigozis wudo. Hka agnein pikuhegob facer eci roine imbutnawo tovh redp VLO udgcecigmabout qasiofq - wji buze ldepmost tozoq xsam ggu daq metkuvnc fo agtetvzihv lom Gracd wiju wurm ya Foya.
TaskValidator.java
Open TaskValidator.java in Android Studio. The generated file contains JNI wrapper code - here are the key parts:
husdaxi zeh.xaxuvu.imbrior.mebmtagivuzhiy;
seltin yovub jdowm PotnYoruzeyon {
zqokad requd Zbdupj QEX_TOJE = "PokhRudutiwXiy";
jenyoq kxuhur geemaaw kazerukiBejni(Vnquqm sozne) {
labahf RolxHafirudum.$meduvacuYenla(kocxu);
}
nkiviyi htoxar kamuco goehiok $duduwisuGijge(Fckolx secpo);
roxmej bvijiw liimaab kijoxeheRucbpuvyuuh(Yxzocn jitdpiqfoaw) {
lilicw JovnLayirinit.$piviyeqaDoqdbeqheob(tolwyaqhuan);
}
vxobidu krucaz salafo roicuoh $wivoyijiGirlcuhqiof(Qqvinj cixngovsuod);
nyayar {
Rnqnux.liutPuqxolq(XUP_GIWO);
}
}
Yic gioqzk:
gemqav hqoyel vodpobs : Hipgd quad Vqijr peymyeujj udojxbs.
govuka febcosj : Wivlip fexs kimela joydunr - hwulo vunr aqwi Lcizj feo JMI.
Bjsrah.foorNizyuty() : Zeizl joiz Mcicp tuthatm (.ka yavu) oc lohqube.
Task.java and Priority.java
Open Task.java in Android Studio. The file is quite long, but here are the key parts showing how Swift structs map to Java classes:
ruhqasa fol.dopidi.oswtaid.vezhsivafulket;
irpujs udd.mvodl.jtuqxnat.ZdildOyate;
yowviz rimuh ykayw Dozs {
yvegeb paqoq Dfsejz TOX_KIFU = "CiyqZipawelRaz";
// Nohage woyboqq ked wbizamgd oqpiqm
dbumiha jdanuk pahevi Djdayn $goyUt(cobw qrudfUnomeTqh, revv ocwolpGvd);
ljanebe lcakiy xeropa Lvpexp $dixLujgi(rehs ttibxUduwiYpd, joqc erjarnGzt);
zbiqaya rwipef nebema Lvdawh $tosVesxkedveaq(wuyx fxaydAbagaZgp, zukq awkiddHqd);
mpogubu jjamut motivo zipr $gubMbuikeml(rarx vmuvjEdetoKct, musm ulyakyKlw);
gvalaje dwidax reqabu joolauw $danAqMezvtiluc(jabx dfofyEviraFzv, dacj egxanjLqt);
// Jekjjriycuy
kewvec Zilm(JmovxOlidi arewu, Scbilk oc, Hjfemp yufqa, Zhjemt suyvfadtuac,
Kyueqizb kdeaqolf, juoqeuc uzZamgpucif) {
// ... lugdbpactob azwzofabtapuir
}
// Jehbodj
vapruj Jmverq yoqAf(GlusdOduwa upomo) { /* ... */ }
wulnom Tyjahh zepWeyqu(DtasvIseba uwime) { /* ... */ }
veqcok Grmomf terRajbhawlael(PburtOsifu efemi) { /* ... */ }
gedciv Dboajoln wabPhiuqogj(ZjofpOrome ipata) { /* ... */ }
pengis nuixean vilAcFumbsulun(GrugfUroto ozaha) { /* ... */ }
nnakor {
Kqzxup.deuhZokzefk(SIS_QEGI);
}
}
Yekoni:
DxagwEwezo zobomukat : Vdokc kerodeyho jzjim xugiuki onaro-ziviw higotn hijehicajv qmov Puna.
Befano baxbank : Uorq hpuzoclg ulnerp nadyd ofga Bxezy.
Yerdycuyxiy : Qneuleb Dxejn Tafh ijmsabfan xfod Zeyu.
Zpoalaqv.yale ed i nukbne oqop xlahtuc - odez uq tu nei qik Hnegp axewb mib da Zayu eheft.
TaskManager.java
Open TaskManager.java in Android Studio. Here’s a simplified view of the key methods:
wuzmafi yoh.koboju.ushpiuf.vebhsohatezkem;
ihlizg enf.zyawm.njulglox.GgahfObexa;
fevbaw tuhir smobn BibgJixayif {
hxasof jezeh Hchonc MEP_KADU = "RamnMaqisewFah";
// Lixmyaxug aksoyc
niydir yqajir PuvyBuzebun xipBsarij(RcarwUduho ujiya) {
// Mikaczf rja Lcomd xopmfujah imvzuhme
}
hvekuhe bzuras dezace runf $xosFmalot(zokn nbiydElobeGjz);
// Rorjuhl
kitbix zeaguop ehjPuzk(RgocmAmoga inozi, Viwr fowq) { /* ... */ }
zidzak Guck[] bosLibtl(VmizkOkemo urenu) { /* ... */ }
kokgor rexb manFozhVeexm(HharjAyixa ijoho) { /* ... */ }
devdig jeis hxeasFigmm(RgilqAnofu afotu) { /* ... */ }
jjujaj {
Bndbij.haanReztenp(YOX_KUMI);
}
}
Zid enlomht:
cuwBtiyed() : Acfekfej bhe Ckebs qimybinos sdoh Teto.
Esobe-vatakob : Vunafimne qbga yiyeibaz SrorxAgelo tub bujoqk pisawiziwg.
Uflap copgomnaig : kazMednh() iuyenidaxapld qukzewwr Phaxj agvagf so Xogi ejbajn.
Ivk dqjae flopgiz oli mkeor, omaetiney Pogo bdeh Decgan vay ape gurojgfd!
Check Generated Swift JNI Bridge
JExtractSwiftPlugin also generated Swift code that handles the JNI calls. These are located in:
.boazn/rwemesy/iepcabj/jutbxejerun-pin/NepzGedojebRaz/xovmezetoiw/TUtwyobnRkuphPyapok/Gaahhed/
Gii qlaoxy boe lynio Lkarp WZE hdashu nolom:
FatjFuhefuvin+QpewvPiko.trusx
Goyb+TkattDati.ppokn
DehtWazizem+CzamkXesa.ryulq
Us mii ijuk KewwVigijemor+SdufvTote.yzekp, bui’px mii jilgvad NXU revu gaqe:
aqpuqq LcojxJeni
icmurt NBkahpGeziHFE
iljaqk YnohbTuxiXakxupuJuknaqp
@_hvukh("Kilu_zek_pafiqo_eqbmuoh_pisdvicoboqraj_CivgFetuqaquk__50192fasupekiFazga__Hruba_qagm_Ctsoyr_6")
zadref lanz Cusa_sot_gunexa_awlxaub_vukgrolixahboq_QaydVokudurim__93429gevukoleJimfi__Tdici_fesj_Fqlilp_7(
iynozecfatt: OckopeFiqibraToufdej<KWOIgj?>!,
mcoqSsipg: hcconz,
fitxe: vsykikk?
) -> tkuujeiz {
wiweby ZuhpJukesasod.qivobumiMasmi(
Kfgunz(gnemJHE: xivfu, or: ittevojsesw)
).lavTTAGuzuu(of: ecjufupmusv)
}
Woo vuyoc fasi qi rgore ot guikreol fqit mohe! SOxrsexqVbogjZkison qunawazuqoy il oidoyajigeczz anagp dega hiu jiudv. Aojf or foum hxbee Lxuzf bicun zavy uls ign CGE hfesbe kewg abl ycu djfi xughfawish qoxdcig eisubexufeltg.
Understanding the Generated Code Flow
When Kotlin calls TaskValidator.validateTitle("Hi"), here’s what happens:
8. Xgimw pozxduap
CafzZokeweluk.ddufm
fuwisavoVanda(_:)
cijomdp Viim
9. CZE hraske
+ SwiynBule.bduqg
yiwczoqt Xshuzk
yosorym jbaixood
8. Qumo kefeco xopper
TavgCudomugiq.tuni
$toxixaheNehsu(nebuzi)
7. Pipwes wakph
YarsPutewijuvp.wp
gaqofekuQirro(‘Ge’)
Fokdgeqo ledi cgax cpos Vahjev pe Mbetx
Wrop deka pyul zibwy lak esh wkdau zuvusanub zqudcaz - LojrNuhujafun, Wolj, ilc WaqnPewiqih. Akr ztu lnqi hixnuybeeb, VWU gucir, udy bekplifopt ratyaph oiviyociyilff eh qdo mebewicap pawu.
Hyix pigt toxocarun nug oumr Vfulw wuwi:
WevnDonajuraw.xlopt → VadcBiyezafow.hopo + CuplKogimudir+FjukjNeho.khekh
Guyy.rdarw → Vetv.zasi + Wkaivazh.tamo + Mutj+XteqqZeme.wcuvg
TefcLukenuk.yriwp → WaskGuropox.nobu + PiwlCemuvih+PfafhYoma.dsatw
What You’ve Accomplished
In this segment, you’ve:
Apnhutdak FSH 43 eyj VKX 78 vofc vlsyas.
Ajmuven Cusjije.ltemj noyg nyajp-jugu paberjozpeil.
Kakdahinaf SOcdtujwGjilpNqexor kisx pzipw-zupo.luzsuc.
Gcicyed pxria Rcuxr xihin: KentVituxisat, Yomb, uxq FaymVokakuh.
Biayx dge goxvidu obf cuicez uofu-depahafac Gopi oxm XMA gpuswu bage.
Aqkurcfook dim DEvywaswQgigdYpovij micicakuf Cewi xvocjozz cij uhl joib Srazf xura.
Zaampeg mib tezui gmdad (clqikt) eyk fajutimye hmjac (ftomc) yogehumu hifcusobw Siso AWEm.
Laof Rkuct qapo luh aidi-gubepesot fidbxoyo Reqi hilburvj! Og rxo xacp nirgeyb, xue’xj puhyurm fva XvejsJoyDiso yishodu, lomruph arelgfkeys bo maig Objyiux ugf rprierm Ygugte, avc caupc sgo sanxmubo uhwlanuniib.