沉默流星 发表于 2025-10-2 13:36:38

AWTK 界面库如何封装

官网如下:


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

沉默流星 发表于 2025-10-2 13:51:06

# 特殊平台编译配置

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

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

## 一、通用选项

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

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

## 二、web 平台选项

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

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

* romfs(可选) 用于指定配置文件的目录,编译脚本将该目录打包成 romfs,在 AWTK-WEB 中可以通过 os_fs 访问。

* config 用于指定一些运行参数。
* width 如果应用开发时没有做自适应性布局,可以用 width 参数指定画布的宽度。
* height 如果应用开发时没有做自适应性布局,可以用 height 参数指定画布的高度。
* defaultFont 缺省字体。缺省为"sans"。
* fontScale 字体的缩放比例。缺省为 1。

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


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

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

如:

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

```
"web": {
    "app_type": "c",
    "assets": "design",
    "romfs": "data",
    "depends":["../awtk-widget-html-view"],
    "sources": [
      "demos/*.c"
    ],
    "config": {
      "fontScale": "0.8",
      "defaultFont": "sans"
    }   
}
```

用 Javascript 写的 demoui 的配置文件:

```
{
"name":"demouijs",
"version":"1.0",
"app_type":"js",
"assets": "design",
"sources":["./design/default/scripts/basic.js"]
}
```

## 三、android 平台选项

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

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

示例:

```
"android": {
    "features": {
      "fullscreen":true
    },   
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
},
```

## 四、 ios 平台选项

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

```
"defines":" HAVE_CONFIG_H=1 BUILDING_LIBCURL=1 WITH_CURL=1 ",
```

```
"ios": {
    "app_name": "org.zlgopen.demoui",
    "sources": [
      "demos/assets.c",
      "demos/demo_ui_app.c",
      "demos/vg_common.inc",
      "res/assets.inc",
      "res/assets/__assets_default.inc"
    ]
}
```

## 五、harmonyos 平台选项

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

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

```
"title": {
    "en_US": "DemoUI",
    "zh_CN": "控件演示"
},
```

## 六、完整示例

下面是 demoui 的完整示例

```
{
"name": "demoui",
"version": "1.0",
"assets": "res/assets",
"vendor": "zlgopen",
"app_name": "org.zlgopen.demoui",
"author": "xianjimli@hotmail.com",
"copyright": "Guangzhou ZHIYUAN Electronics Co.,Ltd.",
"themes":["default", "dark"],
"sources": [
   "demos/assets.c",
   "demos/vg_common.inc",
   "demos/demo_ui_app.c",
   "res/assets.inc",
   "res/assets/__assets_dark.inc",
   "res/assets/__assets_default.inc"
],
"web": {
    "app_type": "c",
    "assets": "design",
    "config": {
      "fontScale": "0.8",
      "defaultFont": "sans"
    }
},
"harmonyos": {
    "icon": "design/default/images/xx/awtk_icon.png",
    "title": {
      "en_US": "DemoUI",
      "zh_CN": "控件演示"
    },
    "sources": [
    ]
},
"android": {
    "sources": [
    ]
},
"ios": {
    "sources": [
    ]
}
}
```

## 七、export.json 的用法

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

* sources 源文件列表(相对于配置文件所在的目录)。文件名支持通配符如*.c。

* includes 头文件搜索路径列表(相对于配置文件所在的目录)。

* cflags C 语言的编译参数。

* cxxflags C++语言的编译参数。

* depends 依赖其它自定义控件的目录。

示例:

```json
{
"cflags":["-DLITEHTML_UTF8=1"],
"cxxflags":[""],
"includes":[
    "src",
    "src/litehtml",
    "src/litehtml/src",
    "src/litehtml/include",
    "src/litehtml/src/gumbo/include",
    "src/litehtml/src/gumbo/include/gumbo",
    "src/litehtml/include/litehtml"
],
"sources":[
    "src/*.c",
    "src/*.cpp",
    "src/litehtml/src/*.cpp",
    "src/litehtml/src/gumbo/*.c",
    "src/html_view/*.cpp",
    "src/html_view/*.c"
]
}
```

## 八、示例与参考

* (https://github.com/zlgopen/awtk-http-client/blob/master/build.json)

* (https://github.com/zlgopen/awtk-hello/blob/master/build.json)

* (https://github.com/zlgopen/awtk-mobile-plugins/blob/master/build.json)

* (https://github.com/zlgopen/awtk-jerryscript/blob/master/build_web.json)


沉默流星 发表于 2025-10-2 18:00:53

本帖最后由 沉默流星 于 2025-10-2 18:03 编辑








小小小小鸟 发表于 2025-10-2 18:49:03

有没有静态库,编译出来文件体积会增大多少?如果是动态库,dll大小是多少?

沉默流星 发表于 2025-10-2 18:58:21

小小小小鸟 发表于 2025-10-2 18:49
有没有静态库,编译出来文件体积会增大多少?如果是动态库,dll大小是多少? ...

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

C++的开源界面库没有几个,好用的更没几个。
吴总就算封装也不好挑

朕的 发表于 2025-10-2 19:12:20

沉默流星 发表于 2025-10-2 18:58
有没有静态库取决你自己编译源码,这个是开源的可以自己编译,不过不能使用cmake编译,而是使用scons

C+ ...

这个GUI是咋授权的?收费的吧?

67564226 发表于 2025-10-2 19:49:27

这个确实看起来不错.

沉默流星 发表于 2025-10-2 20:29:09

朕的 发表于 2025-10-2 19:12
这个GUI是咋授权的?收费的吧?


社区版是免费的,专业版需要付费。

adm 发表于 2025-10-2 20:55:46

这个可以哦!刚好精益在转型,吴总封装上UI界面库能吸引数不胜数的易用户来@飞扬工作室

Xelloss0618 发表于 2025-10-2 22:04:09

这个主要是做单片机之类的嵌入式界面,不知道在桌面平台怎样,估计控件不会太多
页: [1] 2
查看完整版本: AWTK 界面库如何封装