C 开发参考
Skip 支持从跨平台 Swift 代码中调用 C 和 C++ 代码,具体机制取决于你使用的 Skip 模式。
Skip Fuse(原生模式)
Section titled “Skip Fuse(原生模式)”在 Fuse 模式下,Swift 会被原生编译到 Android,因此 Swift 内建的 C/C++ 互操作能力与 iOS 上完全相同。你可以用 Swift 的 import 导入 C 模块、直接调用 C 函数,以及操作 C 指针和结构体,无需任何桥接层。
这意味着,除了在 iOS 上本来就需要做的工作外,你无需额外处理,就能在两个平台上使用 C 库(如 SQLite、libxml2 或自己的原生代码)。Swift Android SDK ↗ 包含 Android NDK,因此常用系统库可直接使用。
如需查看 Fuse 项目中 C 互操作的示例,请参考 skipapp-travelposters-native ↗。
Skip Lite(转译模式)
Section titled “Skip Lite(转译模式)”在 Lite 模式下,Swift 会被转译为 Kotlin,所以无法使用 Swift 原生 C 互操作。作为替代,Skip 提供 skip-ffi 模块,它通过 JNA(Java Native Access) ↗从转译后的 Kotlin 代码中调用 C 函数。
使用 skip-ffi 时,你可以在 Swift 中编写 C 函数声明,Skip 会在 Android 上将它们转译为 JNA 调用。由此,只需一套 Swift 代码库,就能在两个平台之间共享 C 库代码。
如需详细教程,请参阅博客文章在 iPhone 和 Android 应用中的 Swift 与 Kotlin 之间共享 C 代码。
如果项目高度依赖 C 或 C++ 库,Fuse 模式通常更简单,因为 Swift 的原生互操作在两个平台上的工作方式完全相同。如果出于其他原因使用 Lite 模式(例如为了最大化 Kotlin 互操作性),skip-ffi 则通过 JNA 提供了稳定的 C 库桥接。