一個(gè)名為“Port to Android”的合并請(qǐng)求最近被合并進(jìn)了官方Swift代碼倉(cāng)庫(kù)的主分支,這使得用Swift開(kāi)發(fā)簡(jiǎn)單的Android程序變得有可能。該合并請(qǐng)求為Swift stdlib增加了安卓目標(biāo),其允許開(kāi)發(fā)者使用Linux環(huán)境,跨平臺(tái)地為基于ARMv7處理器的Android進(jìn)行編譯。
Swift面向Android的端口主要是兩個(gè)開(kāi)發(fā)者的貢獻(xiàn):一個(gè)是Zhuowei Zhang,他在2015年末開(kāi)始了此項(xiàng)目,另一個(gè)是Facebook的Brian Gesiak,他提交了此次PR,并解決了在最終被合并到主分支之前出現(xiàn)的所有反饋的問(wèn)題。由于這次PR的規(guī)模很大(最初包含了54個(gè)文件的修改),整個(gè)流程從提交到合并花了差不多兩個(gè)月時(shí)間。
正如之前提到的,目前只有可能在Linux環(huán)境跨平臺(tái)編譯Android。另外還需要最新版本的Android NDK,以及為Android開(kāi)發(fā)的libiconv和libicu。這些依賴(lài)項(xiàng)都滿(mǎn)足之后,針對(duì)Android的Swift可以通過(guò)這樣的調(diào)用被構(gòu)建:
一旦編譯器可用,它可以被用作創(chuàng)建Android可執(zhí)行文件:
它可以和Swift stdlib以及Android NDK libc++一起被部署到真實(shí)的Android設(shè)備上,使用下面的adb push命令:
最后,該程序可以使用adb shell命令執(zhí)行。
因?yàn)槟壳按硕丝谥话琒wift stdlib,還需要做很多工作才能讓Swift有效地被用作創(chuàng)建完整的安卓應(yīng)用,比方說(shuō)提供圖形化用戶(hù)界面的應(yīng)用。它可以用兩種方式來(lái)完成,要么用某些可以運(yùn)行在Android上的Swift UI框架,或者通過(guò)和Android的Java框架交互。然而,要注意的是,Swift編譯器目前并沒(méi)有包含任何條款,能夠讓Swift像和Objective C代碼互通一樣,和Java代碼更簡(jiǎn)單地互通。
另一個(gè)在真實(shí)Android應(yīng)用中使用Swift代碼的可能是,使用JNI/NDK通過(guò)Java調(diào)用Swift代碼。Zhang還提供了一個(gè)原型應(yīng)用示例來(lái)展示如何在JNI之上從Android Java應(yīng)用訪問(wèn)Swift代碼。