AWTK全称Toolkit AnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎。
AWTK寓意有两个方面:
Toolkit AnyWhere。
ZLG物联网操作系统AWorks内置GUI。
AWTK源码仓库:
运行效果截图:




支持开发嵌入式应用程序。
支持开发Linux应用程序。
支持开发MacOS应用程序。
支持开发Windows应用程序。
支持开发Web APP。
支持开发微信小程序。
支持开发支付宝小程序。
支持开发百度小程序。
支持开发Android应用程序。
支持开发iOS应用程序。
支持开发2D小游戏。
1.跨平台
AWTK是跨平台的,这有两个方面的意思:
AWTK本身是跨平台的。目前支持的平台有ZLG AWorks、Windows、Linux、MacOS、嵌入式Linux和嵌入式裸系统,可以轻松的移植到各种RTOS上。AWTK以后也可以运行在浏览器(即将公测)、各种小程序、Android和iOS等平台上运行。
AWTK同时还提供了一套跨平台的基础工具库。其中包括链表、数组、字符串(UTF8和widechar),事件发射器、值、对象、文件系统、互斥锁和线程、表达式和字符串解析等等,让你用AWTK开发的应用程序可以真正跨平台运行。
2.高效
AWTK通过一系列的手段保证AWTK应用程序高效运行:
通过脏矩算法只更新变化的部分。
支持3 FrameBuffer让界面以最高帧率运行(可选)。
UI描述文件和主题文件使用高效的二进制格式,解析在瞬间完成。
支持各种GPU加速接口。如OpenGL、DirectX、Vulman和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
Lua
Javascript on jerryscript
Javascript on nodejs
8.国际化
支持Unicode。
支持输入法。
支持字符串翻译(实时生效)。
支持图片翻译(实时生效)。
文字双向排版(计划中)。
9.开放源码,免费商用(LGPL)。
1.稳定性增强
多个实际项目验证。
新增数百个测试用例。
增加控件运行时类型检查。
使用infer静态检查,并修改发现的问题。
使用cppcheck静态检查,并修改发现的问题。
使用valgrind动态内存检查,并修改发现的问题。
2.优化性能
绘制半透明色矩形速度提高3倍。
缩放不透明图片快1倍(bgr565格式LCD)。
缩放半透明图片快30%(bgr565格式LCD)。
3.新增特性
窗口动画支持自定义。
新增4种内置窗口动画。
对话框高亮策略支持自定义。
内置动态和静态背景变暗的对话框高亮策略。
新增 object_t接口。
对话框支持非模态。
窗口支持全屏窗口。
增加toast/info/confirm等内置对话框。
slide view支持循环切换。
slide view增加更多切换动画。
数字时钟支持英文的星期和月份。
支持自定义软键盘。
增加lcd_profile用于对绘制函数进行profile。
data资源支持同文件名不同扩展名。
window manager支持paint事件。
UI XML文件支持简单表达式。
改进编译脚本和资源生成脚本。
4.新增控件
增加mutable image,用于实现camera和video时显示图像。
5.新增重要API
window_manager_back 返回上一级窗口。
window_manager_back_to_home 返回主窗口。
window_close_force 强制关闭窗口(忽略动画)。
ui_loader_load_widget 用于加载局部组件。
6.Bug修改和完善功能
详情请参考docs/changes.md。
下一个版本计划推出下列功能:
新增控件。
抽象音频接口。
桌面版本支持多原生窗口。
在sylixos和linux上支持多进程。
AWTK-WEB 让AWTK应用程序在浏览器中运行。
AWTK-MVVM 为嵌入式系统定制的MVVM框架。
需要什么功能,请在github上留言,我们会优先安排。
离线
关注这个GUI 很久了, 找机会试一试。
请问楼主是开发awtk 开发团队的吗?
离线
真的很不错
离线
这不是FTK的作者嘛?久仰!
离线
Zodiac wrote:
这不是FTK的作者嘛?久仰!
哈哈,遇到熟人了。
离线
cityf wrote:
关注这个GUI 很久了, 找机会试一试。
请问楼主是开发awtk 开发团队的吗?
是的。谢谢关注。
离线
紧紧跟着大佬的步伐
离线
试了一下demo,效果非常的好。
离线
看过视频,效果很好。李工,这个GUI有没有交流群?
离线
duckduckgo wrote:
看过视频,效果很好。李工,这个GUI有没有交流群?
谢谢关注。我在README的最下面加了一个微信群的二维码:https://github.com/zlgopen/awtk
离线
lixianjing wrote:
duckduckgo wrote:
看过视频,效果很好。李工,这个GUI有没有交流群?
谢谢关注。我在README的最下面加了一个微信群的二维码:https://github.com/zlgopen/awtk
没找到微信群二维码呢,另外主页上这么漂亮的界面 不知道是否有demo,不知道该如何实现时钟界面。
表盘是个图片吗? 我想实现百分比式的表盘,不知道如何实现
离线
强大得很,跨平台是很大的优势, 以后有项目可以试试
最近编辑记录 dbskcnc (2019-05-29 17:29:46)
离线
商业使用收费吗?
离线
rf wrote:
商业使用收费吗?
看授权是LGPL,但是嵌入式环境都是静态编译居多,那么按理说就不能商业使用了,除非跑Linux然后动态加载
离线
介绍上面写着开放源码,免费商用,也不知道后期会不会改变策略
离线
我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
离线
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
离线
jimmy wrote:
我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
可能是移植层的问题,貌似没收到鼠标移动的事件,把它打印出来看看。
离线
ffplay wrote:
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
离线
达克罗德 wrote:
rf wrote:
商业使用收费吗?
看授权是LGPL,但是嵌入式环境都是静态编译居多,那么按理说就不能商业使用了,除非跑Linux然后动态加载
使用LGPL,我的本意是修改了AWTK本身,希望能分享出来。这样大家一起来完善AWTK,做出最好的GUI。
如果你不放心,可以联系我们,我们可以提供免费的商业授权。
离线
lixianjing wrote:
jimmy wrote:
我在全志V3s上,直接运行 demoui, 插入USB鼠标就能点击,这个确实很人性化,不需要任何设置。
但是问题来了,按下鼠标不能左右滑动,而电容触摸屏可以,请教楼主, 是我的操作姿势有问题,还是本来就不行呢?
Windows/Ubuntu 模拟器鼠标操作是可以的.
可能是移植层的问题,貌似没收到鼠标移动的事件,把它打印出来看看。
可是鼠标指针会随着手势移动,应该说收到了移动事件才对,晚点我去看下 log 记录。
离线
lixianjing wrote:
ffplay wrote:
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
VSCode是导入一个文件夹编辑对吧?可以单步调试吗?
离线
scons 后出现下面问题
scons: Reading SConscript files ...
KeyError: 'NATIVE_WINDOW':
File "/home/gust/F1c200s/ATWK/awtk-linux-fb/SConstruct", line 45:
SConscript(SConscriptFiles)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:
return method(*args, **kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:
return _SConscript(self.fs, *files, **subst_kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 260:
exec _file_ in call_stack[-1].globals
File "/home/gust/F1c200s/ATWK/awtk-linux-fb/build/var/awtk/src/SConscript", line 8:
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];
File "/usr/lib/python2.7/UserDict.py", line 40:
raise KeyError(key)离线
准备新项目上使用这个AWTK...
离线
@k455619
KeyError: 'NATIVE_WINDOW':
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];
说明字典(???) os.environ 中, 键值(???) NATIVE_WINDOW 不存在,
是不是awtk_config.py 中这行没有执行:
os.environ['NATIVE_WINDOW'] = NATIVE_WINDOW;
在线
我这里没问题啊。你用的最新代码吗?难道是 python2.7的问题?
@k455619
离线
ffplay wrote:
lixianjing wrote:
ffplay wrote:
请教楼主,可以用scons命令转为 msvc 工程吗?
因为我还是不习惯命令行编程
scons没这个功能。scons + VSCode挺好用的,你可试试。
VSCode是导入一个文件夹编辑对吧?可以单步调试吗?
在AWTK目录,右键打开“Open With Code”。
在launch.json加入:
{
"name": "(Windows) demoui.exe",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/demoui.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
},离线
lixianjing wrote:
我这里没问题啊。你用的最新代码吗?难道是 python2.7的问题?
@k455619
并不是最新的,下周试试最新的看下
离线
晕哥 wrote:
@k455619
KeyError: 'NATIVE_WINDOW':
NATIVE_WINDOW = os.environ['NATIVE_WINDOW'];说明字典(???) os.environ 中, 键值(???) NATIVE_WINDOW 不存在,
是不是awtk_config.py 中这行没有执行:
os.environ['NATIVE_WINDOW'] = NATIVE_WINDOW;
好像就是python找不到这个NATIVE_WINDOW key 报错了,但是其实是有这个key的吧,下周我试试最新的ATWK
离线
V3s使用这个
屏幕白一下之后就黑了 啥也不显示 是怎么回事呢
# ./release/bin/demoui
app_root_is_valid:43 app_root != NULL
try /mnt/awtk
try /mnt/awtk/release/bin
app_root=/mnt/awtk/release
!!!Asset [name=en_US type=strings] not exist!!!
!!!Asset [name=en type=strings] not exist!!!
fb_info_t: /dev/fb0
fb_info_t: xres=480 yres=272 bits_per_pixel=32 mem_size=522240
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=1920 mem_size=522240 smem_len=522240
xres_virtual =480 yres_virtual=272 xpanstep=0 ywrapstep=0
ratio=1.000000 480 272
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
Build at: Oct 21 2019 12:14:02
assets_manager_preload:626 info != NULL
assets_manager_preload:626 info != NULL
!!!Asset [name=preload type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
!!!Asset [name=cursor type=image] not exist!!!
window_manager_default_set_cursor:997 image_manager_get_bitmap(image_manager(), cursor, &bitmap) == RET_OK
theme_find_style:89 t != NULL && t->data != NULL
!!!Asset [name=cursor type=image] not exist!!!
window_manager_paint_cursor:531 image_manager_get_bitmap(image_manager(), wm->cursor, &bitmap) == RET_OK
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=0, fd=-1, filename=/dev/input/mice)
Print mouse: : Success
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=earth type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=dialog_title type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=rgb type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=rgba type=image] not exist!!!
widget_set_value:195 widget != NULL
widget_set_text_utf8:248 widget != NULL
widget_lookup_all:778 widget != NULL && name != NULL
widget_lookup_all:778 widget != NULL && name != NULL
!!!Asset [name=system_bar type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
!!!Asset [name=main type=ui] not exist!!!
ui_loader_load_widget:38 ui != NULL
widget_on:936 widget != NULL && on_event != NULL
widget_on:936 widget != NULL && on_event != NULL
widget_foreach:2154 widget != NULL && visit != NULL
widget_get_type:2809 widget != NULL && widget->vt != NULL
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
tslib_dispatch_one_event:61 tslib read failed(ret=0, errno=0, filename=/dev/input/event0)
Print tslib: : Success离线
点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示
晕哥 wrote:
从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
离线
a32425262 wrote:
点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示晕哥 wrote:
从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
貌似资源文件没找到。是用release.sh生成的zip包吗?
离线
是的 我是按照这个步骤来的
==============================================
使用方法
1.获取源码
git clone https://github.com/zlgopen/awtk.git
git clone https://github.com/zlgopen/awtk-examples.git
git clone https://github.com/zlgopen/awtk-linux-fb.git
cd awtk-linux-fb
2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
3.编辑 awtk-port/main_loop_linux.c 修改输入设备的文件名
#define FB_DEVICE_FILENAME "/dev/fb0"
#define TS_DEVICE_FILENAME "/dev/input/event0"
#define KB_DEVICE_FILENAME "/dev/input/event1"
4.编译(请先安装scons)
生成内置 demoui 例子,生成结果在 build/bin 文件夹下的 demoui 文件
scons
5.生成发布包
对于内置的 demoui 例子
./release.sh
6.运行
把 release.tar.gz 上传到开发板,并解压,然后运行:
./release/bin/demoui
lixianjing wrote:
a32425262 wrote:
点击触摸屏是有log输出的
就是屏幕一片黑 啥也不显示晕哥 wrote:
从 log 上面看, 没有相关的日志输出.
我在 S3 上面跑过, 一切正常。
还直接支持USB鼠标。
貌似资源文件没找到。是用release.sh生成的zip包吗?
离线
我现在有个问题
/dev/root 11.5M 5.1M 6.4M 44% /
ATWK有没有小点的DEMO?
离线
是哦 这么大的话 感觉和QT差不多了
晕哥 wrote:
是有点大, arm-linux-strip 处理一下, 删除调试符号,看还能不能变小一点。
离线
2019-10-24早8:26
删除全部,重新下载后,无法编译了,函数声明和定义不一样的,此处我的修改的是
build/var/awtk/src/base/widget.c文件的
ret_t widget_off_by_tag(widget_t* widget, int32_t tag)
为
ret_t widget_off_by_tag(widget_t* widget, uint32_t tag)
然后编译通过
# scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/opt/gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -o build/var/awtk/src/base/widget.o -c -std=gnu99 -g -Wall -Os -DHAS_STD_MALLOC -DWITH_FS_RES -DHAS_STDIO -DWITH_VGCANVAS -DWITH_UNICODE_BREAK -DLINUX -DSTBTT_STATIC -DSTB_IMAGE_STATIC -DWITH_STB_IMAGE -DWITH_STB_FONT -DWITH_NANOVG_AGGE -DWITH_WIDGET_TYPE_CHECK -DLINUX -DHAS_PTHREAD -DENABLE_CURSOR -DHAS_TSLIB -I/opt/tslib/include -I/workdir/awtk/awtk -I/workdir/awtk/awtk/src -I/workdir/awtk/awtk/3rd -I/workdir/awtk/awtk/src/ext_widgets -I/workdir/awtk/awtk/tools -I/workdir/awtk/awtk/3rd/agge -I/workdir/awtk/awtk/3rd/agg/include -I/workdir/awtk/awtk/3rd/nanovg -I/workdir/awtk/awtk/3rd/nanovg/base -I/workdir/awtk/awtk/3rd/libunibreak -I/workdir/awtk/awtk/3rd/gpinyin/include build/var/awtk/src/base/widget.c
build/var/awtk/src/base/widget.c: In function 'widget_set_theme':
build/var/awtk/src/base/widget.c:392:15: warning: unused variable 'vgcanvas' [-Wunused-variable]
vgcanvas_t* vgcanvas = canvas_get_vgcanvas(canvas);
^~~~~~~~
build/var/awtk/src/base/widget.c: At top level:
build/var/awtk/src/base/widget.c:961:7: error: conflicting types for 'widget_off_by_tag'
ret_t widget_off_by_tag(widget_t* widget, int32_t tag) {
^~~~~~~~~~~~~~~~~
In file included from build/var/awtk/src/base/widget.c:33:0:
/workdir/awtk/awtk/src/base/widget.h:1210:7: note: previous declaration of 'widget_off_by_tag' was here
ret_t widget_off_by_tag(widget_t* widget, uint32_t tag);
^~~~~~~~~~~~~~~~~
scons: *** [build/var/awtk/src/base/widget.o] Error 1
scons: building terminated because of errors.解压后还是啥都不显示,看来是作者说的对。没有资源文件,以下是打包时候的日志
# ./release.sh
APP_ROOT = ../awtk/demos
‘build/bin/demo1’ -> ‘release/bin/demo1’
‘build/bin/demo_animator’ -> ‘release/bin/demo_animator’
‘build/bin/demo_desktop’ -> ‘release/bin/demo_desktop’
‘build/bin/demo_thread’ -> ‘release/bin/demo_thread’
‘build/bin/demotr’ -> ‘release/bin/demotr’
‘build/bin/demoui’ -> ‘release/bin/demoui’
‘build/bin/demovg’ -> ‘release/bin/demovg’
‘build/bin/input_test’ -> ‘release/bin/input_test’
‘build/bin/mouse_test’ -> ‘release/bin/mouse_test’
‘build/bin/preview_ui’ -> ‘release/bin/preview_ui’
‘build/bin/tslib_test’ -> ‘release/bin/tslib_test’
‘build/bin/xml_to_ui’ -> ‘release/bin/xml_to_ui’
removed ‘release/bin/input_test’
removed ‘release/bin/mouse_test’
removed ‘release/bin/tslib_test’
removed ‘release/bin/demo1’
removed ‘release/bin/demovg’
removed ‘release/bin/demotr’
removed ‘release/bin/demo_animator’
removed ‘release/bin/demo_thread’
removed ‘release/bin/demo_desktop’
cp: cannot stat ‘../awtk/demos/assets/raw/data/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/fonts/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/x1’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/xx’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/images/svg/*.bsvg’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/scripts/*’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/strings/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/styles/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/ui/*.bin’: No such file or directory
cp: cannot stat ‘../awtk/demos/assets/raw/xml/*’: No such file or directory
release/
release/bin/
release/bin/preview_ui
release/bin/demoui
release/bin/xml_to_ui
release/assets/
release/assets/raw/
release/assets/raw/strings/
release/assets/raw/styles/
release/assets/raw/xml/
release/assets/raw/data/
release/assets/raw/images/
release/assets/raw/images/svg/
release/assets/raw/scripts/
release/assets/raw/fonts/
release/assets/raw/ui/那么问题来了,我从哪里拷贝这些资源文件呢
以下是v3s上面的错误日志
# ./release/bin/demo
try /mnt/awtk
try /mnt/awtk/release/bin
app_root=/mnt/awtk/release
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=en_US type=strings] not exist!!!
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=en type=strings] not exist!!!
fb_info_t: /dev/fb0
fb_info_t: xres=480 yres=272 bits_per_pixel=32 mem_size=522240
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=1920 mem_size=522240 smem_len=522240
xres_virtual =480 yres_virtual=272 xpanstep=0 ywrapstep=0
ratio=1.000000 480 272
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
assets_manager_preload:681 info != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
assets_manager_preload:681 info != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=default type=font] not exist!!!
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
try_load_assets:308 assets_manager_build_asset_filename(am, path, MAX_PATH, FALSE, subpath, name, extname) == RET_OK
!!!Asset [name=default type=font] not exist!!!
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
canvas_measure_text_default:259 c != NULL && str != NULL && c->font != NULL
font_get_glyph:26 f != NULL && f->get_glyph != NULL && g != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
theme_find_style:89 t != NULL && t->data != NULL
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=0, fd=-1, filename=/dev/input/mice)
Print mouse: : Success
input_dispatch_one_event:71 mouse read failed(ret=-1, errno=2, fd=-1, filename=/dev/input/mice)
Print mouse: : No such file or directory最近编辑记录 a32425262 (2019-10-24 10:23:52)
离线
不好意思,麻烦更新一下AWTK和awtk-linux-fb。
前几天加了多主题实时切换功能,资源加了一级目录,release.sh忘记更新了。
离线
终于可以了,差点从入门到放弃
lixianjing wrote:
不好意思,麻烦更新一下AWTK和awtk-linux-fb。
前几天加了多主题实时切换功能,资源加了一级目录,release.sh忘记更新了。
离线
辛苦了,是我的疏忽。
离线
@lixianjing楼主大神,正在学习,想用自定义的数字图片,要用哪个控制来显示呢,我用image image_value label都试过了, 用了个timer,定义刷,或者2个按键+ 或-,在cb函数里面改变显示的图片,但没实现,求指点

代码类似这样
//widget_t* image_temper11 = image_value_create(win, 43, 74, 63, 80);
//image_value_set_image(image_temper11, "dig_");
//image_value_set_value(image_temper11, 3);
widget_t* image_temper11 = image_create(win, 43, 74, 63, 80);
image_set_image(image_temper11, "btn_1_manual");
image_set_draw_type(image_temper11, IMAGE_DRAW_DEFAULT); //IMAGE_DRAW_ICON
timer_add(on_systime_update, win, 2000);
static ret_t on_systime_update(const timer_info_t* timer) {
...
widget_t* image = widget_lookup(win, "image_temper11", TRUE);
if(++level>9)
level=9;
image_set_image(image_temper11, "dig_6");
//image_value_set_value(image_temper11, level);
...
return RET_REPEAT;
}
离线
image_value应该可以啊。遇到什么问题?
最近编辑记录 lixianjing (2019-10-31 14:12:24)
离线
定时刷,图片不会更新,只会显示初始化时候的那张图,后面定时动态更新图片,不会变化,但我猎取系统时间显示是ok的 

最近编辑记录 zhenfanhei (2019-10-31 14:49:24)
离线
我测试没问题啊,你参考一下:https://github.com/zlgopen/awtk-c-demos/blob/master/demos/image_value.c
你设置控件的名称了吗?上面的代码没看到。设置名称之后才能用widget_lookup查找:
widget_set_name(image_value, "image_temper11");离线
谢谢大神,参照demo已经弄好了,label, image_value都行了
离线
好的,谢谢支持。
离线
编译出来的demo怎么都很大,7M左右
离线
strip是必备技能:
ls -l build/bin/demoui
-rwxr-xr-x 1 l 6870909 Nov 5 01:35 build/bin/demoui
arm-linux-strip build/bin/demoui
ls -l build/bin/demoui
-rwxr-xr-x 1 2063712 Nov 5 01:36 build/bin/demoui离线
STM32F103用keil编译的代码约170K。
Program Size: Code=173094 RO-data=228930 RW-data=1040 ZI-data=24808 离线
不错,2M还是挺优秀的
离线
arm-linux-gnueabi-strip build/bin/demoui
arm-linux-gnueabi-strip:build/bin/demoui: 不可识别的文件格式
不可识别怎么解决
最近编辑记录 cris8259 (2019-11-05 19:50:42)
离线
cris8259 wrote:
arm-linux-gnueabi-strip build/bin/demoui
arm-linux-gnueabi-strip:build/bin/demoui: 不可识别的文件格式不可识别怎么解决
要用工具链配套的strip,如果你编译的PC版本,直接用strip即可。
离线
2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
按照步骤2改成
#for prebuild tslib
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-'
#TOOLS_PREFIX='/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-'
#for pc build
TOOLS_PREFIX=''
TSLIB_LIB_DIR=''
OS_FLAGS='-g -Wall '
发现TOOLS_PREFIX有两次赋值
离线
有没有简单浅显的入门教程。clone awtk.git awtk-examples.git awtk-linux-fb.git ,这三个文件夹之间有个什么样的关系,文件之间是怎么关联起来的?自己的代码文件应该放在哪里,什么样的文件组织形式比较合适?
离线
https://github.com/zlgopen/awtk-linux-fb 的README里有写啊,三者并列放到同一个目录。
离线
让开发者自己写文档着实难为了。
离线
谢谢支持。我们会持续完善文档。
离线
lixianjing wrote:
谢谢支持。我们会持续完善文档。
想问一下大神,串口收到的数据想显示到ATWK界面中,如何操作比较好呢?
能否直接修改win_main.c文件,但是这样感觉软件架构就乱了。。
有没有其他好的方法?
离线
楼主,有个新问题请教, 想把中文字符传到strings.xml里面的%s, 要用什么办法呢?
locale设置的中文,
<string name="Mlti_load1 %s">
<language name="en_US">Mlti_load1 %s</language>
<language name="zh_CN">多功能负载1 %s</language>
代码里面这样:
tk_snprintf(str, sizeof(str), format, "Open"); //可以
widget_set_tr_text(btn, str);
但传中文字符串就不行了, 传strings.xml里面定义过的英文串也不行,还是显示的英文,若传中文串过去则不会显示出来
离线
zhenfanhei wrote:
楼主,有个新问题请教, 想把中文字符传到strings.xml里面的%s, 要用什么办法呢?
locale设置的中文,但传中文字符串就不行了, 传strings.xml里面定义过的英文串也不行,还是显示的英文,若传中文串过去则不会显示出来
中文需要用UTF8编码。
离线
EddyZhan wrote:
lixianjing wrote:
谢谢支持。我们会持续完善文档。
想问一下大神,串口收到的数据想显示到ATWK界面中,如何操作比较好呢?
能否直接修改win_main.c文件,但是这样感觉软件架构就乱了。。
有没有其他好的方法?
这个话题很有意思。有空可以玩玩AWTK-MVVM: https://github.com/zlgopen/awtk-mvvm
离线
楼主大神, widget_set_text_utf8 (btn, "打开"); 显示不出来,
widget_set_text_utf8 (btn, "Open"); 能显示,这个可能是什么情况?
可以了,结贴,xx为strings.xml中定义过的串就行了,
widget_set_tr_text(btn, "xx");
最近编辑记录 zhenfanhei (2019-11-07 12:04:38)
离线
zhenfanhei wrote:
楼主大神, widget_set_text_utf8 (btn, "打开"); 显示不出来,
widget_set_text_utf8 (btn, "Open"); 能显示,这个可能是什么情况?可以了,结贴,xx为strings.xml中定义过的串就行了,
widget_set_tr_text(btn, "xx");
用vscode把源文件转换程UTF8-BOM格式。
确认字体中包含中文字库。
离线
折腾几个晚上没有编译过去遇见各种各样的问题,什么编码问题改成utf-8,后来编译还是有错,最后可能是Ubuntu16.4自动的python2.2版本太低了,还没有到上测试。
离线
各路大神,这是什么错误啊?
root@osboxes:/work/EmbedSky/AWTK/awtk-linux-fb# scons
Traceback (most recent call last):
File "/usr/local/bin/scons", line 195, in <module>
import SCons.Script
File "/usr/local/lib/scons/SCons/Script/__init__.py", line 94, in <module>
from . import Main
File "/usr/local/lib/scons/SCons/Script/Main.py", line 1016
except SCons.Errors.StopError as e:
^
SyntaxError: invalid syntax
root@osboxes:/work/EmbedSky/AWTK/awtk-linux-fb#
最近编辑记录 大帅 (2019-12-05 21:16:09)
离线
你好,使用atwk 请指导下,我移植到板子上,出现闪屏的现象。
我使用基于framebuffer实现的 LCD接口 ,目前使用如下,出现闪屏。
platform_create_lcd {
return lcd_mem_bgr565_create_three_fb(w, h, (rt_uint8_t )frame_buffer0, (rt_uint8_t )frame_buffer1, (rt_uint8_t *)frame_buffer2);
}
我大致推断是把还没有绘制完的framebuffer,直接刷了。或者在刷的同时,有在更新framebuffer。 求助在哪个位置 获取已经绘制完成的 offline_framebuffer。
离线
学习了。
离线
yangchao wrote:
你好,使用atwk 请指导下,我移植到板子上,出现闪屏的现象。
我使用基于framebuffer实现的 LCD接口 ,目前使用如下,出现闪屏。
platform_create_lcd {
return lcd_mem_bgr565_create_three_fb(w, h, (rt_uint8_t )frame_buffer0, (rt_uint8_t )frame_buffer1, (rt_uint8_t *)frame_buffer2);
}我大致推断是把还没有绘制完的framebuffer,直接刷了。或者在刷的同时,有在更新framebuffer。 求助在哪个位置 获取已经绘制完成的 offline_framebuffer。
请问解决了嘛?我使用s3c2440出现问题,倒不是闪屏,刷了一次就完全黑掉了
离线
@lixianjing
刚刚安装了 AWTK Designer,看到许可到期是 2020/5/13
请问到期之后是收费的吗?
还有后期的模式是否为 AWTK Designer软件收费,GUI代码免费呢?
请说明,谢谢了
离线
我的目标板是荔枝zero那么交叉编译的时候awtk-linux-fb里面的中awtk_config.py文件里面的
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
该怎么更改?
离线
这是AWTK在linux平台下的说明文档
AWTK)是为嵌入式系统开发的GUI引擎库。
awtk-linux-fb)是AWTK在arm-linux上的移植。
本项目以ZLG周立功 linux开发套件 AWork平台iMX287A 入门级ARM9开发板) 为载体移植,其它开发板可能要做些修改,有问题请请创建issue。
1.获取源码
以下三者并列放在同一个目录。
git clone [https://github.com/zlgopen/awtk.git](<https://github.com/zlgopen/awtk.git>)
git clone [https://github.com/zlgopen/awtk-examples.git](<https://github.com/zlgopen/awtk-examples.git>)
git clone [https://github.com/zlgopen/awtk-linux-fb.git](<https://github.com/zlgopen/awtk-linux-fb.git>)
cd awtk-linux-fb2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'3.编辑 awtk-port/main\_loop\_linux.c 修改输入设备的文件名
#define FB_DEVICE_FILENAME "/dev/fb0"
#define TS_DEVICE_FILENAME "/dev/input/event0"
#define KB_DEVICE_FILENAME "/dev/input/event1"4.编译(请先安装scons)
生成内置 demoui 例子,生成结果在 build/bin 文件夹下的 demoui 文件
scons也可以指定生成其他 Demo,生成结果在 build/bin 文件夹下的 demo 文件
scons APP=../awtk-examples/HelloWorld-Demo5.生成发布包
对于内置的 demoui 例子
sh ./release.sh对于其他 Demo,需要加入资源文件夹参数,指向应用程序 assets 的父目录
sh ./release.sh ../awtk-examples/HelloWorld-Demo/res demo
sh ./release.sh ../awtk-examples/Chart-Demo/res_800_480 demo6.运行
把 release.tar.gz 上传到开发板,并解压,然后运行:
./release/bin/demoui
./release/bin/demo默认情况下,scons 脚本假设以下文件夹在同一个目录
zlgopen
|-- awtk
|-- awtk-examples
|-- awtk-linux-fb如果实际存放的路径与默认不同,则需要修改以下 awtk-linux-fb/SConstruct 代码,例如:
TK_ROOT = joinPath(os.getcwd(), '../awtk')
APP_ROOT=joinPath(os.getcwd(), '../awtk-examples/HelloWorld-Demo')所以按照文档来说我看应该需要改步骤2的三句话
2.编辑 awtk_config.py 设置工具链的路径
TSLIB_LIB_DIR='/opt/28x/tslib/lib'
TSLIB_INC_DIR='/opt/28x/tslib/include'
TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'最近编辑记录 泽被苍生 (2020-03-01 17:08:01)
离线
而tslib我是用buildroot编译的所以问题是buildroot编译的tslib结果输出在什么目录下。
离线
这个如果能支持OPWRT系统应用开发就太好了
离线
商用,到底是不是免费呢?
最近编辑记录 apollo800 (2021-09-23 19:30:26)
离线
apollo800 wrote:
商用,到底是不是免费呢?
LGPL协议,要求如果你是开发app,你的awtk部分必须动态链接。如果你开发嵌入式系统,那你的rootfs必须可供下载,而且awtk必须动态链接,而且so文件可替换。
离线
枕边书《系统程序员:成长计划》真是嵌入式方面的精华,值得广告一波
离线