cargo-ohos-app
cargo-ohos-app 是一个 Cargo 外部子命令,用来把 Rust library 项目包装成 OHOS Stage Model 工程,并串联 OHOS 打包流程。
能力
cargo ohos-app initcargo ohos-app buildcargo ohos-app package
package 默认产出 .hap,可通过 --artifact app 切换为 .app。
也支持通过 --target arm64-v8a|armeabi-v7a|x86_64|loongarch64 切换目标架构;例如模拟器可用 --target x86_64。
Rust 侧约定
首版采用 ArkUI 壳 + Rust 原生库 + C ABI 路线。Rust 项目需要:
- 有
libtarget - 导出以下符号
打包时工具会把 Rust 库按 staticlib 方式编进 libentry.so,避免运行时再去解析额外的 Rust .so。如果你希望本地也直接生成静态库,推荐:
[]
= ["cdylib", "staticlib"]
pub extern "C" ;
pub extern "C" ;
如果项目依赖 tgui-winit-ohos,cargo-ohos-app 现在会自动切换到 XComponent 壳模板。
这时不需要再手写 NativeXComponent -> Rust 桥接代码,只需要在 Rust 侧导出标准运行时入口:
use ApplicationHandler;
use export_ohos_winit_app;
;
export_ohos_winit_app!;
生成的壳会自动把 surface、focus、visibility、frame、touch、mouse、key 回调转发到
tgui-winit-ohos 的运行时桥接层。
在 Rust 中打印 DevEco 日志
生成的 libentry.so 壳现在会导出一个原生日志桥:
int ;
你可以在 Rust 里直接声明它,然后把日志打到 OHOS hilog,在 DevEco Studio 的 Log 面板中查看:
use ;
const LOG_INFO: u32 = 4;
const LOG_DOMAIN: u32 = 0x3433;
unsafe extern "C"
level 对应 OHOS LogLevel:
3:DEBUG4:INFO5:WARN6:ERROR7:FATAL
完整可运行示例见 examples/counter-native/src/lib.rs。
快速开始
最小 C ABI 示例位于 examples/counter-native。
cd examples/counter-native
cargo run -- init
cargo run -- build
cargo run -- package
cargo run -- package --target x86_64
推荐的 tgui-winit-ohos 联调与打包示例位于 examples/winit-smoke,默认面向
x86_64-unknown-linux-ohos 模拟器目标:
cargo run -- package --manifest-path .\examples\winit-smoke\Cargo.toml
如果已经安装为 Cargo 子命令,也可以直接这样调用:
cargo install cargo-ohos-app
cargo ohos-app package --manifest-path .\examples\winit-smoke\Cargo.toml
如需覆盖默认目标,例如切到设备 ABI:
cargo ohos-app package --manifest-path .\examples\winit-smoke\Cargo.toml --target arm64-v8a
本地开发时也可以直接安装当前仓库:
cargo install --path .
配置
项目配置写在 Cargo.toml 的 package.metadata.ohos-app 中,支持 default、debug、release 三层:
[]
= "D:\\Apps\\code\\DevEco Studio"
= "D:\\Apps\\code\\DevEco Studio\\tools\\ohpm\\bin\\ohpm.bat"
= "C:\\Users\\your-user\\AppData\\Local\\OpenHarmony\\Sdk"
= "1.0.0"
= 1
= "Demo App"
= "assets/app-icon.png"
= "assets/start-icon.png"
= "com.example.demo"
= "entry"
= "arm64-v8a"
= "ohos-app"
[]
= "ohos-app-debug"
[]
= "ohos-app-release"
= "release"
支持字段:
deveco_studio_dirohpm_pathsdk_rootsdk_versionversion_nameversion_codeapp_nameapp_icon_pathstart_icon_pathbundle_namemodule_nametargetprofileoutput_dir
优先级为:CLI 参数 > 环境变量 > Cargo.toml metadata > 内置默认值。
其中以下三项没有内置默认值,缺失时会直接报错并停止执行:
deveco_studio_dirohpm_pathsdk_root