当我们想到 Swift 时,通常会想到 iPhone、iPad、Mac。基本上,任何带有闪亮 Apple 标志的产品。
但安卓?
那感觉有点......不对劲。
然而,一些有趣的事情正在发生:Swift------这门由苹果创建的语言------正在安卓上悄然使用。这不仅仅是实验,也不仅仅是业余项目。它通过 Swift.org 支持的一项正式工作,拥有适当的工具、文档和日益增长的社区支持。
那么,当你在安卓上运行 Swift 时,究竟会发生什么呢?
让我们清晰、实际地,并基于截至 2025 年正在进行的实际工作来分解一下。
Swift 在安卓上的核心要点
- Swift 可以在安卓上使用,但不是用于用户界面 (UI)。
- 它主要用于跨平台共享业务逻辑。
- 截至 2025 年 6 月,有一个官方的 Swift Android 工作组。
- 它使用 JNI将 Swift 代码桥接到安卓应用中。
- 你需要使用 CMake + Gradle 设置自定义工具链。
这不是要用 Swift 完全重写安卓开发 。但它确实是一种在 iOS 和安卓之间共享逻辑的合法方式,而且无需放弃你熟悉的语言。
背景:Swift Android 工作组 (2025)
2025 年 6 月,Swift.org 团队宣布成立一个新的正式工作组:
🔗 安卓工作组
他们的使命是?
"为了指导和支持 Swift 不断壮大的安卓用户社区,确保提供高质量、可持续的工具,以及出色的开发者体验。"
这不是一次实验。它是 Swift 旨在扩展到苹果平台之外的更广泛目标的一部分------就像他们的 WebAssembly 和 C++ 互操作工作组一样。
该工作组的重点是:
- 维护安卓工具链
- 改进 Swift 的核心库(例如 Foundation)以支持安卓
- 支持与安卓的 Gradle、NDK 和 JNI 集成
- 让编写共享 Swift 库并在安卓应用中使用变得更容易
那么......它到底是如何工作的呢?
假设你有一些 Swift 逻辑------比如你应用的认证层:
swift
public class AuthManager {
public static func hash(password: String) -> String {
return password.reversed() + "123" // 虚拟逻辑
}
}
以下是你如何在安卓上使用它:
1. 将 Swift 编译成安卓 .so
库
你需要使用 swift-android-toolchain 将 Swift 代码编译成一个共享的本地库(例如 libauth.so
)。
为此,你需要准备:
- Android NDK
- Swift 工具链 (目标是
aarch64-linux-android
) - CMake/Gradle 构建脚本
2. 使用 JNI 将 Swift 桥接到 Kotlin
在 Kotlin 中:
kotlin
external fun hash(password: String): String
init {
System.loadLibrary("auth")
}
现在你的 Kotlin 应用可以调用你的 Swift 逻辑了------就像调用原生的 C 代码一样。
虽然这有点粗糙,但确实可行。
你能做什么,不能做什么
✅ 你可以:
- 用 Swift 编写业务逻辑
- 构建静态或动态 Swift 库
- 使用 Foundation、Dispatch 和其他核心库(存在一些限制)
- 通过 JNI 从 Kotlin 调用 Swift
❌ 你不能:
- 用 Swift 编写 Android UI(不支持 SwiftUI 或 UIKit)
- 使用依赖于 Apple 专属框架(例如 AVKit)的 Swift 包
- 期望在 Android Studio 或 Xcode 中获得完整的 Swift 工具链支持
工具、文档和示例
以下是关键资源:
- 🔧 swift-android-toolchain: 由 Swift Android 工作组维护的官方工具链
- 📄 Android Workgroup Charter: 官方使命和职责章程
- 📦 Readdle Swift Android Sample: 一个使用 CMake 和 Swift 共享代码的实际工作示例
- 💬 Swift 论坛 --- Android 讨论区: 活跃的贡献者社区和最新动态
架构是怎样的?
以下是其工作原理的简化图:
csharp
[iOS]
Swift UI + Swift 逻辑
↑
共享 Swift 代码
↓
[Android]
Kotlin UI + JNI 桥接 → Swift .so 库
你用 Swift 编写一次代码(例如,模型、逻辑),然后将其桥接到两个平台,使用各自平台原生的 UI。
注意事项与陷阱
这不是即插即用的。你会遇到:
- 繁琐的 JNI 桥接
- 陡峭的工具链设置(除非你习惯了原生开发)
- 针对 Swift 崩溃的 Android 调试能力有限
- Android 目标尚不支持 Swift 包管理器 (SPM)
最大的问题是什么?你需要手动编写 CMake + Gradle 脚本。目前还没有图形用户界面工具。
跨平台 Swift UI 会出现吗?
目前还不会。
目前,没有迹象表明 SwiftUI 会被移植到安卓。Swift 安卓工作组只专注于非 UI 集成------即逻辑、库和系统支持。
但基础正在奠定。
如果社区的势头持续增长,未来可能有人会在原生安卓视图之上构建一个 类似 SwiftUI 的抽象层。就像 Flutter 一样,但使用 Swift。
现在预测还为时过早,但并非不可能。
总结:为什么要费这个劲?
你可能会问------如果 Kotlin 在安卓上是官方且原生的,为什么还要用 Swift?
这是个合理的问题。
而这是一个合理的答案:
如果你的团队主要使用 Swift 并且以 iOS 开发为主,那么在安卓上使用 Swift 能让你复用自身优势 ,避免逻辑重复,并加快开发速度。
这并非适用于所有团队。但对合适的团队来说,它能实现真正的跨平台开发,同时又不牺牲原生性能或 Swift 的易用性。
欢迎关注我的公众号:OpenFlutter,感谢。