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.mzph.cn/web/18979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux搭建PHP下的RabbitMQ环境(php-amqp/rabbitmq-c/erlang)

本文演示环境 Red Hat 11.2.1-9gcc (GCC) 11.2.1 20220127OpenSSL v1.1.0PHP 7.1 安装erlang erlang和RabbitMQ有版本对应关系Erlang Version Requirements,需要选择正确的版本。 本文以erlang 26和RabbitMQ 3.13.2为例。 erlang下载地址 下载包上传服务器后&a…

从System Prompt来看Claude3、Kimi和ChatGLM4之间的差距

大家好,我是herosunly。985院校硕士毕业,现担任算法t研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算…

虚函数的性能消耗到底在哪?

虚函数的性能消耗 聊到虚函数的性能开销,大家的第一反应肯定是间接调用上,何为间接调用? 当调用一个虚函数时,实际执行的函数版本是在运行时通过虚函数表(virtualtable)查找确定的。这个查找过程是一个间接…

【介绍下运维开发】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

6.10 Libbpf-bootstrap(一,简介)

写在前面 在看完前面的介绍,是不是感觉看了也就看了。但是,如果想要像BCC那样使用libbpf编写BPF程序,该怎么开始呢? 那么这就需要libbpf-bootstrap了。 libbpf-bootstrap是官方推荐的一个范式,就像我们写PPT的模版。简单来说可以简化我们的BPF开发流程,它可以帮助我们…

每日复盘-20240529

20240529 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------301361--------- 众智科技 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------300637--------- 扬帆新材 二日涨幅最大: ------1--------30…

el-pagination在删除非第一页的最后一条数据遇到的问题

文章目录 前言一、问题展示二、解决方案三、源码解析1、elementui2、elementplus 总结 前言 这个问题是element-ui中的问题,可以从源码中看出来,虽然页码更新了,active也是对的,但是未调用current-change的方法,这里就…

爬虫案例(读书网)

一.我们还是使用简单的bs4库和lxml,使用xpath: 导入下面的库: import requests from bs4 import BeautifulSoup from lxml import etree 我们可以看见它的div和每个书的div框架,这样会观察会快速提高我们的简单爬取能力。 二.实…

探索AIGC的前沿:人工智能生成内容的现状与未来

探索AIGC的前沿:人工智能生成内容的现状与未来 近年来,人工智能生成内容(AI-generated content, AIGC)技术的发展突飞猛进,已经在多个领域展现出了其巨大的潜力。从文本到图像,再到音频和视频,…

Element-UI 入门指南:从安装到自定义主题的详细教程

Element-UI 是一个基于 Vue.js 的前端组件库,它提供了丰富的 UI 组件,可以帮助开发者快速构建高质量的用户界面。以下是使用 Element-UI 的快速入门指南: 安装 Element-UI Element-UI 是一个基于 Vue.js 的组件库,它提供了丰富的…

原神抽卡点名程序教程(直接下载用)

今天我要给大家分享一个在抖音上特别火的视频——原神抽卡点名程序教程。 (要源码的私信扣31) 废话不多说,直接上效果图 : 步骤1: 步骤2:(写名单,前面加数字代表星级,用…

JAVA类与方法·易错题分析

分析一下作业中关于类与方法写错或者易错的题。 N o . 1 No.1 No.1 下面程序的执行结果是______。 public class Test7 {public static void main(String[] args){new B().display();} } class A{public void draw() {System.out.print("Draw A.");}public void di…

python -【五】数据容器

数据容器 一、列表 列表的循环 name_list [张三, 李四, 王五] print(f类型是&#xff1a;{type(name_list)})# while 遍历列表 count 0 while count < len(name_list):print(fwhile 下标为[{count}] 的内容是[{name_list[count]}])count 1# for 循环 for name in name…

用户接入和认证技术

一、用户接入和认证配置 称为网络接入控制&#xff0c;通过对接入网络的客NAC (Network Admission Control)户端和用户的认证保证网络的安全&#xff0c;是一种“端到端”的安全技术。包括802.1x认证、MAC认证与Portal认证。 二、三种认证方式简介 1、Portal认证 Portal认证通…

Hadoop3:MapReduce之简介、WordCount案例源码阅读、简单功能开发

一、概念 MapReduce是一个 分布式运算程序 的编程框架&#xff0c;是用户开发“基于 Hadoop的数据分析 应用”的核心框架。 MapReduce核心功能是将 用户编写的业务逻辑代码 和 自带默认组件 整合成一个完整的 分布式运算程序 &#xff0c;并发运行在一个 Hadoop集群上。 1、M…

2.1色彩空间

色彩发送器 色彩认知 光源是出生点&#xff0c;光源发射出光线&#xff0c;光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后&#xff0c;人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑&#xff0c;最终大脑对颜色产生了认知感知。 光的要素 光…

【数据结构】探索树中的奇妙世界

专栏介绍&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累…

C#多线程同步lock、Mutex

C#使用多线程可以通过System.Threading命名空间下的Thread类来实现 lock和Mutex用于实现线程同步的机制&#xff1a; 上代码&#xff1a; class People{public People(int idd){id idd;}public int id;public int age;}class TestHelper{public TestHelper() { }List<Peo…

代码随想录二刷 Day05 | 242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和,454.四数相加II,383. 赎金信

题目与题解 参考资料&#xff1a;哈希表理论基础 Tips&#xff1a; 一般哈希表都是用来快速判断一个元素是否出现集合里哈希表生成原理&#xff1a;先通过哈希函数将变量映射为hashcode&#xff0c;如果二者hashcode相同&#xff0c;再通过哈希碰撞方法&#xff08;拉链法&…

四川汇聚荣聚荣科技有限公司是正规的吗?

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;越来越多的科技公司如雨后春笋般涌现。然而&#xff0c;在这个信息爆炸的时代&#xff0c;如何判断一家公司是否正规成为了许多人关注的焦点。本文将围绕“四川汇聚荣聚荣科技有限公司是否正规”这一问题展开讨论&#xf…