awtk踩坑记录二:移植jerryscript到awtk design项目

server/2024/10/21 23:20:09/
  • 从github下载并编译awtk, awtk-mmvm和awtk-jerryscript(如果没有)

  • 用awtk-designer新建项目,awtk和awtk-mmvm路径改为上一步github下载到的目录路径(如designer改不了,可在project.json上修改)

  • 从awtk-jerryscript复制3rd/jerryscript,awtk-jerryscript的src改名为jerryscript_src到designer项目根目录上

  • 修改designer项目根目录Sconstruct为:

import os
import scripts.app_helper as appARGUMENTS['FONT'] = 'default_full'
helper = app.Helper(ARGUMENTS);TK_JERRYSCRIPT_ROOT = os.path.join(helper.APP_ROOT, '3rd/jerryscript/')TK_JS_JERRYSCRIPT_DIRS = [TK_JERRYSCRIPT_ROOT,os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/include'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/arg'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/common'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/debugger'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/handler'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-ext/module'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/include'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/ecma'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/ecma/base'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/ecma/builtin-objects'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/ecma/operations'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/jcontext'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/jrt'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/parser'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/parser/js'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/parser/regexp'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/vm'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/api'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/debugger'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/lit'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/jmem'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/profiles'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-port/default/include'),os.path.join(TK_JERRYSCRIPT_ROOT, 'jerryscript/jerry-core/ecma/builtin-objects/typedarray'),
]APP_CPPPATH = TK_JS_JERRYSCRIPT_DIRS
APP_LIBS = ['awtk-jerryscript', 'jerryscript']
APP_CCFLAGS = '-DPATH_MAX=256 -DJERRY_ESNEXT=0 'helper.add_libs(APP_LIBS).add_ccflags(APP_CCFLAGS).add_cpppath(APP_CPPPATH).call(DefaultEnvironment)if ARGUMENTS.get('IOTJS', '') != '':SConscriptFiles = ['src/SConscript']
else:SConscriptFiles = ['3rd/jerryscript/SConscript', 'jerryscript_src/SConscript', 'jerryscript_src/SConscript.bin']CUSTOM_WIDGET_LIBS = []DEPENDS_LIBS = CUSTOM_WIDGET_LIBS + []helper = app.Helper(ARGUMENTS)
helper.set_deps(DEPENDS_LIBS)app.prepare_depends_libs(ARGUMENTS, helper, DEPENDS_LIBS)
helper.call(DefaultEnvironment)SConscriptFiles += ['src/SConscript', 'tests/SConscript']
helper.SConscript(SConscriptFiles)
  • designer项目awtk_locator.py的getAwtkSDKPath修改,使其返回自己awtk安装的所在目录
def getAwtkSDKPath():# env = os.environ# if 'AWTK_SDK_PATH' in env:#     return env['AWTK_SDK_PATH']# else:#     return ''return 'D:/Devtools/'
  • 将awtk-jerryscript目录design/default/scripts/awtk.js复制到designer项目的对应路径下,否则awtkRun可能无法加载窗口

移植awtk-jerryscript的font目录到desginer项目对应路径下合并原font目录,否则awtkRun打开js文件将无法显示文字。

完成以上两步后一定要更新资源:

  python ./scripts/update_res.py all
  • 新建build_js.json,用于以后在awtk-web的部署,注意json中sources写明js源文件路径design/default/script/*.js,以后所有的js页面都要存放到该路径下,例:

    build_js.json

    {"name": "AwtkApplication3","version": "1.0","assets": "res/assets","author": "AWTK Develop Team","copyright": "Guangzhou ZHIYUAN Electronics Co.,Ltd.","themes":["default"],"web": {"app_type": "js","assets": "design","sources": ["design/default/script/*.js"],"config": {"fontScale": "0.8","defaultFont": "sans"}}
    }
  • 如果你是vscode用户,复制awtk-web/api的awtk_api.d.ts到src/js下,以后每次写页面逻辑(例:home_page.js)就将其import引用,这样就能使用vscode的函数提示和补全功能,只不过用awtkRun运行js文件时就得把该import去掉, 否则编译将报错,以下是一个示例的home_page.js

    // import { TEventType, TWindow } from "./awtk_api"function application_init() {var win = TWindow.open("home_page");win.lookup("button", true).on(TEventType.CLICK, function(evt){win.lookup("label").setText("A clicked");});win.lookup("button1", true).on(TEventType.CLICK, function(evt){win.lookup("label").setText("B clicked");});win.lookup("button2", true).on(TEventType.CLICK, function(evt){win.lookup("label").setText("C clicked");});}application_init()

    每次修改页面的js文件后,需要重新生成资源:

    python ./scripts/update_res.py all
    

问题:

  • 限于使用的awtk原因不能加载插件,如果用awtkStudio自带的awtk sdk, 则加载c转jerryscript部分的代码又会报错
  • 每个js文件在用awtkRun编译时都得手动把顶部的import去除,比较麻烦

【】

桌面编译(需根据实际安装路径修改)

cd /path/to/AwtkApplication3
scons
python ./scripts/update_res.py all
./bin/awtkRun.exe src/js/home_page.js

web编译:

桌面编译(需根据实际安装路径修改)

cd d:/devtools/emsdk
./emsdk_env
cd ../awtk-web
python build.py ..\..\AWStudioProjects\Workspace\AwtkApplication3\build_js.json all
python -m http.server 8080 --directory webroot

【】


http://www.ppmy.cn/server/47336.html

相关文章

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

前端基础1-6 :es6

点击跳转,详细查看es6 const常量 const LIMIT 10; const OBJ_MAP {a: A,A: a }1. 不允许重复声明赋值 var arg1 aarg1 aa// 常量 - ES5Object.defineProperty(window, arg2, {value: aaa,writable: false})// ES6const arg2 aaa2. 块级作用域 if (true) {con…

Github生成SSH密钥,使用SSH进行连接

目录 一、生成新的SSH密钥 二、添加新的SSH密钥 三、测试SSH连接 四、SSH密钥密码 五、创建新仓库并推送到github 说明 使用 SSH URL 将 git clone、git fetch、git pull 或 git push 执行到远程存储库时, 须在计算机上生成 SSH 密钥对,并将公钥添加到…

c# - - - winform 右下角气球提示通知

c# - - - winform 右下角气球提示通知 winform 右下角气球提示通知 1.1 winform 右下角气球提示通知 在工具箱中点击 NotifyIcon 控件,拖动到 Form1 窗体上添加这个控件。 在“提示”按钮的点击事件中写气球提示通知内容。 public partial class Form1 : Form {…

【pytorch】数据转换/增强后保存

数据转换 from PIL import Image from pathlib import Path import matplotlib.pyplot as plt import numpy as npimport torch import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = tight # orig_im

攻防世界maze做法(迷宫题)

首先查壳64bit,直接丢进ida64中进行反编译就完事儿了,然后直接进入main函数打注释分析首先,题目已经提示了这是个迷宫题,我们抓住做迷宫题的两个要点,一找玩法,二找地图, 玩法在主函数中&#…

初识C++ · 模拟实现stack和Queue

目录 前言: 1 Stack 1.1 双端队列 2 Queue 前言: 经历了list三个自定义类型的洗礼,来个简单的放松放松,即栈和队列: 文档记录的,栈和队列是一种容器适配器,它们不属于stl,但是它…

k8s_设置dns

配置k8s dns 在 Kubernetes 集群中,CoreDNS 是默认的 DNS 服务器,它负责处理集群内所有的 DNS 请求。 kubectl edit cm coredns -n kube-system (此命令修改coredns 配置) kubectl describe cm coredns -n kube-system(此命令查看coredns 配置) 出现类似以下结果 apiVers…