使用 Swift 語(yǔ)言編寫 Android 應(yīng)用入門
Swift標(biāo)準(zhǔn)庫(kù)可以編譯安卓armv7的內(nèi)核,這使得可以在安卓移動(dòng)設(shè)備上執(zhí)行Swift語(yǔ)句代碼。本文解釋了如何在你的安卓手機(jī)上運(yùn)行一個(gè)簡(jiǎn)單的“hello,world”程序。
常見(jiàn)問(wèn)題解答
讓我們來(lái)回答如下經(jīng)常被問(wèn)及的問(wèn)題吧:
這是否以為著我能夠用Swift快速的開發(fā)安卓應(yīng)用?
做夢(mèng),雖然Swift編譯器可以勝任在安卓設(shè)備上編譯Swift代碼并運(yùn)行。這需要的不僅僅是用Swift標(biāo)準(zhǔn)庫(kù)編寫一個(gè)APP,更多的是你需要一些框架來(lái)搭建你的應(yīng)用用戶界面,以上這些Swift標(biāo)準(zhǔn)庫(kù)不能提供。
另一方面,一個(gè)理論上可以從Swift調(diào)用Java應(yīng)用程序接口,但是不同于Objective-C,Swift編譯器對(duì)Swift-to-Java橋接毫無(wú)作用。
預(yù)備知識(shí)
為了能順利使用這份向?qū)?,你需要?/p>
1. 可以編譯Swift源碼的Linux環(huán)境。stdlib目前只能在Linux環(huán)境下編譯成安卓可用版本。在嘗試為安卓構(gòu)建之前,確保你能夠參考Swift項(xiàng)目的README為L(zhǎng)inux做編譯。
2. 安卓NDK,高于或等于21版本,在以下鏈接提供下載:
http://developer.android.com/ndk/downloads/index.html.
3. 一臺(tái)可以遠(yuǎn)程調(diào)試的安卓設(shè)備。我們需要通過(guò)遠(yuǎn)程調(diào)試來(lái)講stdlib結(jié)果部署到安卓設(shè)備上。你可以按以下官方向?qū)?lái)遠(yuǎn)程調(diào)試:https://developer.chrome.com/devtools/docs/remote-debugging.
安卓上的”Hello, world" 1. 構(gòu)建Swift Android stdlib 依賴
你可能注意到了,為了構(gòu)建Linux下的Swift stdlib,你需要apt-get install libicu-dev icu-devtools。 簡(jiǎn)單來(lái)說(shuō),構(gòu)建在安卓設(shè)備上使用的Swift stdlib需要libiconv和libicu。然而,你需要這些庫(kù)的安卓設(shè)備版本。
為安卓設(shè)備構(gòu)建libiconv和libicu:
1. 確定你安裝了 curl, antoconf, antomake, libtook 和git。
2. 克隆SwiftAndroid/libiconv-libicu-android項(xiàng)目。通過(guò)命令行執(zhí)行以下命令:git clone git@github.com:SwiftAndroid/libiconv-libicu-android.git。
3. 在命令行執(zhí)行 which ndk-build。確定在你下載的安卓NDK里ndk-build能顯示可執(zhí)行路徑。如果不能顯示,你需要將安卓NDK的目錄加到你的PATH里。
4. 在命令行輸入libiconv-libicu-android 目錄,然后執(zhí)行 build.sh。
5. 確定構(gòu)建腳本在你的libiconv-libicu-android目錄構(gòu)建了 armeabi-v7a/icu/source/i18n和armeabi-v7a/icu/source/common目錄。
2. 構(gòu)建安卓使用的Switf stdlib
輸入你的Swift目錄,然后運(yùn)行構(gòu)建腳本,將路徑傳遞給安卓NDK和libicu/libiconv目錄:
創(chuàng)建一個(gè)簡(jiǎn)單的Swift文件,命名為 hello.swift:
使用步驟2中構(gòu)建好的Swift編譯器來(lái)編譯Swift源碼,目標(biāo)設(shè)定為安卓:
$build/Ninja/ReleaseAssert/swift-linux-x86_64/swiftc\#TheSwiftcompilerbuiltinthepreviousstep.-targetarmv7-none-linux-androideabi\#Targetingandroid-armv7.-sdk~/android-ndk-r10e/platforms/android-21/arch-arm\#UsethesameNDKpathandversionasyouusedtobuildthestdlibinthepreviousstep.-L~/android-ndk-r10e/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a\#LinktheAndroidNDK'slibc++andlibgcc.-L~/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8\hello.swift[/code]這樣應(yīng)該會(huì)在你執(zhí)行命令的目錄下生成一個(gè)hello可執(zhí)行文件。如果你試圖在你的Linux環(huán)境下執(zhí)行這個(gè)可執(zhí)行文件,你會(huì)看到如下錯(cuò)誤:
這正是我們想要的錯(cuò)誤:因?yàn)檫@是為執(zhí)行在安卓設(shè)備上構(gòu)建的可執(zhí)行文件--它不應(yīng)該能在Linux上執(zhí)行。下一步,讓我們將它部署到安卓設(shè)備上來(lái)執(zhí)行它。
4. 將構(gòu)建好的產(chǎn)品部署到設(shè)備你可以使用adb push 命令來(lái)將構(gòu)建好的產(chǎn)品從Linux環(huán)境拷貝到安卓設(shè)備。當(dāng)你執(zhí)行adb devices命令前確定你的設(shè)備連接好并且可以被列出,然后執(zhí)行以下命令來(lái)拷貝Swift Android stdlib:
$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftCore.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftGlibc.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftOnoneSupport.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftRemoteMirror.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftExperimental.so/data/local/tmp[/code]另外,你也需要拷貝安卓NDK的libc++:
最后,你需要拷貝你前一步構(gòu)建好的hello可執(zhí)行文件:
$adbpushhello/data/local/tmp[/code] 5. 在安卓設(shè)備上執(zhí)行“Hello, World"你可以在安卓設(shè)備上使用 adb shell 命令來(lái)執(zhí)行hello可執(zhí)行文件:
$adbshellLD_LIBRARY_PATH=/data/local/tmphello[/code]你可以看到以下輸出:
祝賀你!你剛剛在安卓上運(yùn)行了你的第一個(gè)Swift程序。
- Android實(shí)現(xiàn)系統(tǒng)語(yǔ)言切換功能
- 深入剖析Android中init進(jìn)程實(shí)現(xiàn)的C語(yǔ)言源碼
- Android鍵盤輸入語(yǔ)言設(shè)置默認(rèn)打開myanmar緬甸語(yǔ)的步驟
- 為Android添加一門新語(yǔ)言的解決辦法
- android 支持的語(yǔ)言列表(匯總)
- Android筆記之:深入為從右向左語(yǔ)言定義復(fù)雜字串的詳解
- Android各國(guó)語(yǔ)言縮寫及簡(jiǎn)稱詳細(xì)介紹
- php簡(jiǎn)單實(shí)現(xiàn)多語(yǔ)言切換的方法
- 多種語(yǔ)言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的網(wǎng)頁(yè)編碼切換解決方案歸納
- Android實(shí)現(xiàn)app應(yīng)用多語(yǔ)言切換功能
相關(guān)文章
Android開發(fā)可添加頭尾的RecycleView的實(shí)現(xiàn)
這篇文章主要為大家介紹了Android開發(fā)可添加頭尾的RecycleView的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android編程實(shí)現(xiàn)的超炫圖片瀏覽器
這篇文章主要介紹了Android編程實(shí)現(xiàn)的超炫圖片瀏覽器,涉及Android針對(duì)圖片的查看與顯示方法,包含對(duì)圖片的各種常見(jiàn)操作技巧,需要的朋友可以參考下2015-12-12
Android 手動(dòng)獲取判斷處理權(quán)限
本篇文章主要介紹了Android手動(dòng)獲取判斷處理權(quán)限的方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
DrawerLayout結(jié)合Tollbar實(shí)現(xiàn)菜單側(cè)滑效果
這篇文章主要為大家詳細(xì)介紹了DrawerLayout結(jié)合Tollbar實(shí)現(xiàn)菜單側(cè)滑效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android編程自定義AlertDialog樣式的方法詳解
這篇文章主要介紹了Android編程自定義AlertDialog樣式的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android自定義AlertDialog樣式的具體布局與功能實(shí)現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Android 中為什么要用Fragment.setArguments(Bundle bundle)來(lái)傳遞參數(shù)
這篇文章主要介紹了Android 中為什么要用Fragment.setArguments(Bundle bundle)來(lái)傳遞參數(shù),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01
Android編程單選項(xiàng)框RadioGroup綜合應(yīng)用示例
這篇文章主要介紹了Android編程單選項(xiàng)框RadioGroup用法,結(jié)合實(shí)例形式分析了Android單選按鈕組RadioGroup的定義與具體使用技巧,需要的朋友可以參考下2016-10-10
android UI進(jìn)階之a(chǎn)ndroid中隱藏的layout 抽屜的使用方法
android UI進(jìn)階之a(chǎn)ndroid中隱藏的layout 抽屜的使用方法,需要的朋友可以參考一下2013-05-05
Android中創(chuàng)建類似Instagram的漸變背景效果
這篇文章主要介紹了Android中創(chuàng)建類似Instagram的漸變背景效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-12-12

