菜单

原生功能

相关源文件

本文档全面概述了 AFFiNE 中的原生功能,重点关注使用 Rust 实现并与 JavaScript/TypeScript 接口的组件。这些原生模块负责处理性能关键型操作、平台特定功能以及仅靠 JavaScript 难以实现或无法实现 的底层系统访问。

有关特定 NBStore 实现的详细信息,请参阅 原生模块集成

架构概述

AFFiNE 使用 Rust 编写的原生模块来提供跨不同平台的性能关键型功能。这些模块通过 NAPI-RS 生成的绑定与 JavaScript/TypeScript 代码库集成。

来源

原生模块系统

AFFiNE 中的原生功能被组织成几个 Rust crate,这些 crate 被暴露给应用程序的不同部分。

来源

平台支持

原生模块为多个平台构建,并进行了有针对性的优化。

模块WindowsmacOSLinuxAndroidiOS
affine_nativex64, ARM64x64, ARM64x64, ARM64--
affine_server_nativex64, ARM64x64, ARM64x64, ARM64--
affine_mobile_native---ARM64进行中

来源

媒体捕获系统

其中一项核心原生功能是媒体捕获系统,该系统提供具有平台特定优化的音频和屏幕录制功能。

音频捕获管道

媒体捕获系统可以录制特定应用程序的音频,或合并多个音频源。

  1. 应用发现:原生代码识别具有音频输出的正在运行的应用程序。
  2. 音频捕获:为特定应用程序创建音频捕获。
  3. 缓冲区处理:使用优化算法处理音频缓冲区。
  4. 流管理:提供用于启动、停止和管理音频流的控件。

来源

NBStore(原生块存储)

NBStore 是一个原生存储系统,提供高效的文档管理功能。

NBStore 提供以下关键功能:

  1. 文档存储:高效存储和检索文档数据。
  2. 更新管理:跟踪和合并文档更新。
  3. Blob 处理:存储图像或附件等二进制数据。
  4. 同步支持:维护文档时钟以进行同步。

来源

与 JavaScript 集成

原生模块通过 NAPI-RS 生成的绑定与 JavaScript 集成,该工具为 Rust 代码创建了习惯性的 JavaScript 接口。

平台检测和加载

原生模块使用复杂的加载机制来检测当前平台并加载适当的原生二进制文件。

  1. 平台检测:识别操作系统(Windows、macOS、Linux、Android)。
  2. 架构检测:确定 CPU 架构(x64、ARM64 等)。
  3. 二进制加载:加载适合平台的预编译二进制文件。
  4. 回退机制:在无法加载原生代码时提供优雅的回退。

来源

移动端原生功能

移动平台有专门的原生实现。

Android 集成

对于 Android,原生代码集成使用了:

  1. Mozilla Rust Android Gradle 插件:有助于为 Android 构建 Rust 代码。
  2. UniFfi 绑定:为 Rust 功能生成 Kotlin 绑定。
  3. JNA 集成:提供对原生库的低级访问。

来源

服务器端原生功能

服务器还利用原生代码来处理性能关键型操作。

  1. 文档处理:高效处理文档转换。
  2. 文本处理:高级文本分析和操作。
  3. 性能优化:性能关键型算法的原生实现。

来源

构建系统和开发

原生代码模块使用复杂的构建系统来确保跨平台的兼容性。

  1. Rust 工具链管理:通过 rust-toolchain.toml 管理。
  2. NAPI-RS 构建过程:生成 JavaScript 绑定并构建原生二进制文件。
  3. 跨平台编译:配置用于在不同平台上构建。
  4. CI/CD 集成:用于构建原生二进制文件的 GitHub Actions 工作流。

来源

通用工具

名为 affine_common 的包提供了多个原生模块使用的共享实用程序。

  1. 文档处理:用于解析和处理各种文档格式的函数。
  2. 文本分析:用于分析和处理文本内容的工具。
  3. 文件格式处理:支持各种文件格式和转换。

来源

这些原生功能使得 AFFiNE 能够提供仅靠 JavaScript 难以实现的、高性能的功能,同时与其余的 JavaScript/TypeScript 代码库保持无缝集成。