歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用Swift為Android構建代碼

一個名為“Port to Android”的合並請求最近被合並進了官方Swift代碼倉庫的主分支,這使得用Swift開發簡單的Android程序變得有可能。該合並請求為Swift stdlib增加了安卓目標,其允許開發者使用Linux環境,跨平台地為基於ARMv7處理器的Android進行編譯。

Swift面向Android的端口主要是兩個開發者的貢獻:一個是Zhuowei Zhang,他在2015年末開始了此項目,另一個是Facebook的Brian Gesiak,他提交了此次PR,並解決了在最終被合並到主分支之前出現的所有反饋的問題。由於這次PR的規模很大(最初包含了54個文件的修改),整個流程從提交到合並花了差不多兩個月時間。

正如之前提到的,目前只有可能在Linux環境跨平台編譯Android。另外還需要最新版本的Android NDK,以及為Android開發的libiconv和libicu。這些依賴項都滿足之後,針對Android的Swift可以通過這樣的調用被構建:

$ utils/build-script \
  -R \                                           # Build in ReleaseAssert mode.
  -T \                                           # Run all tests.
  --android \                                    # Build for Android.
  --android-deploy-device-path /data/local/tmp \ # Temporary directory on the device where Android tests are run.
  --android-ndk ~/android-ndk-r10e \             # Path to an Android NDK.
  --android-ndk-version 21 \
  --android-icu-uc ~/libicu-android/armeabi-v7a/libicuuc.so \
  --android-icu-uc-include ~/libicu-android/armeabi-v7a/icu/source/common \
  --android-icu-i18n ~/libicu-android/armeabi-v7a/libicui18n.so \
  --android-icu-i18n-include
  ~/libicu-android/armeabi-v7a/icu/source/i18n/

一旦編譯器可用,它可以被用作創建Android可執行文件:

$ build/Ninja/ReleaseAssert/swift-linux-x86_64/swiftc \                   # The Swift compiler built in the previous step.
-target armv7-none-linux-androideabi \                                # Targeting android-armv7.
-sdk ~/android-ndk-r11c/platforms/android-21/arch-arm \               # Use the same NDK path and API version as you used to build the stdlib in the previous step.
-L ~/android-ndk-r11c/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a \  # Link the Android NDK's libc++ and libgcc.
-L ~/android-ndk-r11c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9 \
hello.swift

它可以和Swift stdlib以及Android NDK libc++一起被部署到真實的Android設備上,使用下面的adb push命令:

$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftCore.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftGlibc.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftOnoneSupport.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftRemoteMirror.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftExperimental.so /data/local/tmp

$ adb push ~/android-ndk-r11c/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so /data/local/tmp

$ adb push hello /data/local/tmp

最後,該程序可以使用adb shell命令執行。

因為目前此端口只包含Swift stdlib,還需要做很多工作才能讓Swift有效地被用作創建完整的安卓應用,比方說提供圖形化用戶界面的應用。它可以用兩種方式來完成,要麼用某些可以運行在Android上的Swift UI框架,或者通過和Android的Java框架交互。然而,要注意的是,Swift編譯器目前並沒有包含任何條款,能夠讓Swift像和Objective C代碼互通一樣,和Java代碼更簡單地互通。

另一個在真實Android應用中使用Swift代碼的可能是,使用JNI/NDK通過Java調用Swift代碼。Zhang還提供了一個原型應用示例來展示如何在JNI之上從Android Java應用訪問Swift代碼。

Ubuntu 15.10安裝部署Swift開發環境  http://www.linuxidc.com/Linux/2016-01/126995.htm 

Swift 的變化:從 2.2 到 3.0 會帶來什麼  http://www.linuxidc.com/Linux/2015-12/126440.htm 

Swift 正式開源,同時開源 Swfit 核心庫和包管理器 http://www.linuxidc.com/Linux/2015-12/125847.htm 

Apple Swift學習教程  http://www.linuxidc.com/Linux/2014-09/106420.htm 

使用 Swift 構建一個 iOS 的郵件應用 http://www.linuxidc.com/Linux/2014-08/105542.htm 

Swift 2.0開源化  http://www.linuxidc.com/Linux/2015-06/118594.htm 

Linux下搭建Swift語言開發學習環境 http://www.linuxidc.com/Linux/2015-12/125983.htm 

Swift 的詳細介紹:請點這裡 

查看英文原文:Using Swift to Build Code for Android

Copyright © Linux教程網 All Rights Reserved