应用开发

PXA DEVELOPER GUIDE

生命周期、界面与服务

理解 Guest 入口、UI 事务、资源与服务声明的实际开发方式。

中文指南 · 3 分钟阅读 · 开发版

应用入口

官方 Hello 示例提供三个 Guest 入口。以下展示其职责,完整可编译实现请使用上一章复制的示例:

int32_t pxa_app_start(const uint8_t *config, uint32_t config_length);
int32_t pxa_app_on_event(const uint8_t *event, uint32_t length);
void pxa_app_stop(uint32_t reason);

start 初始化状态、读取启动配置并创建界面;on_event 解析输入与系统事件;stop 释放应用资源。事件先经过 pxa_parse_event(),只处理已识别的事件,未处理事件返回 PXA_EVENT_UNHANDLED。

构建一个界面

Hello 使用 pxa_ui_transaction_t 把一组 UI 操作作为事务提交:

  1. pxa_ui_transaction_begin() 开始新 generation 的事务。
  2. pxa_ui_create() 创建根容器和文本节点。
  3. 设置布局、padding、主题颜色与字体角色。
  4. 用 pxa_ui_set_text() 写入本地化文本。
  5. pxa_ui_transaction_commit() 提交;失败时取消仍活动的事务。

Guest 使用 SDK 语义接口;LVGL 对象留在 Host renderer 内。需要高频自绘时再考虑 Canvas / Surface 服务,并按接口管理帧缓冲所有权。

本地化与屏幕适配

保留 i18n/,用 pxa_i18n_init_from_start_config() 读取启动语言,用 pxa_i18n_handle_event() 响应语言变化。不要把所有中文文本硬编码到渲染函数中。

使用主题语义色和字体角色,让系统切换主题时有一致表现。布局基于逻辑尺寸与安全区;测试 pai-touch 和圆屏 Profile,检查长文本、边缘按钮及触控区域。模拟器字体显示正常也不代表真机具备相同字体资源。

服务与权限

manifest 中声明实际使用的 Service;有网络、存储或其他受限能力时,同时按 SDK 规范声明所需权限。Core SDK 版本不能代替服务版本和 feature 协商。

需求 开发检查
UI / Canvas 服务版本、节点与资源容量、事务大小
网络 net.client 等对应权限、响应大小、失败路径
文件与持久化 应用私有目录、配额、断电后的恢复
音频 / 传感器 目标 Host 是否注册 provider、取消与清理
日志 日志服务声明与设备侧日志通路

先处理能力不可用与权限拒绝,再处理正常流程。避免在事件回调里进行无界等待;异步工作在停止时需要取消或释放。

多源文件与 CMake

单文件 Hello 适合入门。需要多个组件、WASI libc 或 CMake 依赖时,参考系统仓库的 apps/tests/cmake-wasi-app 和 apps/tests/wasi/cmake-components-lab,并使用 sdk/cmake/pxa-wasi-toolchain.cmake。这些样例体现真实打包器支持的结构,适合作为扩展起点。

完成一次功能迭代

在模拟器验证交互 → 查看 PXADB 日志与截图 → 为设备重新打包 → 真机测试内存、输入和显示 → 记录版本与制品。功能稳定后再发布签名包。

更多可运行应用与真实项目结构,见开源应用仓库 pxa-apps,包括商城、天气、街机游戏、诊断工具与 GameRender 示例。

参考实现与资料guest-c/README.md ↗hello/main.c ↗zh-CN/pxa-binding.md ↗

输入关键词,搜索全部教程。