应用开发

PXA 创作与开发指南

第一个 PXA 应用

创建 C++26 Hello,修改计数界面,检查圆屏与 DPI,再安装到真机。

中文指南 · 5 分钟阅读 · PXA 0.10.0
适用环境与阅读准备

适用环境独立 App

开始前安装 DevKit;在项目父目录执行命令

术语速查 →

1. 创建一次 C++26 项目

先安装 DevKit。在准备存放项目的目录执行,不需要进入固件工作区。若已使用 AI 一键配置,下文的 pxa 换成工作区的 .pxa/pxa(Windows 为 .pxa\pxa.cmd),项目使用 apps/hello,不要再安装另一套工具:

pxa init hello --id pxa-hello
pxa run hello

预期打开 Hello PXA,数字从 0 开始,点击 +1 后变为 1。先关闭窗口,再进行下一个步骤。若已经创建 hello,直接运行,不要重复 init;工具拒绝覆盖非空目录。

项目包含 main.cpp、CMakeLists.txt、package.json 与忽略规则;首次构建生成应提交的 pxa.lock。.pxa/ 与 dist/ 是可删除的生成物。清单里的应用 ID 是 pxa-hello,目录名是 hello,两者分别用于安装身份和源码定位。

2. 看懂界面代码

生成的 hello/main.cpp 使用以下完整 C++26 示例:

#include <pxa/app.hpp>
#include <pxa/ui_component.hpp>
#include <pxa/ui_environment.hpp>
#include <pxa/ui_layout.hpp>

using namespace pxa;
using namespace pxa::ui;
using namespace pxa::ui::literals;

struct Hello {
    Environment<> environment;
    State<int> count{0};

    Result<void> on_start(Context&, std::span<const std::byte> configuration) {
        return environment.initialize(configuration);
    }
    Result<bool> on_event(Context&, const Event& event) {
        return environment.update(event);
    }
    auto view() {
        return SafeArea(environment.display(), Column(
            Text("Hello PXA").font(Font::title),
            Text(count).font(Font::headline),
            Button("+1").on_click([this] {
                count.update([](int value) { return value + 1; });
            }).height(44_dp).fill()
        ).gap(12_dp).fill()).padding(12_dp);
    }
};

PXA_APPLICATION(Hello)

State<int> 保存计数,点击时修改状态,SDK 更新受影响的界面。Environment 读取显示、安全区、DPI、语言等配置,并处理配置事件。SafeArea 与 dp 尺寸用于适配不同屏幕。

把 Hello PXA 改成 Hello from my app,保存后运行:

pxa run hello --watch

保存源码会增量构建并重启应用;计数从 0 重新开始。这不是保持应用内存的热替换。语法错误导致构建失败时,模拟器中先前成功的应用继续运行;修正并保存后恢复更新。按 Ctrl+C 停止 watch。

3. CMake 描述源文件

hello/CMakeLists.txt 内容为:

cmake_minimum_required(VERSION 3.20)
project(hello LANGUAGES CXX)
find_package(Pxa CONFIG REQUIRED)
pxa_add_app(main SOURCES main.cpp)

pxa_add_app 默认创建 C++26 应用组件 main,采用 O3。新增 .cpp 时加入 SOURCES,不维护另一份编译源文件列表,也不手动复制 ABI 常量或编译器路径。package.json 单独描述身份、版本、资源和所需服务。

4. 检查圆屏和高 DPI

以下命令分别运行,关闭窗口后再执行下一条:

pxa run hello --profile sensecap-watcher
pxa run hello --profile esp-mosaico
pxa run hello --profile esp32s31-korvo-1

比较按钮可触及性、文字和安全区。Profile 改变屏幕与 DPI,桌面执行目标仍是 linux-x86_64。

5. 在真机运行

设备需运行 Core 2.1 并提供清单所需服务。连接设备,关闭占用串口的 monitor 或其他调试客户端,核对实际端口:

pxa device info --port /dev/ttyACM1 --baud 2000000
pxa run hello --device /dev/ttyACM1 --baud 2000000

工具读取设备架构,生成匹配 AOT,再安装并启动。设备验证包内发布者与签名;开发密钥由本机用户数据目录保存。若产品额外限制开发发布者,还需按其策略授权。这里的 ACM1 是示例端口,换成自己的设备。

6. 打包已验证版本

pxa build hello --target esp32s3,esp32s31,simulator --offline
pxa publish hello/dist/pxa-hello.pxa --check-only

预期产生 hello/dist/pxa-hello.pxa,校验命令输出包身份、目标和 SHA-256。--check-only 不上传。发布时继续签名与打包和商城登记。Core ABI 2.1、DevKit 0.10.0 与应用版本 0.1.0 是独立版本。

参考实现与资料hello/main.cpp ↗hello/package.json ↗pxa_tools/cli.py ↗

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