使用 Swift 语言编写 Android 应用入门
swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的“hello,world”程序。
常见问题解答
让我们来回答如下经常被问及的问题吧:
这是否以为着我能够用swift快速的开发安卓应用?
做梦,虽然swift编译器可以胜任在安卓设备上编译swift代码并运行。这需要的不仅仅是用swift标准库编写一个app,更多的是你需要一些框架来搭建你的应用用户界面,以上这些swift标准库不能提供。
另一方面,一个理论上可以从swift调用java应用程序接口,但是不同于objective-c,swift编译器对swift-to-java桥接毫无作用。
预备知识
为了能顺利使用这份向导,你需要:
1. 可以编译swift源码的linux环境。stdlib目前只能在linux环境下编译成安卓可用版本。在尝试为安卓构建之前,确保你能够参考swift项目的readme为linux做编译。
2. 安卓ndk,高于或等于21版本,在以下链接提供下载:
.
3. 一台可以远程调试的安卓设备。我们需要通过远程调试来讲stdlib结果部署到安卓设备上。你可以按以下官方向导来远程调试:.
安卓上的”hello, world" 1. 构建swift android stdlib 依赖
你可能注意到了,为了构建linux下的swift stdlib,你需要apt-get install libicu-dev icu-devtools。 简单来说,构建在安卓设备上使用的swift stdlib需要libiconv和libicu。然而,你需要这些库的安卓设备版本。
为安卓设备构建libiconv和libicu:
1. 确定你安装了 curl, antoconf, antomake, libtook 和git。
2. 克隆swiftandroid/libiconv-libicu-android项目。通过命令行执行以下命令:git clone git@github.com:swiftandroid/libiconv-libicu-android.git。
3. 在命令行执行 which ndk-build。确定在你下载的安卓ndk里ndk-build能显示可执行路径。如果不能显示,你需要将安卓ndk的目录加到你的path里。
4. 在命令行输入libiconv-libicu-android 目录,然后执行 build.sh。
5. 确定构建脚本在你的libiconv-libicu-android目录构建了 armeabi-v7a/icu/source/i18n和armeabi-v7a/icu/source/common目录。
2. 构建安卓使用的switf stdlib
输入你的swift目录,然后运行构建脚本,将路径传递给安卓ndk和libicu/libiconv目录:
创建一个简单的swift文件,命名为 hello.swift:
使用步骤2中构建好的swift编译器来编译swift源码,目标设定为安卓:
$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]这样应该会在你执行命令的目录下生成一个hello可执行文件。如果你试图在你的linux环境下执行这个可执行文件,你会看到如下错误:
这正是我们想要的错误:因为这是为执行在安卓设备上构建的可执行文件--它不应该能在linux上执行。下一步,让我们将它部署到安卓设备上来执行它。
4. 将构建好的产品部署到设备你可以使用adb push 命令来将构建好的产品从linux环境拷贝到安卓设备。当你执行adb devices命令前确定你的设备连接好并且可以被列出,然后执行以下命令来拷贝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++:
最后,你需要拷贝你前一步构建好的hello可执行文件:
$adbpushhello/data/local/tmp[/code] 5. 在安卓设备上执行“hello, world"你可以在安卓设备上使用 adb shell 命令来执行hello可执行文件:
$adbshellld_library_path=/data/local/tmphello[/code]你可以看到以下输出:
祝贺你!你刚刚在安卓上运行了你的第一个swift程序。
上一篇: Java中List根据map的某个key去重的代码
下一篇: J2EE项目代码编写规范分享
推荐阅读
-
使用 Swift 语言编写 Android 应用入门
-
Android应用开发中使用Fragment的入门学习教程
-
Android应用开发中使用Fragment的入门学习教程
-
Android应用开发中RecyclerView组件使用入门教程
-
Android应用开发中Action bar编写的入门教程
-
使用python编写批量卸载手机中安装的android应用脚本
-
Android应用开发中Action bar编写的入门教程
-
Android应用开发中Action bar编写的入门教程
-
使用python编写批量卸载手机中安装的android应用脚本
-
使用python编写批量卸载手机中安装的android应用脚本