
适用于 Android 系统的 Swift SDK 最近以 nightly 构建版本发布,该 SDK 旨在帮助开发者将他们的 Swift 包移植到 Android 系统,使跨平台共享代码更加容易。
虽然仍处于预览阶段,但 Swift 包索引中已有超过 25% 的包可以编译用于 Android 系统。
从核心层面来看,适用于 Android 系统的 Swift SDK 包含一个为 Android 平台量身定制的 Swift 工具链(即编译器和运行在 Android 系统上的 Swift 标准库实现),以及一组能让 Swift 访问 Android API 的绑定。该 Swift 工具链借助 swift-java 项目实现 Java 与 Swift 的互操作性,能够创建共享对象,这些对象会被链接到 Android 安装包(.apk)存档中,并可通过 Java 本地接口(JNI)进行访问。
Android 版 Swift SDK 在用户界面(UI)方面采取中立的策略。其团队不会只专注于某一种 UI 框架,而是会支持现有的框架,特别是 Android 原生开发工具包(如 Jetpack Compose 和传统的基于 XML 的系统)、Flutter 的 UI 引擎,以及像 Skip 这样的第三方桥接解决方案。Swift Android 团队并未明确提及的另一种可行方法是,使用 OpenGL、Vulkan 或其他渲染引擎以 Swift 实现 UI,然后使用 NativeActivity 将其集成到 Android 应用中。
特别是 Skip 框架,它通过将 SwiftUI 与 Jetpack Compose 进行桥接,在 Android 系统上重新实现了 SwiftUI。这种方法让 iOS 开发者能用最少的精力,在同一个代码库中编写应用的业务逻辑和用户界面。
有一个名为 SwiftCrossUI 的开源替代方案,它能在 macOS、Linux、Windows 系统上提供类似于 SwiftUI 的用户界面 API,并且对 Android 也有一些初步支持。
虽然在 iOS 和 Android 应用中都使用 Swift 的前景听起来很诱人,但正如 andrekandre 在 Hacker News 上指出的,创建出色的跨平台应用不仅仅是工具链支持和原生工具包的问题:
之前就走过这条路,说实话,最大的问题在于开发者的用户体验(iOS 开发者不容易进行调试,与 Kotlin 存在模型不匹配的问题,比如无法从 Swift 捕获 Kotlin 异常),而且最终即便是 Kotlin 多平台也和用于 Android 开发的 Kotlin 不一样,所以在某种程度上,你仍然算是在引入第三种语言......
在苹果宣布在 Swift 项目中成立一个 Android 工作小组大约六个月后,适用于 Android 系统的 Swift 软件开发工具包(SDK)首次发布。该工作小组旨在确保 Swift 无需依赖非官方分支就能编译用于 Android 系统的代码,并增强 Swift 的标准库,使其能更好地与 Android API 兼容。
在适用于 Android 系统的 Swift SDK 发布之前,开发者可以使用第三方解决方案(如 Scade.io)将他们的 Swift 代码编译用于 Android 系统。Scade 基于 Swift4j,专注于非用户界面的应用程序逻辑。
对于希望将应用移植到 iOS 系统的 Android 开发者来说,一个更成熟的选择是使用 Kotlin 多平台与 Jetpack Compose 多平台技术,这对从事 Android 开发的开发者来说,会更加友好平滑。