转自HaaS技术社区
本文主要介绍JavaScript脚本预编译成字节码的方法,适用于加密脚本代码,保护知识产权。
打包加密架构
使用环境
- 支持quickjs引擎固件
- 不支持duktape引擎固件
使用方式
基于命令行工具来进行加密。
命令行API
pack - 打包应用
命令参数
amp pack -m -e
说明
将应用打包成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 -m -e
说明
远程推送轻应用到设备。
- mode:模式,可选项 [quickjs | duktape],默认duktape
- encode:编译,可选项 [0 | 1],默认0不编译
命令示例
$ amp put ./app 86753456 /dev/tty.usb -m quickjs -e 1
serialput - 本地热更新
命令参数
amp serialput -m -e -b
说明
通过串口推送轻应用到设备(本地更新)。
- 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.jsbapp.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