递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 237|回复: 11
打印 上一主题 下一主题

[其它] AWTK 界面库如何封装

[复制链接]

294

主题

2089

帖子

8247

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8247
QQ
跳转到指定楼层
楼主
发表于 昨天 13:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
官网如下:


不过他编译代码使用的scons构建工具进行编译。

火山视窗封装视频教程
回复

使用道具 举报

294

主题

2089

帖子

8247

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8247
QQ
沙发
 楼主| 发表于 昨天 13:51 | 只看该作者
  1. # 特殊平台编译配置

  2. 有些平台编译比较特殊,不能使用 scons 编译,也不能使用 keil 编译。我们用一个配置文件描述项目,然后用脚本来编译或生成项目模板。目前有 web、ios 和 android 版本使用这种方式。

  3. 配置文件采用 JSON 格式,位置放在项目的根目录下,推荐命名为 build.json。

  4. ## 一、通用选项

  5. * name 应用程序名称(不支持中文和特殊符号)。
  6. * vendor 开发商。
  7. * version 版本号。
  8. * assets 资源所在的目录(相对于配置文件所在的目录,android/ios 一般使用"res/assets", web 一般使用 design)。
  9. * sources 源文件列表(相对于配置文件所在的目录)。文件名支持通配符如*.c。只要添加应用程序本身和使用的第三方库的源码即可,AWTK 本身用到的代码会自动添加。
  10. * includes 头文件搜索路径列表(相对于配置文件所在的目录)。

  11. > sources 虽然是通用选项,但是不同平台,包含的源文件可能并不相同,此时应该放到具体平台之下,如果两者都有,则对其进行合并。

  12. ## 二、web 平台选项

  13. web 平台选项放在 web 子键下面,目前支持以下选项:

  14. * app_type 目前可选择的值有。"c" 表示用 C 语言开发的应用程序,"js"表示用 Javascript 开发的应用程序。

  15. * romfs(可选) 用于指定配置文件的目录,编译脚本将该目录打包成 romfs,在 AWTK-WEB 中可以通过 os_fs 访问。
  16.   
  17. * config 用于指定一些运行参数。
  18.   * width 如果应用开发时没有做自适应性布局,可以用 width 参数指定画布的宽度。
  19.   * height 如果应用开发时没有做自适应性布局,可以用 height 参数指定画布的高度。
  20.   * defaultFont 缺省字体。缺省为"sans"。
  21.   * fontScale 字体的缩放比例。缺省为 1。

  22. * depends 依赖自定义控件的目录(该目录下需要提供 export.json,具体描述见后面)
  23.   

  24. > config 中的参数也可以直接在 URL 中指定。如:

  25. ```
  26. http://192.168.1.117:8080/demoui/index.html?width=480&height=800&fontScale=0.8&defaultFont=serif
  27. ```

  28. 如:

  29. 用 C 语言写的 demoui 的配置文件:

  30. ```
  31.   "web": {
  32.     "app_type": "c",
  33.     "assets": "design",
  34.     "romfs": "data",
  35.     "depends":["../awtk-widget-html-view"],
  36.     "sources": [
  37.       "demos/*.c"
  38.     ],  
  39.     "config": {
  40.       "fontScale": "0.8",
  41.       "defaultFont": "sans"
  42.     }   
  43.   }
  44. ```

  45. 用 Javascript 写的 demoui 的配置文件:

  46. ```
  47. {
  48.   "name":"demouijs",
  49.   "version":"1.0",
  50.   "app_type":"js",
  51.   "assets": "design",  
  52.   "sources":["./design/default/scripts/basic.js"]
  53. }
  54. ```

  55. ## 三、android 平台选项

  56. android 平台选项放在 android 子键下面,目前支持以下选项:

  57. * app_name 应用程序的完整名称。如:org.zlgopen.demoui
  58. * cflags C 代码额外的编译参数。
  59. * cppflags C++代码额外的编译参数。
  60. * linkflags 额外的链接参数。
  61. * features 平台专用特性。目前支持:
  62.   * fullscreen 是否全屏。true 表示全屏,false 表示不全屏。

  63. 示例:

  64. ```
  65.   "android": {
  66.     "features": {
  67.       "fullscreen":true
  68.     },   
  69.     "app_name": "org.zlgopen.demoui",
  70.     "sources": [
  71.       "demos/assets.c",
  72.       "demos/demo_ui_app.c",
  73.       "demos/vg_common.inc",
  74.       "res/assets.inc",
  75.       "res/assets/__assets_default.inc"
  76.     ]
  77.   },
  78. ```

  79. ## 四、 ios 平台选项

  80. * app_name 应用程序的完整名称。如:org.zlgopen.demoui
  81. * defines 宏定义。ios 和 android 定义方式有些不同,宏定义要放到 defines 中,而不能放到 cflags 和 cppflags。格式也有些不同,如:

  82. ```
  83. "defines":" HAVE_CONFIG_H=1 BUILDING_LIBCURL=1 WITH_CURL=1 ",
  84. ```

  85. ```
  86.   "ios": {
  87.     "app_name": "org.zlgopen.demoui",
  88.     "sources": [
  89.       "demos/assets.c",
  90.       "demos/demo_ui_app.c",
  91.       "demos/vg_common.inc",
  92.       "res/assets.inc",
  93.       "res/assets/__assets_default.inc"
  94.     ]
  95.   }
  96. ```

  97. ## 五、harmonyos 平台选项

  98. harmonyos 平台选项放在 harmonyos 子键下面。

  99. * icon 图标。
  100. * title 标题,下面包含不同语言的翻译。

  101. ```  
  102.   "title": {
  103.     "en_US": "DemoUI",
  104.     "zh_CN": "控件演示"
  105.   },
  106. ```

  107. ## 六、完整示例

  108. 下面是 demoui 的完整示例

  109. ```
  110. {
  111.   "name": "demoui",
  112.   "version": "1.0",
  113.   "assets": "res/assets",
  114.   "vendor": "zlgopen",
  115.   "app_name": "org.zlgopen.demoui",
  116.   "author": "xianjimli@hotmail.com",
  117.   "copyright": "Guangzhou ZHIYUAN Electronics Co.,Ltd.",
  118.   "themes":["default", "dark"],
  119.   "sources": [
  120.      "demos/assets.c",
  121.      "demos/vg_common.inc",
  122.      "demos/demo_ui_app.c",
  123.      "res/assets.inc",
  124.      "res/assets/__assets_dark.inc",
  125.      "res/assets/__assets_default.inc"
  126.   ],
  127.   "web": {
  128.     "app_type": "c",
  129.     "assets": "design",
  130.     "config": {
  131.       "fontScale": "0.8",
  132.       "defaultFont": "sans"
  133.     }
  134.   },
  135.   "harmonyos": {
  136.     "icon": "design/default/images/xx/awtk_icon.png",
  137.     "title": {
  138.       "en_US": "DemoUI",
  139.       "zh_CN": "控件演示"
  140.     },
  141.     "sources": [
  142.     ]
  143.   },
  144.   "android": {
  145.     "sources": [
  146.     ]
  147.   },
  148.   "ios": {
  149.     "sources": [
  150.     ]
  151.   }
  152. }
  153. ```

  154. ## 七、export.json 的用法

  155. > 为了方便引用自定义控件,自定义控件(包括无界面的库)需要提供一个 export.json 的配置文件,用于声明对外提供的源文件和编译参数。

  156. * sources 源文件列表(相对于配置文件所在的目录)。文件名支持通配符如*.c。
  157.   
  158. * includes 头文件搜索路径列表(相对于配置文件所在的目录)。

  159. * cflags C 语言的编译参数。

  160. * cxxflags C++语言的编译参数。
  161.   
  162. * depends 依赖其它自定义控件的目录。

  163. 示例:

  164. ```json
  165. {
  166.   "cflags":["-DLITEHTML_UTF8=1"],
  167.   "cxxflags":[""],
  168.   "includes":[
  169.     "src",
  170.     "src/litehtml",
  171.     "src/litehtml/src",
  172.     "src/litehtml/include",
  173.     "src/litehtml/src/gumbo/include",
  174.     "src/litehtml/src/gumbo/include/gumbo",
  175.     "src/litehtml/include/litehtml"
  176.   ],  
  177.   "sources":[
  178.     "src/*.c",
  179.     "src/*.cpp",
  180.     "src/litehtml/src/*.cpp",
  181.     "src/litehtml/src/gumbo/*.c",
  182.     "src/html_view/*.cpp",
  183.     "src/html_view/*.c"
  184.   ]
  185. }
  186. ```

  187. ## 八、示例与参考

  188. * [awtk-http-client 的配置文件](https://github.com/zlgopen/awtk-http-client/blob/master/build.json)

  189. * [awtk-hello 的配置文件](https://github.com/zlgopen/awtk-hello/blob/master/build.json)

  190. * [Android/IOS 插件的配置文件](https://github.com/zlgopen/awtk-mobile-plugins/blob/master/build.json)

  191. * [awtk-web-js 的配置文件](https://github.com/zlgopen/awtk-jerryscript/blob/master/build_web.json)
复制代码


火山视窗封装视频教程
回复

使用道具 举报

294

主题

2089

帖子

8247

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8247
QQ
板凳
 楼主| 发表于 昨天 18:00 | 只看该作者
本帖最后由 沉默流星 于 2025-10-2 18:03 编辑








火山视窗封装视频教程
回复

使用道具 举报

18

主题

200

帖子

2523

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2523
地板
发表于 昨天 18:49 | 只看该作者
有没有静态库,编译出来文件体积会增大多少?如果是动态库,dll大小是多少?
回复

使用道具 举报

294

主题

2089

帖子

8247

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8247
QQ
5#
 楼主| 发表于 昨天 18:58 | 只看该作者
小小小小鸟 发表于 2025-10-2 18:49
有没有静态库,编译出来文件体积会增大多少?如果是动态库,dll大小是多少? ...

有没有静态库取决你自己编译源码,这个是开源的可以自己编译,不过不能使用cmake编译,而是使用scons

C++的开源界面库没有几个,好用的更没几个。
吴总就算封装也不好挑
火山视窗封装视频教程
回复

使用道具 举报

198

主题

1296

帖子

5288

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5288
QQ
6#
发表于 昨天 19:12 | 只看该作者
沉默流星 发表于 2025-10-2 18:58
有没有静态库取决你自己编译源码,这个是开源的可以自己编译,不过不能使用cmake编译,而是使用scons

C+ ...

这个GUI是咋授权的?收费的吧?
全国活动会议直播拍摄
回复

使用道具 举报

54

主题

960

帖子

4689

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4689
7#
发表于 昨天 19:49 | 只看该作者
这个确实看起来不错.
回复

使用道具 举报

294

主题

2089

帖子

8247

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8247
QQ
8#
 楼主| 发表于 昨天 20:29 | 只看该作者
朕的 发表于 2025-10-2 19:12
这个GUI是咋授权的?收费的吧?


社区版是免费的,专业版需要付费。
火山视窗封装视频教程
回复

使用道具 举报

31

主题

286

帖子

2052

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2052
9#
发表于 昨天 20:55 | 只看该作者
这个可以哦!刚好精益在转型,吴总封装上UI界面库能吸引数不胜数的易用户来@飞扬工作室
回复

使用道具 举报

29

主题

2528

帖子

8950

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8950
10#
发表于 昨天 22:04 | 只看该作者
这个主要是做单片机之类的嵌入式界面,不知道在桌面平台怎样,估计控件不会太多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-10-3 05:29 , Processed in 0.101438 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表