今天想和大家聊一个特别有意思的开源项目——AAGUI。它是一个不依赖特定硬件和操作系统的跨平台通用型GUI框架。这意味着,无论是资源受限的嵌入式MCU,还是功能丰富的桌面环境,你都可以用同一套技术栈来构建用户界面。
项目采用宽松的MIT开源协议,源码仓库位于Gitee:https://gitee.com/QQ1159465634/aagui。
AAGUI核心特性与架构
AAGUI框架本身采用 C/C++ (兼容C89/C++98标准)编写,并具备位置无关(PIC)的特性。它融合了面向对象与半声明式的设计思想,旨在提升应用开发效率和代码可维护性。
其优雅的页面管理机制,使得开发大型、多页面的系统级UI应用成为可能。更重要的是,它的UI核心源于对Android系统的精简与移植,在保持强大功能的同时,实现了超低的内存占用,从而让在嵌入式MCU上实现类Android的高级UI开发不再是梦想。

软件架构分层
AAGUI的代码结构清晰,分为三个主要部分:
| 文件夹 |
说明 |
是否开源 |
AAGUI_app |
应用层示例代码 |
✅ |
AAGUI_core |
框架核心层 |
❎ |
libAAGUI |
已编译的核心层静态库 |
❇ |
如何移植AAGUI?
将AAGUI移植到你的目标平台,通常遵循以下步骤:
- 添加代码与库:将AAGUI的相关源码及静态库添加到你的项目中,并正确配置头文件包含路径。建议定义一个预处理器符号来标记当前目标平台。
- 实现抽象接口:在
AABase.c 文件中,实现框架所需的抽象移植接口,例如 aa_malloc(), aa_free() 等内存管理函数,以及显示驱动、输入设备等底层对接函数。
- 定义与配置主GUI:在你的应用代码中,定义主GUI实例并配置其显示设备信息(如分辨率、颜色格式),最后对接框架的启动接口。
更详细的移植指南,请参阅项目自带的 AAGUI文档.chm 以及已移植的参考项目。
框架优势与能力详解
AAGUI在设计上充分考虑了对 嵌入式 等资源敏感场景的适配,同时也提供了足够强大的功能以应对复杂应用。
- 资源要求:推荐 Flash ≥ 256KB,RAM ≥ 32KB(其中栈约6KB,堆约26KB)。
- 核心优势:
- 提供完整的应用框架,支持多GUI实例(多屏显示)。
- 采用JSON进行半声明式的高级UI布局描述。
- 内置完整的中文输入法。
- 支持Alpha通道和剪辑区(Clipping)。
- 图形与渲染:
- 帧缓冲区:原生支持0-bit(自控)、1-bit(单色)、8-bit(灰度)、16/24/32-bit彩色,并支持运行时动态修改。
- 部分帧缓冲(PFB):为极度节省内存而设计,最低仅需1行显示缓存。例如240x320分辨率,最低只需240像素的内存开销。
- 图形绘制:支持点、线、矩形、圆、圆角矩形、椭圆、渐变、多边形、圆弧(可绘制扇形)。
- 图片绘制:支持1/8/16/24/32-bit位图及QOI格式图片,支持缩放与旋转。
- 布局与控件:
- 复用机制:支持页面(面板)、UI布局、UI控件及自定义高级组件的复用。
- 布局管理器:提供帧布局、线性布局、绝对布局,以及垂直/水平滚动容器。
- 基础控件:包括文本视图、文本编辑框、按钮、进度条等。
- 字体管理:支持自由管理多字体,可绘制带边框的文字,并支持文本缩放。

更多平台演示
AAGUI的跨平台能力不仅限于理论,从下面的截图中可以看到它已经在多种设备上成功运行。



总结
AAGUI为需要在不同平台(尤其是从嵌入式到桌面)上开发统一GUI的开发者提供了一个颇具吸引力的选择。它以C/C++为基础,兼顾了性能与开发效率,其低内存占用和强大的图形能力,使其在MCU级 嵌入式 应用开发中显得尤为突出。如果你正在寻找一个轻量、高效且功能全面的GUI解决方案,不妨到 云栈社区 的技术论坛深入探讨或访问其Gitee仓库了解更多细节。
|