报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

使用 Swift 为 Android 构建代码

  • 2016-04-26
  • 本文字数:1879 字

    阅读完需:约 6 分钟

一个名为“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 代码。

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


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-26 19:004943

评论

发布
暂无评论
发现更多内容

真香现场!全网首发Spring5秘籍手册+知识导图,记得把每一次面试当做经验积累

Java 程序员 后端

瞬间霸榜,收藏第一的“kafka学习笔记,java图片转视频

Java 程序员 后端

碎片化时间学这些架构知识,月薪20K还不是轻轻松松,教你解决线上频出MySQL死锁问题

Java 程序员 后端

硬核!逛了5年的Github一口气把我收藏的JAVA开源项目分享给你

Java 程序员 后端

架构实战营模块2课后作业

断水风春

架构实战营

知乎万赞:Java程序员的悲哀竟然是,java编程思想百度云

Java 程序员 后端

知乎头条。纯干货:深度认识Sharding-JDBC,mybatis连接数据库原理

Java 程序员 后端

架构实战营- 模块二

瓜子葫芦侠

「架构实战营」

linux中同时移动多种格式文件

入门小站

Linux

硬核图解!断网了,还能ping通 127,高性能mysql笔记

Java 程序员 后端

硬核!阿里内部这份《Java面试核心知识手册,面经解析

Java 程序员 后端

秒懂 Java 的三种代理模式,任小龙java笔记百度云

Java 程序员 后端

看这篇就够了!RabbitMQ如何防止数据丢失,详细讲解,linux教程课后答案孟庆昌

Java 程序员 后端

真666!阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记

Java 程序员 后端

确定要面试问我JVM吗?我打算聊一个小时的!(1),linux驱动架构

Java 程序员 后端

碎片化时间学这些架构知识,月薪20K还不是轻轻松松(1),美团高级java面试题

Java 程序员 后端

神操:凭借“阿里Java脑图,mysql数据库教学视频教程

Java 程序员 后端

直击阿里“远程面试”现场,linux驱动开发入门与实战

Java 程序员 后端

看完这篇文章,你对Redis持久化的迷惑就全解开了,超全面

Java 程序员 后端

看完这篇,别人的开源项目结构应该能看懂了,kafka入门与实践百度云

Java 程序员 后端

确定要面试问我JVM吗?我打算聊一个小时的!,目前最全的《Java面试题及解析》

Java 程序员 后端

秀儿!用SSM框架实现了支付宝的支付功能,神操作啊,大型分布式系统架构图

Java 程序员 后端

看完这篇,面试再也不怕被问 Webpack 热更新,java原理及插件

Java 程序员 后端

知乎:怎么评价程序员35岁了还在撸代码?,java实用教程第五版电子书答案

Java 程序员 后端

硬肝到秃头!Alibaba强推并发编程笔记我跪了,真的学到好多东西

Java 程序员 后端

神操:凭借“阿里Java脑图(1),神操作

Java 程序员 后端

秋招必备!阿里产出的高并发+JVM套餐,mybatis总结

Java 程序员 后端

看一遍就理解:动态规划详解,双非渣本Java四年磨一剑

Java 程序员 后端

真香!前阿里P8甩我一份内部SpringCloud笔记手册,竟然在Github上点击破百万

Java 程序员 后端

硬核解析,巧用案例学习jQuery框架三种事件绑定方式,最新阿里+头条+腾讯大厂Java笔试真题

Java 程序员 后端

文本随机打乱工具

入门小站

工具

使用Swift为Android构建代码_移动_Sergio De Simone_InfoQ精选文章