JavaScript脚本预编译成字节码

简介: 本文主要介绍JavaScript脚本预编译成字节码的方法,适用于加密脚本代码

打包加密架构

image.png

使用环境

  • 支持quickjs引擎固件
  • 不支持duktape引擎固件

使用方式

基于命令行工具来进行加密。

命令行API

pack - 打包应用

命令参数

amp pack <app-dir> -m <mode> -e <encode>

说明

将应用打包成app.bin。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译,duktape不支持编译

该命令执行后,生成的app.bin文件存放于执行目录。

命令示例

$ amp pack ./app /dev/tty.usb* -m quickjs -e 1


put - 在线热更新

命令参数

amp put <app-dir> <device-name> -m <mode> -e <encode>

说明

远程推送轻应用到设备。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译

命令示例

$ amp put ./app 8675*******3456 /dev/tty.usb* -m quickjs -e 1

serialput - 本地热更新

命令参数

amp serialput <app-dir> <port> -m <mode> -e <encode> -b <baudrate>

说明

通过串口推送轻应用到设备(本地更新)。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译
  • baudrate:波特率,默认115200

命令示例

$ amp serialput ./app /dev/tty.usb* -m quickjs -e 1

实际效果

原始代码

// 以控制led灯代码为例
// app.js
import * as gpio from 'gpio';
let led3 = gpio.open({
  id: 'LED3',
  success: function() {
    console.log('gpio: open led success')
  },
  fail: function() {
    console.log('gpio: open led failed')
  }
});
let val = 0;
// 设置gpio亮灭,间隔一秒
setInterval(function() {
  val = 1 - val;
  led3.writeValue(val);
  console.log('led set value :', val);
}, 1000);
// app.json
{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}


未加密代码

// app.bin
� ��
u6���+"��app.json{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}�Y�Q���-�Б%Aapp.jsimport * as gpio from 'gpio'; // app.js
var led3 = gpio.open({
  id: 'LED3',
  success: function success() {
    console.log('gpio: open led success');
  },
  fail: function fail() {
    console.log('gpio: open led failed');
  }
});
var val = 0; // 设置gpio亮灭,间隔一秒
setInterval(function () {
  val = 1 - val;
  led3.writeValue(val);
  console.log('led set value :', val);
}, 1000);



加密代码

// app.bin
� ��
u6���+"��app.json{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}��_$��"Ss�N�K�{�app.jsbapp.jsgpioled3valopenLED3idsuccessfailsetIntervalconsolelog,gpio: open led success*gpio: open led failedwriteValueled set value :����3�
��eB��L��L��L�$��8�����)�
07(&C�8�B��$)�]C�8�B��$)�]C#���ܟ��B��$8�B���$)�:b


相关文章
|
6月前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
|
6月前
|
JavaScript 前端开发 Java
liteflow规则引擎 执行Javascript脚本
liteflow规则引擎 执行Javascript脚本
171 1
|
6月前
|
移动开发 JavaScript 数据可视化
分享88个JS播放器脚本,总有一款适合您
分享88个JS播放器脚本,总有一款适合您
124 0
|
6月前
|
移动开发 JavaScript 前端开发
分享95个JS表单脚本,总有一款适合您
分享95个JS表单脚本,总有一款适合您
57 0
|
6月前
|
移动开发 JavaScript 前端开发
分享106个JS表单脚本,总有一款适合您
分享106个JS表单脚本,总有一款适合您
46 0
|
6月前
|
移动开发 JavaScript 前端开发
分享98个JS表单脚本,总有一款适合您
分享98个JS表单脚本,总有一款适合您
64 0
|
6月前
|
JavaScript 前端开发 Unix
Node.js Shell 脚本开发指南(中)
Node.js Shell 脚本开发指南(中)
128 0
|
6月前
|
JavaScript 前端开发 Shell
Node.js Shell 脚本开发指南(上)
Node.js Shell 脚本开发指南(上)
162 0
|
6月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
236 0
|
6月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
76 0
下一篇
无影云桌面