架構對比
arkffi 的優勢場景
1. 調用外部預構建的 .so 庫
arkffi 最核心的優勢:不需要編譯,不需要源碼。當你有一個由第三方提供的、獨立編譯的 .so(比如閉源 SDK、NDK 編譯的算法庫、CLion 工程產物),arkffi 可以直接在運行時加載並調用其函數:
2. 快速原型開發
arkffi 僅需ohpm install arkffi,無需修改 CMakeLists.txt、無需寫 C++、無需理解 NAPI。從安裝到調用第一個 C 函數只需幾分鐘。
3. bun:ffi 遷移或交叉開發
如果團隊熟悉 bun:ffi 的dlopen(path, { funcName: { args, returns } }) 聲明式風格,arkffi 提供完全相同的 API 模式,學習成本爲零。
4. 動態庫熱加載場景
通過ffi.load / ffi.close 可在運行時反覆加載和卸載 .so,適用於插件系統或動態模塊場景。
5. 混合類型參數的靈活調用
arkffi 的類型編碼系統('i'、'd'、's' 等)支持任意混合簽名的一次性調用,無需爲每種簽名單獨寫 C++ 包裝:
AKI 的優勢場景
- 需要綁定 C++ 類/結構體:AKI 通過
JSBIND_CLASS、JSBIND_METHOD可將 C++ 類完整暴露給 ArkTS。 - 需要複雜異步操作:AKI 內置
TaskRunner和AsyncWorker。 - 兼容 API 9~11 舊版本:arkffi 需要 API 12+。
- 團隊熟悉 C++ 宏模式:AKI 的編譯時綁定方式在大型 C++ 項目中更可控。