Swift也要抢Android饭碗?一个语言统御全世界

1,776 阅读10分钟

如果五年前你告诉一位移动开发者,Swift将正式支持Android,他们很可能会笑出猪叫,并冲你甩了一个“鄙夷”的表情。长期以来,苹果的整个生态系统都被视为一个精心打磨、运行流畅且严格专属的 “围墙花园”。

但快进到 2025 年年中,苹果的主力编程语言突然以一种重大方式实现跨平台。

一个新成立的Swift Android工作组正在努力将Android打造成Swift的官方支持目标平台。

请仔细体会这几个关键词:
SwiftAndroid官方原生

这是自 Flutter 和 Kotlin Multiplatform 成为头条新闻以来,移动开发领域最大的跨平台变革之一。

image.png

image.png

而且,这并非仅仅是 Swift 在 Android 上 “运行”—— 它关乎重新定义我们构建移动应用的方式、组建开发团队的架构,以及代码在不同平台间的共享机制。

下面我们逐一拆解。

为什么是现在?

这一变革源于开发者对维护两套分歧代码库的疲惫感与日俱增。两种语言(Swift 与 Kotlin)、两套架构、两拨独立的 Bug—— 简直一团乱麻。想象一下:只需用 Swift 编写一次应用核心逻辑,就能在 iOS 和 Android 上原生运行。这不仅是便利,更是生产力的革命。

Swift 自身也已足够成熟。自 2014 年为苹果平台诞生以来,它已全面开源并官方支持 Linux 和 Windows。如今,Swift 不仅驱动 iOS 应用,还支撑服务器后端、命令行工具,甚至 WebAssembly 实验。在此背景下,Android 成了最后一片未被征服的 “疆域”。而现在,通过社区驱动(而非企业强制)的努力,这片疆域正在被攻克。

核心要点

  1. 效率痛点:维护独立的 iOS/Android 代码库消耗巨大
  2. 语言优势:Swift 现代、高性能且天然跨平台
  3. 工程价值:统一代码可共享业务逻辑,减少重复开发
  4. 社区驱动:开源生态的协作模式让 Android 支持更具生命力,而非自上而下的强制推行

为何这条新闻的重要性远超想象

因为它挑战了我们此前认为移动开发中 “理所当然” 的一切:

  • 历史性转变:苹果向安卓敞开大门(即便间接敞开),这是前所未有的。世界不再是 “苹果专属” 的了。
  • 打破拉锯战:像 Flutter 和 KMP 这类跨平台框架,曾试图搭建起 iOS 与安卓之间的桥梁。而现在,编程语言本身成为了桥梁。开发团队无需再执着于 “选 Swift 还是选 Kotlin” 。
  • 更快、更省、更简洁:创业公司和独立开发团队可以 “一次开发,两处部署” 。网络通信、模型、数据格式化等代码都能共享,只有平台特定的 UI(Jetpack Compose 对应安卓,SwiftUI 对应 iOS )需要重新编写。
  • 全栈 Swift 愿景推进:Swift 早已能支撑服务端(比如借助 Vapor 框架 ),甚至能开发 WebAssembly 应用。随着对安卓的支持落地,“全栈 Swift”(后端 + iOS + 安卓 )的愿景离现实更近一步。
  • 语言胜过平台,成为主导力量:这传递出更深层的趋势:工程师会优先选择自己钟爱的工具,而非受限于厂商锁定。要是说 Flutter 实现了 UI 的跨平台编写,KMP 实现了逻辑的跨平台共享,那么 Swift 对安卓的支持,则实现了编程语言本身的跨平台突破。

Flutter 证明了 UI 可一次编写跨平台使用,KMP 证明了逻辑能跨平台共享,而 Swift 对安卓的支持,证明就连苹果的 “王牌” 编程语言,都能突破其诞生之初的生态边界实现演进。这传递出一个信号:移动开发的未来由编程语言和灵活性定义,而非企业生态的边界。

工作组具体在做什么?

这不是单个开发者的副业项目,而是在Swift.org上正式列出、有结构化组织且获社区支持的倡议行动。Swift 安卓工作组聚焦于以下工作:

  • 将安卓纳入官方 Swift 工具链。
  • 针对安卓,优化 Foundation 框架、Dispatch 库以及 Swift 并发模型。
  • 明确支持的安卓 API 级别和架构。
  • 提供持续集成(CI )工具、Docker 镜像以及 Gradle 支持。
  • 梳理 Java 原生接口(JNI )交互的最佳实践并形成文档。
  • 强化调试支持(比如安卓上的 LLDB 调试 )。
  • 制作入门文档和示例项目。

其使命不是 “凑合着把功能拼凑出来”,而是让安卓成为能与 Swift 原生适配的一流平台。

对开发者而言有哪些变化?

以下是这一进展为实际开发团队带来的新可能:

  • 用 Swift 编写核心逻辑,在安卓和 iOS 两端共享。
  • 借助 Swift 包管理器(SPM )构建共享模块。
  • 针对安卓用 Jetpack Compose、针对 iOS 用 SwiftUI,开发平台特定 UI。
  • 避免模型、解析器、业务规则等代码重复编写。
  • 利用共享的 XCTest 逻辑,提升跨平台测试覆盖率。

简而言之,开发团队可围绕共享层(逻辑、网络通信、业务领域等 )进行组织架构调整,同时针对不同平台定制 UI 。

实现 Swift 与安卓的桥接:终于成为可能

这之所以可行,要归功于 Java 原生接口(JNI)。像 Skip、Readdle 的 Gradle 插件以及开源的 SwiftJava 项目这类工具,让以下操作成为可能:

  • 从 Swift 直接调用安卓应用程序接口(APIs)。

  • 使用swift build为安卓编译 Swift 包。

  • 通过 Gradle 将 Swift 逻辑导入安卓工作室(Android Studio)。

  • 借助 Swift 包管理器(SPM)在不同平台间共享 Swift 模块。

  • 根据需要混合使用 Swift 和 Kotlin 模块。

JNI 桥接代码负责处理桥接工作,而且部分工具可自动完成这种配置。

你不必局限于 “只用 Swift”,在合理的情况下,你可以混合搭配(不同语言和技术)。

目前效果如何?

以下是如今已能实现的情况:

  • 构建与编译:像 Skip 这类工具,能让你为安卓 ARM 和 x86 目标设备编译 Swift 代码。
  • 应用运行:用 Swift 编写的 “Hello World” 应用和逻辑模块,确实能在模拟器和真实安卓设备上运行。
  • XCTest 支持:Swift 单元测试(包括苹果的 Swift 算法测试套件)已在安卓设备上成功运行。
  • Gradle 支持:Readdle 的开源插件能让安卓工作室集成 Swift 库。
  • 共享模块:为 iOS 编写的 Swift 包,现在也能为安卓编译,其中包括可复用的业务逻辑。
  • 持续集成(CI)与 Docker 工具:社区成员已发布 GitHub Actions 和 Docker 配置,以简化交叉编译流程。

它完美吗?并不。但它真实可用吗?是的 —— 而且即便在当前这个早期阶段,它的能力也令人意外地强大。

哪些人已在使用?

尽管还处于早期阶段,但我们已看到以下群体在采用:

  • 探索更精简跨平台解决方案的独立开发者。

  • 以 iOS 开发为主的初创公司,拓展到安卓平台时无需用 Kotlin 重写逻辑。

  • 为客户应用构建共享 Swift 软件开发工具包(SDKs)的代理公司。

  • 开发插件、SDK 和文档原型的开源贡献者。

  • 开发 Vapor/Swift 服务端的团队,在安卓上复用他们的 Swift 模型和逻辑。

它目前还不是主流 —— 但正在从 “我们能不能做” 转向 “我们能做到什么程度”。

未来面临的真正挑战

有一些实际存在的限制,你需要了解:

  • SwiftUI 在安卓上不可用 —— 目前只能共享逻辑。

  • 工具尚不成熟 —— 目前还没有官方的安卓工作室集成。

  • 调试靠手动操作 —— 需要用到 Docker、LLDB 和终端操作。

  • 二进制文件体积大 ——Swift 的运行时会让安卓安装包(APKs)增加数十兆字节。

  • JNI 桥接如果手动管理,会很棘手且代码冗长。

  • 文档很简略 —— 你得经常查看 GitHub 的问题列表和论坛帖子。

  • 学习曲线陡峭 —— 安卓开发者必须学习 Swift,反之亦然。

但要记住:Flutter、React Native 和 Kotlin 多平台(Kotlin Multiplatform)最初也都很粗糙。现在 Swift 也有了成长的机会,而且在社区的助力下,它会不断发展。

这对开发者意味着什么

这种转变不只是技术层面的 —— 还涉及理念层面。

  • 编写一次代码,在多处运行(配合合适的用户界面)。
  • 选择你想用的语言 —— 而非受平台归属束缚。
  • 复用模型、逻辑、测试和库。
  • 赋予小团队和初创公司更大能力。
  • 专注打造出色的产品,而非重复编写代码。

未来,移动开发可能会从 “以平台为先” 转变为 “以语言为先”,而 Swift 正在引领这场变革。

开发者们的反应如何

前期反响十分热烈:

image.png

  • 开发者们正在 GitHub 上分享 Swift Android 的演示项目。
  • 论坛帖子里满是实验报告、工具链更新和测试结果。
  • 在安卓上运行 XCTest 让许多人感到惊讶 —— 这表明这项工作已经取得了很大进展。
  • 像 “我以为这是个梗” 和 “这可能会取代我们的 KMP” 这样的评论频频出现。

势头正在形成,而且这是从社区自下而上推动的。

想亲自尝试吗?

以下是入门指南:

  1. 访问 Swift Android 工作组官网
  2. 使用 Skip 工具链 构建安卓版本
  3. 通过 swift package init 命令创建 Swift 包
  4. 使用跨平台编译目标为安卓编译代码
  5. 借助 SwiftJava 或 Skip 工具添加 JNI 桥接
  6. 通过 ADB 推送 XCTest 二进制文件并在设备上运行
  7. 加入 Swift 论坛 和 Slack 社区提问或贡献代码

虽然尚处早期阶段,但如果你是乐于探索的开发者,这无疑是一片蓝海。

未来可能是什么样子

让我们畅想一下:

  • 适用于安卓的 SwiftUI:一个可在两个平台上运行的声明式 UI 框架。

  • 一键式 Swift 模块:能够原生构建和捆绑适用于安卓的 Swift 工具。

  • 官方工具链Swift.org分发适用于安卓的二进制文件和 SDK。

  • 技术栈统一的团队:所有开发者都使用 Swift 编写后端、iOS 和安卓应用。

  • 快速入门:新开发者学习一种语言,即可在所有平台上发布应用。

虽然现在还为时尚早,但这一切正在成为现实。几年后,我们可能会回顾过去,说:“还记得 Swift 只用于 iOS 的时候吗?”


最终思考

Swift 在 Android 上的应用不仅是一项技术实验,更是我们对移动开发认知的一次范式转变。

它关乎效率与灵活性,关乎打破技术孤岛;它意味着让编程语言而非厂商生态主导开发模式;最重要的是,它关乎开发者的选择权。

如果你厌倦了维护两个独立的开发世界,厌倦了重复编写业务逻辑,或者只是对未来技术好奇 —— 现在正是探索的最佳时机。

不妨尝试在 Android 上使用 Swift,持续关注技术动态,参与社区讨论。

因为当下发生的一切,可能正在重新定义我们构建未来应用的方式。

如果本文对你有所启发,别忘了关注、分享,并在评论区留下你的想法 —— 让我们共同塑造移动开发的未来。