当前位置: 首页 > news >正文

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

工作要求,想尝试看看在awtk-designer设计界面的同时能不能用javascript开发逻辑层,以此和前端技术联动,本文是一种项目建构的思路。

  • 从github下载并编译awtk, awtk-mmvm和awtk-jerryscript(如果没有)

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

  • 从awtk-jerryscript复制3rd/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
  • 在designer项目src下新建js文件夹,以后页面逻辑有关的所有js文件就存放于此,并新建build_js.json,用于以后在awtk-web的部署,注意json中sources写明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": ["src/js/*.js"],"config": {"fontScale": "0.8","defaultFont": "sans"}}
    }

也可根据自己需要改成其他路径,build_js.json的sources改下。

问题:

  • 限于使用的awtk原因不能加载插件,如果用awtkStudio自带的awtk sdk, 则加载c转jerryscript部分的代码又会报错
http://www.lryc.cn/news/357906.html

相关文章:

  • 正邦科技(day2)
  • 技术架构设计指南:从需求到实现
  • 【数据结构:排序算法】堆排序(图文详解)
  • git 派生仓库怎么同步主仓库的新分支
  • 对比方案:5款知识中台工具的优缺点详解
  • 第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计
  • 创新案例 | 持续增长,好孩子集团的全球化品牌矩阵战略与客户中心设计哲学
  • ResNet 原理剖析以及代码复现
  • 数据结构(十)图
  • 四数之和-力扣
  • JS 中怎么删除数组元素?有哪几种方法?
  • Git如何将pre-commit也提交到仓库
  • vmware中Ubuntu虚拟机和本地电脑Win10互相ping通
  • 比较含退格的字符串-力扣
  • NSSCTF-Web题目4
  • 7. CSS 网格布局
  • 如何配置才能连接远程服务器上的 redis server ?
  • MindSpore实践图神经网络之环境篇
  • MVS net笔记和理解
  • Linux 编译屏障之 ACCESS_ONCE()
  • Discuz!X3.4论坛网站公安备案号怎样放到网站底部?
  • LPDDR6带宽预计将翻倍增长:应对低功耗挑战与AI时代能源需求激增
  • 云原生架构内涵_3.主要架构模式
  • 宏基因组分析流程(Metagenomic workflow)202405|持续更新
  • 一千题,No.0037(组个最小数)
  • PV PVC
  • 深入理解Nginx配置文件:全面指南
  • 【传知代码】自监督高效图像去噪(论文复现)
  • linnux上安装php zip(ZipArchive)、libzip扩展
  • 油封制品中各种橡胶材料的差异