写点什么

使用 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:005340

评论

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

OCR在转转游戏的应用

转转技术团队

后端

探讨丨SaaS软件是否正在“毁掉”数字化转型企业?

优秀

数字化转型

OneAccess | 面对庞大复杂的身份和权限管理,企业该怎么办?

爱尚科技

软件测试 | 掌握高频 Docker 命令,夯实内功基础

测试人

Docker 软件测试 自动化测试 测试开发 环境搭建

说透IO多路复用模型

C++后台开发

socket linux开发 epoll IO多路复用 C++开发

华为云低代码技术:让矿区管理“智变”,一览无遗

科技怪授

华为云数据融合集成平台ROMA Connect,推进企业数字化转型

科技怪授

和鲸科技入选2022中国企业数智化创新TOP50

ModelWhale

数字化转型 数智化 榜单

华为云CSE 关键特性,支持托管Nacos注册配置中心

与时俱进的时代

泰山众筹4.0合约系统开发技术

薇電13242772558

智能合约

Vertically Federated Graph Neural Network for Privacy-Preserving Node Classification

1+1=王

联邦学习 Fl 图神经网络 GNN 节点分类

数据存储安全责任重于泰山,看华为云对象存储服务OBS如何大展身手

IT科技苏辞

干货 | 如何进行CMDB数据运营?

嘉为蓝鲸

数据运营 CMDB 自动化运维 嘉为蓝鲸

“云-网-边-端”融合,汽车新势力的DevOps建设

嘉为蓝鲸

DevOps 自动化运维 嘉为蓝鲸

ModStart交给您的开源年终总结

ModStart

部门来了个JAVA开发,听说是00后,上来一顿操作给我看呆了...

程序知音

Java JAVA开发 java面试 java架构 后端技术

如何用Alluxio加速云上深度学习训练?

Alluxio

机器学习 分布式, Alluxio 大数据 开源 数据编排

“数字·进化”——2022数字化发展峰会圆满落幕

创业邦

开个脑洞,带你写一个自己的极狐GitLab CI Runner

极狐GitLab

DevOps 持续集成 CI/CD runner 极狐GitLab

数据存储的全能侠——华为云对象存储服务OBS

IT科技苏辞

图查询语言 nGQL 简明教程 vol.01 快速入门

NebulaGraph

图数据库

Web应用怎样获取Access Token?

HarmonyOS SDK

HMS Core

动态配置开发模式在转转的落地实践

转转技术团队

Java 后端 可视化 动态配置

数据存储服务的百宝箱——华为云对象存储服务OBS

IT科技苏辞

数据存储难?华为云对象存储OBS轻松解决

IT科技苏辞

零基础3Dmax入门教程

Finovy Cloud

软件 3DMAX

运维工作汇报那天,集团领导过来视察...

嘉为蓝鲸

自动化运维 嘉为蓝鲸

正式毕业!Apache Kyuubi 成为 Apache 基金会顶级项目!

网易数帆

大数据 spark 开源 Apache Kyuubi

融云获 51CTO 年终评选「中国 IT 行业政企数智办公优秀解决方案奖」

融云 RongCloud

IT 数智化 51cto

复杂并发场景下的并发调度模型在转转的演进之路

转转技术团队

Java 性能 后端 高并发

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