准备工作

需要装三个东西,三个都要装,版本还得对上,不然会报错:

• 主机工具链:编译代码用的 swift 命令

• Swift SDK for Android:让 Swift 跑在 Android 上的库

• Android NDK:安卓原生开发工具包

装主机工具链

你电脑可能已经有 Swift 了,比如 Xcode 自带的那个。但交叉编译要求版本必须匹配,所以还得重新装个特定版本。用 swiftly 最方便,操作命令如下:

$ swiftly install main-snapshot-2025-10-16
Installing Swift main-snapshot-2025-10-16
Installing package in user home directory...
main-snapshot-2025-10-16 installed successfully!

$ swiftly use main-snapshot-2025-10-16
The global default toolchain has been set to `main-snapshot-2025-10-16` (was 6.2.0)

$ swiftly run swift --version
Apple Swift version 6.3-dev (LLVM 0d0246569621d5b, Swift 199240b3fe97eda)
Target: arm64-apple-macosx15.0

swiftly 能管理多个 Swift 版本,切换也方便。

装 Swift SDK for Android

用内置的 swift sdk 命令,操作如下:

$ swift sdk install https://download.swift.org/development/android-sdk/swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a/swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a_android-0.1.artifactbundle.tar.gz --checksum 451844c232cf1fa02c52431084ed3dc27a42d103635c6fa71bae8d66adba2500
Swift SDK bundle at `https://download.swift.org/development/android-sdk/swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a/swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a_android-0.1.artifactbundle.tar.gz` successfully installed as swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a-android-0.1.artifactbundle.

装完用 swift sdk list 查看,命令和结果如下:

$ swiftly run swift sdk list
swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a-android-0.1

看到这个结果就说明装好了。

配置 Android NDK

Android NDK 提供编译到 Android 架构的头文件和工具。Swift SDK for Android 依赖 NDK 27d,直接下载就行,操作命令如下:

$ mkdir ~/android-ndk
$ cd ~/android-ndk
$ curl -fSLO https://dl.google.com/android/repository/android-ndk-r27d-$(uname -s).zip
$ unzip -q android-ndk-r27d-*.zip
$ export ANDROID_NDK_HOME=$PWD/android-ndk-r27d

下载完还得关联到 Swift SDK,命令如下:

$ cd ~/Library/org.swift.swiftpm || cd ~/.swiftpm
$ ./swift-sdks/swift-DEVELOPMENT-SNAPSHOT-2025-10-16-a-android-0.1.artifactbundle/swift-android/scripts/setup-android-sdk.sh
setup-android-sdk.sh: success: ndk-sysroot linked to Android NDK at android-ndk-r27d/toolchains/llvm/prebuilt

看到 success 就说明配置好了,如果之前装过 NDK,设置 ANDROID_NDK_HOME 环境变量指向那个位置,再运行脚本就行。

到这里工具链就配好了。

Hello World

试试 Hello World,步骤如下:

1、建个目录:

$ cd /tmp
$ mkdir hello
$ cd hello

2、生成一个新包:

$ swiftly run swift package init --type executable

3、先在本地试试:

$ swiftly run swift build
Building for debugging...
[8/8] Applying hello
Build complete! (15.29s)

$ .build/debug/hello
Hello, world!

没问题就可以编译到 Android 了。

编译到 Android

--swift-sdk 指定目标平台,具体操作如下:

编译到 x86_64(模拟器)

$ swiftly run swift build --swift-sdk x86_64-unknown-linux-android28 --static-swift-stdlib
Building for debugging...
[8/8] Linking hello
Build complete! (2.04s)

$ file .build/x86_64-unknown-linux-android28/debug/hello
.build/x86_64-unknown-linux-android28/debug/hello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, with debug_info, not stripped

编译到 aarch64(真机)

$ swiftly run swift build --swift-sdk aarch64-unknown-linux-android28 --static-swift-stdlib
Building for debugging...
[8/8] Linking hello
Build complete! (2.04s)

$ file .build/aarch64-unknown-linux-android28/debug/hello
.build/aarch64-unknown-linux-android28/debug/hello: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, with debug_info, not stripped

--static-swift-stdlib 把 Swift 标准库静态链接进去,方便部署。

在设备上运行

编译完得推到设备上,步骤如下:

1、连上 Android 设备或启动模拟器,用 adb 推文件:

$ adb push .build/aarch64-unknown-linux-android28/debug/hello /data/local/tmp
.build/aarch64-unknown-linux-android28/debug/hello: 1 file pushed, 0 skipped. 155.9 MB/s (69559568 bytes in 0.425s)

2、还得推一个依赖库:

$ adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so /data/local/tmp
aarch64-linux-android/libc++_shared.so: 1 file pushed, 0 skipped. 145.7 MB/s (1794776 bytes in 0.012s)

3、运行:

$ adb shell /data/local/tmp/hello
Hello, world!

看到这个输出就成功了。

注意事项

版本要对应

主机工具链和 Swift SDK 版本必须匹配。用 swiftly 管理版本能保证不出错。

路径别设错

ANDROID_NDK_HOME 环境变量很重要,脚本靠它找 NDK。建议加到 .zshrc.bashrc,省得每次设。

打开 USB 调试

真机测试记得打开 USB 调试。模拟器直接用就行。

这只是个命令行程序,真正的 Android App 不是这样发布的。实际应用要打包成 .apk,把 Swift 编译成 .so 库,通过 JNI 让 Java/Kotlin 调用。

官方的 swift-android-examples 仓库有完整示例,可以去看看。

配置确实有点繁琐,要装好几个工具,版本还得对上,不然容易出错。不过配好之后编译速度还行,没想象中那么慢。

主要适合已经有 iOS 项目的团队,想复用业务逻辑。从零开始写 Android 的话,Kotlin 更合适。