Skip to Content
核心概念Rust 核心架构

Rust 核心架构

为了保证Android和iOS之间的绝对对等并达到最高水平的性能,Tracelet的核心逻辑完全用Rust编写。这包括状态机、HTTP 同步引擎、SQLite 持久层和电池预算计算。


为什么生锈?

用 Rust 编写核心引擎解决了跨平台后台执行中的几个关键挑战:

  1. 零差异: 通过依赖单个共享代码库而不是单独的 Swift 和 Kotlin 实现,我们确保 iOS 和 Android 在所有条件下表现相同。如果错误被修复,那么所有地方都被修复了。
  2. 无畏并发: 后台同步引擎在繁重的多线程负载下完美运行。 Rust 严格的编译器保证数据竞争自由,避免在后台线程上同时记录和上传位置时出现并发错误。
  3. 性能和安全性: Rust 具有 C 级性能和接近于零的内存占用,使其非常适合电池受限的后台执行。它无需垃圾收集器即可保证内存安全,确保后台引擎不会因空指针或内存不足错误而崩溃。

工作原理:UniFFI 绑定

Tracelet 使用 Mozilla 的 UniFFI(通用外部函数接口)来弥合 Rust 和本机平台之间的差距。

  1. 定义: 我们在 Rust 中定义核心 API(例如,开始跟踪、同步数据或处理位置更新的方法)。
  2. 生成: UniFFI 自动解析 Rust 代码并为 iOS 生成安全、惯用的 Swift 绑定,为 Android 生成 Kotlin 绑定。
  3. 执行: 当 Flutter 插件调用原生 iOS/Android 代码时,原生代码会调用 UniFFI 生成的绑定,从而无缝执行底层 Rust 逻辑。

由于绑定是自动生成的,因此无需手动维护 JNI(Java 本机接口)或 Objective-C 桥接代码。它是完全类型安全的。


预编译的二进制文件(无需 Rust 工具链)

Rust 在移动开发中的一个常见痛点是迫使开发人员安装 Rust 工具链、配置交叉编译目标并忍受较长的构建时间。

Tracelet 通过分发预编译的二进制文件解决了这个问题。

当您将 tracelet 插件添加到 Flutter 项目中时,您不需要在计算机上安装 Rust。 Tracelet 的 CI/CD 管道会自动构建并发布每个版本的本机库。

安卓编译

  • Rust 代码被编译为适用于所有主要 Android 架构(arm64-v8aarmeabi-v7ax86x86_64)的本机共享库(.so)。
  • 这些库与生成的 Kotlin 绑定一起打包到 Android 存档 (.aar) 中。
  • 当您构建 Flutter 应用程序时,Gradle 会自动从 Tracelet 存储库下载预构建的 .aar

iOS编译

  • Rust 代码被编译成适用于 iOS 设备 (arm64) 和模拟器 (arm64x86_64) 的静态库 (.a)。
  • 这些库与生成的 Swift 绑定一起捆绑到 Apple XCFramework (TraceletCore.xcframework) 中。
  • 当您运行 pod install 时,CocoaPods(或 Swift Package Manager)会自动直接从标记的 GitHub 版本下载预编译的 TraceletCore.xcframework

这种预编译的发行版可确保您的 Flutter 构建保持闪电般的速度,并且您的 CI/CD 管道开箱即用,无需自定义 Rust 设置。