Swift語(yǔ)言已邁出侵蝕Android應(yīng)用開(kāi)發(fā)的第一步
譯文開(kāi)發(fā)人員從現(xiàn)在開(kāi)始已經(jīng)可以享受這項(xiàng)功能,不過(guò)真正值得期待的仍是Swift全面開(kāi)源之后所帶來(lái)的種種助益。
盡管最初以開(kāi)發(fā)面向iOS與OS X系統(tǒng)平臺(tái)的應(yīng)用程序作為設(shè)計(jì)目標(biāo),但如今蘋果公司的Swift語(yǔ)言即將把面向Android系統(tǒng)的開(kāi)發(fā)能力作為其開(kāi)源Swift發(fā)展方向當(dāng)中的重要組成部分。而且開(kāi)發(fā)根據(jù)開(kāi)發(fā)者Romain Goyet在其最近的一篇博文中所言,開(kāi)發(fā)人員現(xiàn)在已經(jīng)可以開(kāi)始利用Swift進(jìn)行面向Android的開(kāi)發(fā)工作。
Goyet指出,Swift語(yǔ)言采用LLVM編譯器——順帶一提,Goyet最廣為人知的事跡就是對(duì)蘋果Siri進(jìn)行了逆向工程。“目前的Swift編譯器會(huì)接入到LLVM當(dāng)中,從而生成二進(jìn)制文件,”他寫道。“同時(shí)值得指出的是,LLVM與Swift都是由Chris Lattner設(shè)計(jì)而成。”
相較于針對(duì)特定架構(gòu)生成代碼,LLVM能夠面向設(shè)想中的設(shè)備生成匯編代碼,而后將其轉(zhuǎn)換為能夠切實(shí)與目標(biāo)架構(gòu)相對(duì)接的實(shí)際代碼。
Goyet這樣描述整個(gè)處理流程:Swift編譯器首先根據(jù)要求生成LLVM-IR(即中間表示);LLVM則根據(jù)中間表示同時(shí)生成ARM ELF文件格式。接下來(lái)能夠直接使用Android系統(tǒng)之上原生代碼語(yǔ)言的Android NDK則生成二進(jìn)制鏈接,直接指向以上生成的對(duì)象文件。該文件最終被打包成Android應(yīng)用。
不過(guò)實(shí)際編碼過(guò)程當(dāng)中并不一定會(huì)涉及上述全部步驟,Goyet指出。“其中的最大問(wèn)題在于SwiftCore庫(kù)的缺失。……就目前而言,蘋果公司已經(jīng)發(fā)布了一套面向iOS、OS X以及WatchOS的SwiftCore庫(kù)。但很明顯,其還沒(méi)有發(fā)布任何Android版本。”
不過(guò)并非所有Swift代碼都需要依托于SwiftCore庫(kù)。“因此只要我們使用的Swift子集不涉及SwiftCore,則不會(huì)出現(xiàn)任何問(wèn)題,”Goyet解釋道。
不過(guò)Goyet目前還沒(méi)有看到任何利用Swift語(yǔ)言開(kāi)發(fā)而成的Android,“這是因?yàn)镾wift語(yǔ)言本身僅僅是問(wèn)題中的一個(gè)側(cè)面。另一大側(cè)面或者說(shuō)最難解決的因素在于,其對(duì)于Android UI框架的支持非常有限。另外,目前Android系統(tǒng)上也還沒(méi)有任何可用的Swift UI框架。”
Goyet預(yù)計(jì)蘋果公司為Swift制定的開(kāi)源計(jì)劃肯定會(huì)將SwiftCore囊括于其中。“接下來(lái)在Android平臺(tái)上實(shí)現(xiàn)SwiftCore庫(kù)應(yīng)該會(huì)成為Swift語(yǔ)言開(kāi)源重組工作中的重要一環(huán)。”
Goyet并不是惟一一位冒險(xiǎn)利用Swift語(yǔ)言在Android平臺(tái)上進(jìn)行應(yīng)用開(kāi)發(fā)的嘗試者。移動(dòng)開(kāi)發(fā)工作室ArcTouch早在去年就發(fā)布了一款概念驗(yàn)證性計(jì)算器應(yīng)用,且同時(shí)面向Android與iOS平臺(tái)。ArcTouch采用的是一款定制化編譯器,其能夠?qū)wift代碼進(jìn)行解析并輸出為Java源代碼。作為基礎(chǔ)素材的Swift代碼由蘋果Xcode IDE進(jìn)行編寫,并最終在谷歌的Android Studio IDE當(dāng)中完成構(gòu)建流程并生成Android APK。
當(dāng)Swift最終以開(kāi)源面貌正式亮相之后,各開(kāi)發(fā)工具廠商將能夠編寫出與之相適應(yīng)的IDE,開(kāi)發(fā)人員則可以利用這些IDE在Swift中進(jìn)行代碼編寫并直接將其編譯至Android系統(tǒng)平臺(tái),ArcTouch CEO Eric Shapiro在接受采訪時(shí)解釋稱。
“作為一款編程語(yǔ)言,Swift與Java其實(shí)非常相近,與C#也擁有大量類似的特性,而且將Swift代碼編譯為Android可運(yùn)行形式并不是非常困難,”Shapiro表示。雖然目前尚不清楚Swift是否真的勝過(guò)Java,不過(guò)Shapiro指出,Swift是一種新型語(yǔ)言且擁有大量更為現(xiàn)代的結(jié)構(gòu),而Java在這些方面則需要經(jīng)過(guò)持續(xù)改進(jìn)方能與之匹敵。