aiot-toolkit 2.0.2-dev.8 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bin.js +43 -46
- package/lib/builder/AndroidUxBuilder.d.ts +10 -0
- package/lib/builder/AndroidUxBuilder.js +20 -0
- package/lib/builder/UxBuilderBase.d.ts +36 -0
- package/lib/builder/UxBuilderBase.js +105 -0
- package/lib/builder/VelaUxBuilder.d.ts +23 -0
- package/lib/builder/VelaUxBuilder.js +66 -0
- package/lib/builder/XtsBuilder.js +14 -17
- package/lib/interface/VelaEmulatorInterface.d.ts +7 -6
- package/lib/starter/AndroidUxStart.d.ts +40 -0
- package/lib/starter/AndroidUxStart.js +171 -0
- package/lib/starter/IStarter.d.ts +2 -1
- package/lib/starter/IStarter.js +5 -1
- package/lib/starter/VelaUxStarter.d.ts +23 -0
- package/lib/starter/VelaUxStarter.js +198 -0
- package/lib/starter/XtsStarter.d.ts +2 -2
- package/lib/starter/androidRouter/LinkMode.d.ts +9 -0
- package/lib/starter/androidRouter/LinkMode.js +12 -0
- package/lib/starter/androidRouter/PackageRouter.d.ts +55 -0
- package/lib/starter/androidRouter/PackageRouter.js +152 -0
- package/lib/starter/androidRouter/h5/index.css +167 -0
- package/lib/starter/androidRouter/h5/index.html +58 -0
- package/lib/starter/androidRouter/h5/index.js +66 -0
- package/lib/utils/AdbUtils.d.ts +0 -1
- package/lib/utils/AdbUtils.js +3 -14
- package/lib/utils/DeviceUtil.js +42 -29
- package/lib/utils/RequestUtils.js +5 -5
- package/lib/utils/VelaAvdUtils.d.ts +25 -9
- package/lib/utils/VelaAvdUtils.js +262 -100
- package/package.json +20 -12
- package/lib/builder/UxBuilder.d.ts +0 -27
- package/lib/builder/UxBuilder.js +0 -128
- package/lib/starter/UxStarter.d.ts +0 -10
- package/lib/starter/UxStarter.js +0 -139
- package/lib/utils/UxBuilderUtils.d.ts +0 -8
- package/lib/utils/UxBuilderUtils.js +0 -51
|
@@ -13,17 +13,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const emulator_1 = require("@aiot-toolkit/emulator");
|
|
16
|
-
const
|
|
17
|
-
const utils_1 = require("@aiot-toolkit/emulator/lib/utils");
|
|
18
|
-
const ColorConsole_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/ColorConsole"));
|
|
16
|
+
const shared_utils_1 = require("@aiot-toolkit/shared-utils");
|
|
19
17
|
const prompts_1 = require("@inquirer/prompts");
|
|
20
18
|
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
21
19
|
const axios_1 = __importDefault(require("axios"));
|
|
22
20
|
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
21
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
23
22
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
24
23
|
const os_1 = __importDefault(require("os"));
|
|
25
24
|
const path_1 = __importDefault(require("path"));
|
|
26
25
|
class VelaAvdUtils {
|
|
26
|
+
/** 校验AVD名称 */
|
|
27
27
|
static validateAvdName(avdName) {
|
|
28
28
|
if (!avdName) {
|
|
29
29
|
return `Please enter avd name`;
|
|
@@ -69,7 +69,7 @@ class VelaAvdUtils {
|
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
catch (e) {
|
|
72
|
-
|
|
72
|
+
shared_utils_1.ColorConsole.throw(`Download ${filename} failed`);
|
|
73
73
|
reject();
|
|
74
74
|
}
|
|
75
75
|
}));
|
|
@@ -104,61 +104,129 @@ class VelaAvdUtils {
|
|
|
104
104
|
/** 根据host获取模拟器下载地址 */
|
|
105
105
|
static getEmulatorUrl(version = '0.0.1') {
|
|
106
106
|
const systemOs = os_1.default.platform();
|
|
107
|
-
const hostArch = (0,
|
|
107
|
+
const hostArch = (0, emulator_1.getSystemArch)();
|
|
108
108
|
let hostOs = systemOs === 'win32' ? 'windows' : systemOs;
|
|
109
109
|
return `${VelaAvdUtils.emulatorBaseUrl}/v${version}/${hostOs}-${hostArch}.zip`;
|
|
110
110
|
}
|
|
111
|
-
/**
|
|
111
|
+
/** 获取模拟器平台的名称,darwin-aarch64 linux-aarch64 windows-x86_64等 */
|
|
112
|
+
static getEmulatorPlatform() {
|
|
113
|
+
const systemOs = os_1.default.platform();
|
|
114
|
+
const hostArch = (0, emulator_1.getSystemArch)();
|
|
115
|
+
const hostOs = systemOs === 'win32' ? 'windows' : systemOs;
|
|
116
|
+
return `${hostOs}-${hostArch}`;
|
|
117
|
+
}
|
|
118
|
+
/** 获取各项模拟器资源的根目录 */
|
|
119
|
+
static getEmulatorEnvHome(resourceName) {
|
|
120
|
+
return path_1.default.resolve(VelaAvdUtils.sdkHome, resourceName);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Vela镜像需要更新
|
|
124
|
+
* @param imageId 镜像id
|
|
125
|
+
* @returns {boolean}
|
|
126
|
+
*/
|
|
127
|
+
static velaImageNeedUpdate(imageId) {
|
|
128
|
+
// 兼容之前的version.json
|
|
129
|
+
if (typeof imageId !== 'string' || !imageId)
|
|
130
|
+
return true;
|
|
131
|
+
let avdImagePath = path_1.default.resolve(VelaAvdUtils.sdkHome, 'system-images', imageId, 'nuttx');
|
|
132
|
+
if (!fs_extra_1.default.existsSync(avdImagePath)) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
if (VelaAvdUtils.isZipInImageUrl(imageId)) {
|
|
136
|
+
const stats = fs_extra_1.default.statSync(avdImagePath);
|
|
137
|
+
const version = emulator_1.VelaImageVersionList.find((item) => item.value === imageId);
|
|
138
|
+
if (version && (0, dayjs_1.default)(version.time).isAfter(stats.mtime, 'day'))
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Vela镜像是否为zip包(是否为0.0.2版本)
|
|
145
|
+
* 只有Vela开发版(dev, 0.0.2)这个版本的镜像不是zip包
|
|
146
|
+
* @param velaImage
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
static isZipInImageUrl(velaImage) {
|
|
150
|
+
return velaImage.indexOf('0.0.2') < 0;
|
|
151
|
+
}
|
|
152
|
+
/** 获取vela镜像的下载地址 */
|
|
112
153
|
static getSystemImageUrl(version = 'vela-release-4.0') {
|
|
113
|
-
if (
|
|
114
|
-
|
|
154
|
+
if (VelaAvdUtils.isZipInImageUrl(version)) {
|
|
155
|
+
const velaImage = emulator_1.VelaImageVersionList.find((item) => item.value === version);
|
|
156
|
+
const dayOfTime = (0, dayjs_1.default)(velaImage === null || velaImage === void 0 ? void 0 : velaImage.time).format('YYYYMMDD');
|
|
157
|
+
return `${VelaAvdUtils.systemImageBaseUrl}/${version}/${dayOfTime}/${version}.zip`;
|
|
115
158
|
}
|
|
116
159
|
return `${VelaAvdUtils.systemImageBaseUrl}/${version}/nuttx`;
|
|
117
160
|
}
|
|
161
|
+
/** 获取模拟器其他资源的下载地址 */
|
|
162
|
+
static getDownloadUrl(dir, version = '0.0.1', filename = dir) {
|
|
163
|
+
return `${VelaAvdUtils.baseUrl}/${dir}/v${version}/${filename}.zip`;
|
|
164
|
+
}
|
|
118
165
|
/** 根据host获取ya-vm-file-server下载地址 */
|
|
119
166
|
static getv9fsToolUrl(version = '0.0.1') {
|
|
120
167
|
const systemOs = os_1.default.platform();
|
|
121
|
-
const arch = (0,
|
|
168
|
+
const arch = (0, emulator_1.getSystemArch)();
|
|
122
169
|
let v9fsTool = '';
|
|
123
170
|
switch (systemOs) {
|
|
124
171
|
case 'linux':
|
|
125
|
-
v9fsTool =
|
|
172
|
+
v9fsTool = 'ya-vm-file-server-linux-x86_64';
|
|
126
173
|
break;
|
|
127
174
|
case 'win32':
|
|
128
175
|
v9fsTool = 'ya-vm-file-server-windows.exe';
|
|
129
176
|
break;
|
|
130
177
|
case 'darwin':
|
|
131
178
|
v9fsTool = `ya-vm-file-server-darwin-${arch}`;
|
|
179
|
+
break;
|
|
132
180
|
default:
|
|
133
181
|
break;
|
|
134
182
|
}
|
|
135
183
|
return `${VelaAvdUtils.baseUrl}/tools/v${version}/${v9fsTool}`;
|
|
136
184
|
}
|
|
137
|
-
/**
|
|
138
|
-
static
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
185
|
+
/** 获取镜像构建时间 */
|
|
186
|
+
static getImageBuildTime(imageId) {
|
|
187
|
+
var _a;
|
|
188
|
+
if (!imageId)
|
|
189
|
+
return;
|
|
190
|
+
const imagePath = path_1.default.resolve(VelaAvdUtils.sdkHome, 'system-images', imageId, 'nuttx');
|
|
191
|
+
if (fs_extra_1.default.existsSync(imagePath)) {
|
|
192
|
+
if (VelaAvdUtils.isZipInImageUrl(imageId)) {
|
|
193
|
+
const stats = fs_extra_1.default.statSync(imagePath);
|
|
194
|
+
return stats.mtime;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const time = (_a = emulator_1.VelaImageVersionList.find((item) => item.value === imageId)) === null || _a === void 0 ? void 0 : _a.time;
|
|
198
|
+
return time;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
148
202
|
}
|
|
149
203
|
/**
|
|
150
204
|
* 命令行访问方式创建模拟器
|
|
151
205
|
*/
|
|
152
206
|
static createVelaAvdByInquire() {
|
|
153
207
|
return __awaiter(this, void 0, void 0, function* () {
|
|
208
|
+
const versionFile = path_1.default.resolve(VelaAvdUtils.sdkHome, 'versions.json');
|
|
209
|
+
const versionFileExist = fs_extra_1.default.existsSync(versionFile);
|
|
210
|
+
let currVersionInfo = {
|
|
211
|
+
name: '模拟器资源版本管理',
|
|
212
|
+
emulator: '',
|
|
213
|
+
qa: '',
|
|
214
|
+
skins: '',
|
|
215
|
+
'system-images': '',
|
|
216
|
+
tools: '',
|
|
217
|
+
modem_simulator: ''
|
|
218
|
+
};
|
|
219
|
+
if (versionFileExist) {
|
|
220
|
+
currVersionInfo = fs_extra_1.default.readJSONSync(versionFile);
|
|
221
|
+
}
|
|
222
|
+
const onlineVersionInfo = emulator_1.EmulatorEnvVersion;
|
|
223
|
+
// 模拟器各项资源(除了镜像)是否存在
|
|
224
|
+
const emulatorExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'emulator', VelaAvdUtils.getEmulatorPlatform()));
|
|
225
|
+
const qaExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'qa/font'));
|
|
226
|
+
const skinsExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'skins'));
|
|
227
|
+
const toolsExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'tools'));
|
|
228
|
+
const modemSimulatorExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'modem_simulator/modem_nvram.json'));
|
|
154
229
|
try {
|
|
155
|
-
const versionFile = path_1.default.resolve(VelaAvdUtils.sdkHome, 'versions.json');
|
|
156
|
-
const versionFileExist = fs_extra_1.default.existsSync(versionFile);
|
|
157
|
-
let versionInfo = undefined;
|
|
158
|
-
if (versionFileExist) {
|
|
159
|
-
versionInfo = fs_extra_1.default.readJSONSync(versionFile);
|
|
160
|
-
}
|
|
161
|
-
const onlineVersionInfo = constants_1.emulatorEnvVersion;
|
|
162
230
|
// avdName
|
|
163
231
|
const avdName = yield (0, prompts_1.input)({
|
|
164
232
|
message: 'avd name starting with Vela. (eg. Vela_Virtual_Device)',
|
|
@@ -167,105 +235,199 @@ class VelaAvdUtils {
|
|
|
167
235
|
return VelaAvdUtils.validateAvdName(value);
|
|
168
236
|
}
|
|
169
237
|
});
|
|
170
|
-
//
|
|
171
|
-
const
|
|
172
|
-
message: '
|
|
173
|
-
|
|
238
|
+
// 镜像
|
|
239
|
+
const velaImage = yield (0, prompts_1.select)({
|
|
240
|
+
message: 'vela image.',
|
|
241
|
+
choices: emulator_1.VelaImageVersionList.map((item) => {
|
|
242
|
+
return { value: item.value, name: item.label };
|
|
243
|
+
})
|
|
174
244
|
});
|
|
175
|
-
|
|
176
|
-
const skinExists = fs_extra_1.default.existsSync(skinDir);
|
|
245
|
+
// skin或者size
|
|
177
246
|
let avdSkin = '';
|
|
178
|
-
let avdWidth = '';
|
|
179
|
-
let avdHeight = '';
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
const skinList = VelaAvdUtils.velaAvdCls.getVelaSkinList();
|
|
187
|
-
avdSkin = yield (0, prompts_1.select)({
|
|
188
|
-
message: 'avd skin.',
|
|
189
|
-
choices: skinList.map((item) => {
|
|
190
|
-
return {
|
|
191
|
-
name: item,
|
|
192
|
-
value: item,
|
|
193
|
-
description: item
|
|
194
|
-
};
|
|
195
|
-
})
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
avdWidth = yield (0, prompts_1.input)({
|
|
200
|
-
message: 'avd width.',
|
|
201
|
-
default: '480'
|
|
202
|
-
});
|
|
203
|
-
avdHeight = yield (0, prompts_1.input)({
|
|
204
|
-
message: 'avd height.',
|
|
205
|
-
default: '480'
|
|
247
|
+
let avdWidth = '466';
|
|
248
|
+
let avdHeight = '466';
|
|
249
|
+
// vela4.0不允许自定义分辨率
|
|
250
|
+
if (velaImage.indexOf('vela-release') < 0) {
|
|
251
|
+
const needSkin = yield (0, prompts_1.confirm)({
|
|
252
|
+
message: 'need avd skin?',
|
|
253
|
+
default: true
|
|
206
254
|
});
|
|
255
|
+
if (needSkin) {
|
|
256
|
+
if (!skinsExist || (currVersionInfo && currVersionInfo.skins < onlineVersionInfo.skins)) {
|
|
257
|
+
const skinsUrl = VelaAvdUtils.getDownloadUrl('skins', onlineVersionInfo.skins);
|
|
258
|
+
yield VelaAvdUtils.downloadAndUnzip(skinsUrl, path_1.default.resolve(VelaAvdUtils.sdkHome, 'skins'));
|
|
259
|
+
currVersionInfo.skins = emulator_1.EmulatorEnvVersion.skins;
|
|
260
|
+
shared_utils_1.ColorConsole.success(`Download skins succeed.`);
|
|
261
|
+
}
|
|
262
|
+
const skinList = VelaAvdUtils.velaAvdCls.getVelaSkinList();
|
|
263
|
+
avdSkin = yield (0, prompts_1.select)({
|
|
264
|
+
message: 'avd skin.',
|
|
265
|
+
choices: skinList.map((item) => {
|
|
266
|
+
return {
|
|
267
|
+
name: item,
|
|
268
|
+
value: item,
|
|
269
|
+
description: item
|
|
270
|
+
};
|
|
271
|
+
})
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
avdWidth = yield (0, prompts_1.input)({
|
|
276
|
+
message: 'avd width.',
|
|
277
|
+
default: '466'
|
|
278
|
+
});
|
|
279
|
+
avdHeight = yield (0, prompts_1.input)({
|
|
280
|
+
message: 'avd height.',
|
|
281
|
+
default: '466'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
207
284
|
}
|
|
208
|
-
// 镜像,TODO:后续需要考虑多种设备的镜像
|
|
209
|
-
const velaImage = (yield (0, prompts_1.select)({
|
|
210
|
-
message: 'vela image.',
|
|
211
|
-
choices: [
|
|
212
|
-
// { value: 'vela-release-4.0-pre', name: 'vela抢先版(4.0)' },
|
|
213
|
-
{ value: 'vela-dev-0.0.2', name: 'vela开发版(dev, 0.0.2)' }
|
|
214
|
-
]
|
|
215
|
-
}));
|
|
216
285
|
// 下载模拟器
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (!emulatorExists || (versionInfo && versionInfo.emulator < onlineVersionInfo.emulator)) {
|
|
286
|
+
if (!emulatorExist ||
|
|
287
|
+
(currVersionInfo && currVersionInfo.emulator < onlineVersionInfo.emulator)) {
|
|
220
288
|
const emulatorDownloadUrl = VelaAvdUtils.getEmulatorUrl(onlineVersionInfo.emulator);
|
|
221
|
-
yield VelaAvdUtils.downloadAndUnzip(emulatorDownloadUrl,
|
|
222
|
-
|
|
289
|
+
yield VelaAvdUtils.downloadAndUnzip(emulatorDownloadUrl, VelaAvdUtils.getEmulatorEnvHome('emulator'));
|
|
290
|
+
currVersionInfo.emulator = emulator_1.EmulatorEnvVersion.emulator;
|
|
291
|
+
shared_utils_1.ColorConsole.success(`Download emulator succeed.`);
|
|
223
292
|
}
|
|
224
293
|
// 下载镜像
|
|
225
|
-
const velaImageDownloadUrl = this.getSystemImageUrl(velaImage);
|
|
226
294
|
const imageDir = path_1.default.resolve(VelaAvdUtils.sdkHome, 'system-images', velaImage);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if (
|
|
295
|
+
if (this.velaImageNeedUpdate(velaImage)) {
|
|
296
|
+
const velaImageDownloadUrl = this.getSystemImageUrl(velaImage);
|
|
297
|
+
if (VelaAvdUtils.isZipInImageUrl(velaImage)) {
|
|
230
298
|
yield VelaAvdUtils.downloadAndUnzip(velaImageDownloadUrl, imageDir);
|
|
299
|
+
currVersionInfo['system-images'] = emulator_1.EmulatorEnvVersion['system-images'];
|
|
231
300
|
}
|
|
232
301
|
else {
|
|
233
302
|
yield VelaAvdUtils.downloadFromCdn(velaImageDownloadUrl, imageDir, 'nuttx');
|
|
234
303
|
}
|
|
235
|
-
|
|
304
|
+
shared_utils_1.ColorConsole.success(`Download vela image succeed.`);
|
|
236
305
|
}
|
|
237
306
|
// 下载快应用qa文件
|
|
238
|
-
|
|
239
|
-
const qaExists = fs_extra_1.default.existsSync(qaDir);
|
|
240
|
-
if (!qaExists || (versionInfo && versionInfo.qa < onlineVersionInfo.qa)) {
|
|
307
|
+
if (!qaExist || (currVersionInfo && currVersionInfo.qa < onlineVersionInfo.qa)) {
|
|
241
308
|
const qaUrl = VelaAvdUtils.getDownloadUrl('qa', onlineVersionInfo.qa);
|
|
242
|
-
yield VelaAvdUtils.downloadAndUnzip(qaUrl,
|
|
243
|
-
|
|
309
|
+
yield VelaAvdUtils.downloadAndUnzip(qaUrl, VelaAvdUtils.getEmulatorEnvHome('qa'));
|
|
310
|
+
currVersionInfo.qa = emulator_1.EmulatorEnvVersion.qa;
|
|
311
|
+
shared_utils_1.ColorConsole.success(`Download quickapp font succeed.`);
|
|
244
312
|
}
|
|
245
313
|
// 下载tools
|
|
246
|
-
|
|
247
|
-
const toolsExists = fs_extra_1.default.existsSync(toolsDir);
|
|
248
|
-
if (!toolsExists || (versionInfo && versionInfo.tools < onlineVersionInfo.tools)) {
|
|
314
|
+
if (!toolsExist || (currVersionInfo && currVersionInfo.tools < onlineVersionInfo.tools)) {
|
|
249
315
|
const v9fsToolUrl = VelaAvdUtils.getv9fsToolUrl();
|
|
250
316
|
const filename = os_1.default.platform() === 'win32' ? 'ya-vm-file-server.exe' : 'ya-vm-file-server';
|
|
251
|
-
yield VelaAvdUtils.downloadFromCdn(v9fsToolUrl,
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
317
|
+
yield VelaAvdUtils.downloadFromCdn(v9fsToolUrl, VelaAvdUtils.getEmulatorEnvHome('tools'), filename);
|
|
318
|
+
currVersionInfo.tools = emulator_1.EmulatorEnvVersion.tools;
|
|
319
|
+
shared_utils_1.ColorConsole.success(`Download tools succeed.`);
|
|
320
|
+
}
|
|
321
|
+
// 下载modem_simulator
|
|
322
|
+
if (!modemSimulatorExist ||
|
|
323
|
+
currVersionInfo.modem_simulator < emulator_1.EmulatorEnvVersion.modem_simulator) {
|
|
324
|
+
const modemSimulatorUrl = VelaAvdUtils.getDownloadUrl('modem_simulator', emulator_1.EmulatorEnvVersion.modem_simulator);
|
|
325
|
+
yield VelaAvdUtils.downloadAndUnzip(modemSimulatorUrl, VelaAvdUtils.getEmulatorEnvHome('modem_simulator'));
|
|
326
|
+
currVersionInfo.modem_simulator = emulator_1.EmulatorEnvVersion.modem_simulator;
|
|
327
|
+
shared_utils_1.ColorConsole.success(`Download modem simulator succeed.`);
|
|
257
328
|
}
|
|
258
|
-
// 替换version.json
|
|
259
|
-
const versionJson = JSON.stringify(onlineVersionInfo, null, 2);
|
|
260
|
-
fs_extra_1.default.writeFileSync(versionFile, versionJson);
|
|
261
329
|
// 创建avd文本文件
|
|
262
330
|
const avdImagePath = imageDir;
|
|
263
|
-
const avdParams = {
|
|
331
|
+
const avdParams = {
|
|
332
|
+
avdName,
|
|
333
|
+
avdSkin,
|
|
334
|
+
avdWidth,
|
|
335
|
+
avdHeight,
|
|
336
|
+
avdArch: emulator_1.IAvdArchType.arm,
|
|
337
|
+
avdImagePath
|
|
338
|
+
};
|
|
264
339
|
VelaAvdUtils.velaAvdCls.createVelaAvd(avdParams);
|
|
265
|
-
|
|
340
|
+
shared_utils_1.ColorConsole.success(`Create avd succeed.`);
|
|
341
|
+
}
|
|
342
|
+
catch (e) {
|
|
343
|
+
shared_utils_1.ColorConsole.throw(`Create avd failed. Error: ${e.message}`);
|
|
344
|
+
}
|
|
345
|
+
finally {
|
|
346
|
+
// 写入versions.json
|
|
347
|
+
const versionJson = JSON.stringify(currVersionInfo, null, 2);
|
|
348
|
+
fs_extra_1.default.writeFileSync(versionFile, versionJson);
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
/** 初始化/重置模拟器环境 */
|
|
353
|
+
static initEmulatorEnv() {
|
|
354
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
355
|
+
const versionFile = path_1.default.resolve(VelaAvdUtils.sdkHome, 'versions.json');
|
|
356
|
+
const versionFileExist = fs_extra_1.default.existsSync(versionFile);
|
|
357
|
+
let currVersionInfo = {
|
|
358
|
+
name: '模拟器资源版本管理',
|
|
359
|
+
emulator: '',
|
|
360
|
+
qa: '',
|
|
361
|
+
skins: '',
|
|
362
|
+
'system-images': '',
|
|
363
|
+
tools: '',
|
|
364
|
+
modem_simulator: ''
|
|
365
|
+
};
|
|
366
|
+
if (versionFileExist) {
|
|
367
|
+
currVersionInfo = fs_extra_1.default.readJSONSync(versionFile);
|
|
368
|
+
}
|
|
369
|
+
// 模拟器的各项资源是否存在
|
|
370
|
+
const emulatorExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'emulator', VelaAvdUtils.getEmulatorPlatform()));
|
|
371
|
+
const qaExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'qa/font'));
|
|
372
|
+
const skinsExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'skins'));
|
|
373
|
+
const toolsExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'tools'));
|
|
374
|
+
const modemSimulatorExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'modem_simulator/modem_nvram.json'));
|
|
375
|
+
const systemImageExist = fs_extra_1.default.existsSync(path_1.default.resolve(VelaAvdUtils.sdkHome, 'system-images', emulator_1.VelaImageVersionList[0].value, 'nuttx'));
|
|
376
|
+
try {
|
|
377
|
+
// 下载皮肤
|
|
378
|
+
if (!skinsExist || currVersionInfo.skins < emulator_1.EmulatorEnvVersion.skins) {
|
|
379
|
+
const skinsUrl = VelaAvdUtils.getDownloadUrl('skins', emulator_1.EmulatorEnvVersion.skins);
|
|
380
|
+
yield VelaAvdUtils.downloadAndUnzip(skinsUrl, VelaAvdUtils.getEmulatorEnvHome('skins'));
|
|
381
|
+
currVersionInfo.skins = emulator_1.EmulatorEnvVersion.skins;
|
|
382
|
+
shared_utils_1.ColorConsole.success(`Download skins succeed.`);
|
|
383
|
+
}
|
|
384
|
+
// 下载快应用font
|
|
385
|
+
if (!qaExist || currVersionInfo.qa < emulator_1.EmulatorEnvVersion.qa) {
|
|
386
|
+
const qaUrl = VelaAvdUtils.getDownloadUrl('qa', emulator_1.EmulatorEnvVersion.qa);
|
|
387
|
+
yield VelaAvdUtils.downloadAndUnzip(qaUrl, VelaAvdUtils.getEmulatorEnvHome('qa'));
|
|
388
|
+
currVersionInfo.qa = emulator_1.EmulatorEnvVersion.qa;
|
|
389
|
+
shared_utils_1.ColorConsole.success(`Download quickapp font succeed.`);
|
|
390
|
+
}
|
|
391
|
+
// 下载工具
|
|
392
|
+
if (!toolsExist || currVersionInfo.tools < emulator_1.EmulatorEnvVersion.tools) {
|
|
393
|
+
const v9fsToolUrl = VelaAvdUtils.getv9fsToolUrl(emulator_1.EmulatorEnvVersion.tools);
|
|
394
|
+
const filename = os_1.default.platform() === 'win32' ? 'ya-vm-file-server.exe' : 'ya-vm-file-server';
|
|
395
|
+
yield VelaAvdUtils.downloadFromCdn(v9fsToolUrl, VelaAvdUtils.getEmulatorEnvHome('tools'), filename);
|
|
396
|
+
currVersionInfo.tools = emulator_1.EmulatorEnvVersion.tools;
|
|
397
|
+
shared_utils_1.ColorConsole.success(`Download tools succeed.`);
|
|
398
|
+
}
|
|
399
|
+
// 下载模拟器
|
|
400
|
+
if (!emulatorExist || currVersionInfo.emulator < emulator_1.EmulatorEnvVersion.emulator) {
|
|
401
|
+
const emulatorUrl = VelaAvdUtils.getEmulatorUrl(emulator_1.EmulatorEnvVersion.emulator);
|
|
402
|
+
yield VelaAvdUtils.downloadAndUnzip(emulatorUrl, VelaAvdUtils.getEmulatorEnvHome('emulator'));
|
|
403
|
+
currVersionInfo.emulator = emulator_1.EmulatorEnvVersion.emulator;
|
|
404
|
+
shared_utils_1.ColorConsole.success(`Download emulator succeed.`);
|
|
405
|
+
}
|
|
406
|
+
// 下载modem_simultor
|
|
407
|
+
if (!modemSimulatorExist ||
|
|
408
|
+
currVersionInfo.modem_simulator < emulator_1.EmulatorEnvVersion.modem_simulator) {
|
|
409
|
+
const modemSimulatorUrl = VelaAvdUtils.getDownloadUrl('modem_simulator', emulator_1.EmulatorEnvVersion.modem_simulator);
|
|
410
|
+
yield VelaAvdUtils.downloadAndUnzip(modemSimulatorUrl, VelaAvdUtils.getEmulatorEnvHome('modem_simulator'));
|
|
411
|
+
currVersionInfo.modem_simulator = emulator_1.EmulatorEnvVersion.modem_simulator;
|
|
412
|
+
shared_utils_1.ColorConsole.success(`Download modem simulator succeed.`);
|
|
413
|
+
}
|
|
414
|
+
// 下载vela镜像,默认只下载最新的vela正式版,dev版本需要创建模拟器的时候手动勾选
|
|
415
|
+
if (!systemImageExist || VelaAvdUtils.velaImageNeedUpdate(emulator_1.VelaImageVersionList[0].value)) {
|
|
416
|
+
const systemImageUrl = VelaAvdUtils.getSystemImageUrl(emulator_1.VelaImageVersionList[0].value);
|
|
417
|
+
const imageDir = path_1.default.resolve(VelaAvdUtils.sdkHome, 'system-images', emulator_1.VelaImageVersionList[0].value);
|
|
418
|
+
yield VelaAvdUtils.downloadAndUnzip(systemImageUrl, imageDir);
|
|
419
|
+
currVersionInfo['system-images'] = emulator_1.EmulatorEnvVersion['system-images'];
|
|
420
|
+
shared_utils_1.ColorConsole.success(`Download vela image succeed.`);
|
|
421
|
+
}
|
|
422
|
+
shared_utils_1.ColorConsole.success(`Create emulator environment succeed.`);
|
|
266
423
|
}
|
|
267
424
|
catch (e) {
|
|
268
|
-
|
|
425
|
+
shared_utils_1.ColorConsole.throw(`Create emulator environment failed. Error: ${e.message}`);
|
|
426
|
+
}
|
|
427
|
+
finally {
|
|
428
|
+
// 写入versions.json
|
|
429
|
+
const versionJson = JSON.stringify(currVersionInfo, null, 2);
|
|
430
|
+
fs_extra_1.default.writeFileSync(versionFile, versionJson);
|
|
269
431
|
}
|
|
270
432
|
});
|
|
271
433
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiot-toolkit",
|
|
3
|
-
"version": "2.0.2
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Tools for creating, developing, and packaging aiot applications.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aiot"
|
|
@@ -21,24 +21,32 @@
|
|
|
21
21
|
"test": "node ./__tests__/aiot-toolkit.test.js"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@aiot-toolkit/
|
|
25
|
-
"@aiot-toolkit/
|
|
26
|
-
"@aiot-toolkit/
|
|
27
|
-
"@
|
|
28
|
-
"
|
|
24
|
+
"@aiot-toolkit/aiotpack": "2.0.2",
|
|
25
|
+
"@aiot-toolkit/commander": "2.0.2",
|
|
26
|
+
"@aiot-toolkit/emulator": "2.0.2",
|
|
27
|
+
"@aiot-toolkit/shared-utils": "2.0.2",
|
|
28
|
+
"@inquirer/prompts": "^5.3.0",
|
|
29
|
+
"@miwt/adb": "^0.9.0",
|
|
29
30
|
"adm-zip": "^0.5.10",
|
|
30
|
-
"axios": "^1.
|
|
31
|
+
"axios": "^1.7.4",
|
|
31
32
|
"cli-progress": "^3.12.0",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
33
|
+
"dayjs": "^1.11.10",
|
|
34
|
+
"file-lane": "2.0.2",
|
|
35
|
+
"fs-extra": "^11.2.0",
|
|
36
|
+
"koa-router": "^13.0.1",
|
|
37
|
+
"lodash": "^4.17.21",
|
|
38
|
+
"portfinder": "^1.0.32",
|
|
39
|
+
"qr-image": "^3.2.0",
|
|
40
|
+
"semver": "^7.6.3",
|
|
36
41
|
"ws": "^8.15.1"
|
|
37
42
|
},
|
|
38
43
|
"devDependencies": {
|
|
39
44
|
"@types/adm-zip": "^0.5.4",
|
|
45
|
+
"@types/fs-extra": "^11.0.4",
|
|
46
|
+
"@types/koa-router": "^7.4.8",
|
|
47
|
+
"@types/qr-image": "^3.2.9",
|
|
40
48
|
"@types/semver": "^7.5.8",
|
|
41
49
|
"@types/ws": "^8.5.10"
|
|
42
50
|
},
|
|
43
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "8ca4bf2ed7bcf11911e5c514696951bdba4fc12d"
|
|
44
52
|
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import CompileMode from '@aiot-toolkit/aiotpack/lib/compiler/enum/CompileMode';
|
|
2
|
-
import ParamType from '@aiot-toolkit/commander/lib/interface/IParam';
|
|
3
|
-
import { Dictionary } from '@aiot-toolkit/shared-utils/lib/type/Type';
|
|
4
|
-
import IBuilder from './IBuilder';
|
|
5
|
-
interface IUxBuilderOption extends Dictionary {
|
|
6
|
-
watch?: boolean;
|
|
7
|
-
mode: CompileMode;
|
|
8
|
-
disabledJsc: boolean;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* UxBuilder
|
|
12
|
-
*/
|
|
13
|
-
declare class UxBuilder implements IBuilder<IUxBuilderOption> {
|
|
14
|
-
readonly QUICKAPP_CONFIG = "quickapp.config.js";
|
|
15
|
-
/**
|
|
16
|
-
* ux项目的build函数
|
|
17
|
-
* @param projectPath 项目路径
|
|
18
|
-
* @param options 命令参数
|
|
19
|
-
* @param watch 是否开启监听
|
|
20
|
-
*/
|
|
21
|
-
build(projectPath: string, options: IUxBuilderOption): Promise<void>;
|
|
22
|
-
private readQuickAppConfig;
|
|
23
|
-
static readonly PROJECT_TYPE = "ux quick app";
|
|
24
|
-
params: ParamType[];
|
|
25
|
-
match(projectPath: string): boolean;
|
|
26
|
-
}
|
|
27
|
-
export default UxBuilder;
|