ZLG AWTK 1.4 Release Notes
一、介绍
AWTK 全称 Toolkit AnyWhere,是 ZLG 开发的开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。
欢迎广大开发者一起参与开发:[生态共建计划](docs/awtk_ecology.md)。
AWTK 寓意有两个方面:
Toolkit AnyWhere。
ZLG 物联网操作系统 AWorksOS 内置 GUI。
AWTK 源码仓库:
稳定版整合包:https://pan.baidu.com/s/1_oRgj67M-I4kivk-YzwFWA 提取码:1cmi
AWTK Designer 界面设计工具:
不再需要手写 XML
拖拽方式设计界面,所见即所得
快速预览,一键打包资源
注册及下载地址:https://awtk.zlg.cn
二、最终目标:
支持开发嵌入式应用程序。✔
支持开发 Linux 应用程序。✔
支持开发 MacOS 应用程序。✔
支持开发 Windows 应用程序。✔
支持开发 Web APP。✔
支持开发 Android 应用程序。✔
支持开发 iOS 应用程序。✔
支持开发微信小程序。
支持开发支付宝小程序。
支持开发百度小程序。
支持开发 2D 小游戏。
三、主要特色
1. 跨平台
AWTK 是跨平台的,这有两个方面的意思:
AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorksOS、Windows、Linux、MacOS、嵌入式 Linux、Android、iOS、Web 和嵌入式裸系统,可以轻松的移植到各种 RTOS 上。AWTK 以后也可以运行在各种小程序平台上运行。
AWTK 同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串 (UTF8 和 widechar),事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等,让你用 AWTK 开发的应用程序可以真正跨平台运行。
2. 高效
AWTK 通过一系列的手段保证 AWTK 应用程序高效运行:
通过脏矩算法只更新变化的部分。
支持 3 FrameBuffer 让界面以最高帧率运行 (可选)。
UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
支持各种 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
支持嵌入式平台的各种 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,厂家可以轻松扩展自己的加速接口。
3. 稳定
AWTK 通过下列方式极力让代码稳定可靠:
使用 cppcheck 和 facebook infer 进行静态检查。
使用 valgrind 进行动态内存检查。
近两万行的单元测试代码。
ZLG 强大 GUI 团队的支持。
经过多个实际项目验证。
多平台 / 多编译器验证。
优秀的架构设计。
Code Review。
手工测试。
4. 强大
丰富的控件 (持续增加中)。
支持各种图片格式 (png/jpg/gif/svg)。
支持各种字体格式 (点阵和矢量)。
支持窗口动画
支持控件动画
支持高清屏。
支持界面描述文件。
支持主题描述文件。
主题切换实时生效。
支持控件布局策略。
支持对话框高亮策略。
丰富的辅助工具。
支持从低端的 Cortex M3 到各种高端 CPU。
支持无文件系统和自定义的文件系统。
支持裸系统和 RTOS。
5. 易用
大量的示例代码。
完善的 API 文档和使用文档。
ZLG 强大的技术支持团队。
用 AWTK 本身开发的 界面编辑器。
声明式的界面描述语言。一行代码启用控件动画,启用窗口动画,显示图片 (png/jpg/svg/gif)。
6. 高度扩展性
可以扩展自己的控件。
可以扩展自己的动画。
可以实现自己的主循环。
可以扩展自己的软键盘。
可以扩展自己的图片加载器。
可以扩展自己的字体加载器。
可以扩展自己的输入法引擎。
可以扩展自己的控件布局算法。
可以扩展自己的对话框高亮策略。
可以实现自己的 LCD 接口。
可以扩展自己的矢量引擎 (如使用 skia/cairo)。
所有扩展组件和内置组件具有相同的待遇。
7. 多种开发语言
AWTK 本身是用 C 语言开发的,可以通过 IDL 生成各种脚本语言的绑定。生成的绑定代码不是简单的把 C 语言的 API 映射到脚本语言,而是生成脚本语言原生代码风格的 API。目前支持以下语言 (以后根据需要增加):
C
C++
lua
java
python
Javascript on jerryscript
Javascript on nodejs
Javascript on quickjs
8. 国际化
支持 Unicode。
支持输入法。
支持字符串翻译 (实时生效)。
支持图片翻译 (实时生效)。
文字双向排版 (计划中)。
9. 为嵌入式软件定制的 MVVM 框架,彻底分离用户界面和业务逻辑。
性能高。
内存开销小。
隔离更彻底。
可移植到其它 GUI。
代码小 (~5000 行)。
无需学习 AWTK 控件本身的 API。
支持多种编程语言(目前支持 C/JS)。
详情请参考:https://github.com/zlgopen/awtk-mvvm
10. 开放源码,免费商用 (LGPL)。
四、1.4 版本更新
1. 细节完善
完善 fs 接口。
完善工具支持多主题。
list view 支持上下键滚动。
完善窗口切换时焦点恢复的问题。
完善 combobox,选择之后重新打开输入法。
progress circle 支持 line cap 属性。
增加 vgcanvas_line_join_t 定义。
增加 vgcanvas_line_cap_t 定义。
修改 android resume 后界面黑屏的问题。
slide view/pages 每个页面支持独立的初始焦点。
增加函数 widget_set_child_text_utf8。
增加函数 widget_set_child_text_with_double。
keyboard 在 grab_keys 时,keyboard 处理 key 事件后,应用窗口不再处理。
完善 image value,支持点击时加上一个增量,增加到最大值后回到最小值。
3. 新增特性
无文件系统是支持多主题。
opengles 支持 snapshot。
dit/mledit 支持自己指定软键盘名称。
点击鼠标右键触发 context menu 事件。
使用 event_source_manager 实现主循环。
增加 awtk_main.inc,用于标准程序的主函数。
用 SDL 重新实现 PC 版本的线程和同步相关函数 。
edit 增加 input type "custom_password"类型。
4. 新增控件
5. 新增重要 API
增加 action thread。
增加 action thread pool。
增加动态链接库的接口 dl.h。
增加 waitable ring buffer。
增加 widget_close_window。
增加 waitable_action_queue。
增加 path_replace_extname 函数。
增加 async.c/.h 用于实现函数异步调用。
增加 path_replace_extname 函数。
增加 async.c/.h 用于实现函数异步调用。
增加 data reader 接口和 data writer,用于抽象外部 flash 等设备。
增加函数 fs_get_user_storage_path 用于统一 PC 和 android 平台保存数据的目录。
6. 新增平台
7. 新增语言绑定
8. 新增相关项目
欢迎广大开发者一起参与开发:[生态共建计划](../awtk_ecology.md)。
离线
顶顶顶!!!!!!!希望国产UI越来越多
离线
“UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。”
随着版本迭代,直接使用二进制格式导致的版本兼容性问题会让你焦头烂额,维护成本大大增加。
离线
其实我比较喜欢啥都放在程序文件里面
至少可以让我这么选择
这样做出来的程序比较“干净”
不是一个文件夹里面很多文件
当然有必要的经常更换的配置文件等等
离线
“UI 描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。”
随着版本迭代,直接使用二进制格式导致的版本兼容性问题会让你焦头烂额,维护成本大大增加。
是的,相信很多人都吃过这个苦头。但是要具体情况具体分析,如果在运行时需要修改并保存的,就会存在你说的情况,因为新的代码需要兼容老版本的数据。
在 AWTK 中,这些资源都是只读的,资源数据每次都随代码同步更新,就不会有问题。
离线
STM32 的实例能不能基于官方的板子?
都是野火这类的高价板子,
相信大部分人都用的官方的板子,看了讨论组,很难移植到官方的板子上面,而且都是STACK不够这类很难debug的问题
离线
是的,相信很多人都吃过这个苦头。但是要具体情况具体分析,如果在运行时需要修改并保存的,就会存在你说的情况,因为新的代码需要兼容老版本的数据。
在 AWTK 中,这些资源都是只读的,资源数据每次都随代码同步更新,就不会有问题。
如果资源配置信息比较大就可能需要跟代码分离储存(比如放SD卡、SPI 闪存等),已经出货的设备想单独升级固件就很容易会出兼容性问题。
升级固件的同时要求升级工程(UI描述数据),多数客户是不肯干的。
离线
今天第一次听到这个,搜了一下似乎还是比较厉害的。之前只知道ucGUI,emWin,Qt之类的。
离线
STM32 的实例能不能基于官方的板子?
都是野火这类的高价板子,
相信大部分人都用的官方的板子,看了讨论组,很难移植到官方的板子上面,而且都是STACK不够这类很难debug的问题
ZLG 是 NXP 的代理商,不太方便去大力支持ST的芯片。STM32几个平台的移植,可以看作是我个人行为,板子都是我自己掏钱买的,主要是验证AWTK的可移植性,并给需要的朋友一个参考。个人精力有限,希望大家一起完善。
最近编辑记录 lixianjing (2020-04-22 08:18:48)
离线
如果资源配置信息比较大就可能需要跟代码分离储存(比如放SD卡、SPI 闪存等),已经出货的设备想单独升级固件就很容易会出兼容性问题。
升级固件的同时要求升级工程(UI描述数据),多数客户是不肯干的。
谢谢你的建议,你说的情况确实存在。此时可以只升级变化的部分,如果资源没有变,就不用升级资源文件,也可以只更新变化的资源。
资源文件的变化,原因也有多种,格式变化只是其中一种(而且很少发生),有时资源本身就是需要更新的,比如界面重新设计了,用户禁止升级资源貌似不太合理。
资源文件是只读的,所以不用考虑之前的格式,直接覆盖就行了。我倒不觉得会『焦头烂额』。
AWTK的UI 描述文件和主题文件,在开发时都是使用的XML格式,由XML文件生成二进制文件,供运行时使用。以后我们会根据客户的需求提供多种选择,比如直接加载XML文件。
离线
其实我比较喜欢啥都放在程序文件里面
至少可以让我这么选择
这样做出来的程序比较“干净”
不是一个文件夹里面很多文件
当然有必要的经常更换的配置文件等等
之前是我对awtk不熟悉
看了文档,有把资源文件直接编译到程序中
将资源生成常量数组直接编译到代码中时,其初始化过程为:
1.包含相应的数据文件。
#include "assets/inc/fonts/ap.data" #include "assets/inc/fonts/default.data" #include "assets/inc/fonts/default_ttf.data" #include "assets/inc/images/bricks.data" #include "assets/inc/images/checked.data" ...
2.将资源增加到资源管理器中。
assets_manager_add(rm, font_ap); assets_manager_add(rm, font_default); assets_manager_add(rm, font_default_ttf); assets_manager_add(rm, image_bricks); assets_manager_add(rm, image_checked); ...
将资源放在文件系统中时,一般不需要特殊处理,不过可以用assets_manager_load预加载资源。如:
assets_manager_load(rm, ASSET_TYPE_THEME, "default"); assets_manager_load(rm, ASSET_TYPE_FONT, "default_ttf");
参考:demos/assets.c
离线
百度云盘里最新是1.3 rc3,还没有1.4呢。
离线
协议变了,可以免费商用了。哪天研究一下,做个产品
离线
协议变了,可以免费商用了。哪天研究一下,做个产品
可以免费商用吗?
离线
可以免费商用吗?
可以
离线
百度云盘里最新是1.3 rc3,还没有1.4呢。
https://gitee.com/zlgopen/awtk 取1.4分支。
离线
我的板子STM32F429 DISCO,官方的板子,8MB DDR
想问下这块这么大的内存分配什么作用? 最少的数值多少? 我看见你移植的429RAW都是分配8MB,但我们的板子总共也就是8MB内存
#define MEM2_MAX_SIZE 8 * 1024 *1024
#define MEM2_ADDR (uint32_t*)0XD0000000 + 2 * 2 * 320 * 240
ret_t platform_prepare(void) {
tk_mem_init(MEM2_ADDR, MEM2_MAX_SIZE);
return RET_OK;
}
目前的现象都是FREERTOS 进APP_USER_GUI线程就跑丢了,不知道如何跟踪到什么地方?
离线
可以
可以看商用许可的规则吗?
离线
LGPL理论上不能静态链接吧?那单片机上基本不能商用了,除非上Linux,以动态链接库的方式链接。
离线
LGPL理论上不能静态链接吧?那单片机上基本不能商用了,除非上Linux,以动态链接库的方式链接。
其实不管怎么用,我们都不会追究法律责任,我们不靠这个赚钱。
如果移植到新的平台,我们希望能把移植部分的代码,放到github供其他朋友参考。当然你不开源,我们也不知道,知道了也不会追究法律责任。
对于大公司,如果希望完全合规,特别是要出口的企业,可以加入AWTK合作生态,签一个免费商用许可就行了。免费商用许可的基本条件是允许ZLG在宣传AWTK时,可以提到贵公司使用了AWTK。
离线
其实不管怎么用,我们都不会追究法律责任,我们不靠这个赚钱。
如果移植到新的平台,我们希望能把移植部分的代码,放到github供其他朋友参考。当然你不开源,我们也不知道,知道了也不会追究法律责任。
对于大公司,如果希望完全合规,特别是要出口的企业,可以加入AWTK合作生态,签一个免费商用许可就行了。免费商用许可的基本条件是允许ZLG在宣传AWTK时,可以提到贵公司使用了AWTK。
这个大赞!love awtk!
离线
我做有H750的板子,需要的话可以送你一块测试AWTK
离线
这个开发工具也挺好的 正在学习AWTK 后期转用这款做ui
离线
我做有H750的板子,需要的话可以送你一块测试AWTK
不用了,谢谢你。我有正点的429/767的板子,应该差不多。
离线