jh5_app_build 1.0.27 → 1.0.29

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.
Files changed (2) hide show
  1. package/lib/build_std.js +137 -19
  2. package/package.json +1 -1
package/lib/build_std.js CHANGED
@@ -1,3 +1,5 @@
1
+ /* eslint-disable no-mixed-operators */
2
+ /* eslint-disable no-lonely-if */
1
3
  let glob = require("glob")
2
4
  let archiver = require('archiver');
3
5
  let jutils = require('base_parts');
@@ -9,6 +11,96 @@ let AdmZip = require('adm-zip');
9
11
  let child_process = require('child_process');
10
12
 
11
13
 
14
+ function adler32_buf(buf, seed) {
15
+ // eslint-disable-next-line
16
+ var a = 1, b = 0, L = buf.length, M = 0;
17
+ // eslint-disable-next-line no-bitwise
18
+ if (typeof seed === 'number') { a = seed & 0xFFFF; b = (seed >>> 16) & 0xFFFF; }
19
+ for (var i = 0; i < L;) {
20
+ M = Math.min(L - i, 2654) + i;
21
+ for (; i < M; i++) {
22
+ // eslint-disable-next-line no-bitwise
23
+ a += buf[i] & 0xFF;
24
+ b += a;
25
+ }
26
+ // eslint-disable-next-line no-bitwise
27
+ a = (15 * (a >>> 16) + (a & 65535));
28
+ // eslint-disable-next-line no-bitwise
29
+ b = (15 * (b >>> 16) + (b & 65535));
30
+ }
31
+ // eslint-disable-next-line no-bitwise
32
+ return ((b % 65521) << 16) | (a % 65521);
33
+ }
34
+
35
+ let jfile_utils = jutils.jfile_utils;
36
+
37
+
38
+ function reNameData(anfData, pkgName, codePage) {
39
+ // 修改应用名
40
+ let tmpName = Buffer.from("jsmart", codePage);
41
+ // eslint-disable-next-line no-constant-condition
42
+ while (true) {
43
+ let nameIndex = anfData.indexOf(tmpName);
44
+ if (nameIndex < 0) {
45
+ break;
46
+ }
47
+
48
+ let toName = Buffer.from(pkgName, codePage);
49
+ if (tmpName.length !== toName.length) {
50
+ throw new Error("pkgName length must 6")
51
+ }
52
+
53
+ // 写入名
54
+ for (let index = 0; index < toName.length; index++) {
55
+ anfData[nameIndex + index] = toName[index];
56
+ }
57
+ }
58
+ }
59
+
60
+
61
+ /**
62
+ * 复制文件夹并重命名数据
63
+ * @param {*} srcDir 原始目录
64
+ * @param {*} destDir 目标目录
65
+ * @param {*} pkgName 目标名
66
+ * @returns {*} 无
67
+ */
68
+ async function copyReNameDir(srcDir, destDir, pkgName) {
69
+ await jfile_utils.mkdir(destDir)
70
+
71
+ var fileList = await jfile_utils.readdir(srcDir);
72
+ for (var index = 0; index < fileList.length; index++) {
73
+ var fileName = fileList[index];
74
+ var srcPath = srcDir + "/" + fileName;
75
+ var destPath = destDir + "/" + fileName;
76
+ var fileStat;
77
+ try {
78
+ fileStat = await jfile_utils.lstat(srcPath);
79
+ if (fileStat.isDirectory()) {
80
+ // 目录
81
+ await copyReNameDir(srcPath, destPath, pkgName);
82
+ }
83
+ else {
84
+ // 文件
85
+ let anfData = fs.readFileSync(srcPath);
86
+
87
+ // 修改数据
88
+ reNameData(anfData, pkgName, 'utf8');
89
+ reNameData(anfData, pkgName, 'utf16le');
90
+
91
+ if (path.extname(srcPath) === ".dex") {
92
+ let sunData = anfData.subarray(0x0C)
93
+ anfData.writeInt32LE(adler32_buf(sunData), 0x08)
94
+ }
95
+
96
+ fs.writeFileSync(destPath, anfData);
97
+ }
98
+ }
99
+ catch (error) {
100
+ }
101
+ }
102
+ }
103
+
12
104
  /**
13
105
  * 创建目录并获取尾部带斜线的路径
14
106
  * @param {string} dirPath 路径
@@ -29,7 +121,7 @@ function makeAndGetDir(dirPath) {
29
121
  * @returns {void}
30
122
  */
31
123
  async function makeDirAndCopy(srcFile, dstFile) {
32
- await jutils.jfile_utils.createDirs(dstFile, true);
124
+ await jfile_utils.createDirs(dstFile, true);
33
125
  fs.copyFileSync(srcFile, dstFile);
34
126
  }
35
127
 
@@ -38,7 +130,8 @@ module.exports = async (cmd, buildCfg) => {
38
130
 
39
131
  try {
40
132
  // 模板目录
41
- var stdBinDir = `${buildCfg.rootPath}/jbuild_data/std_bins`;
133
+ var stdBinPriDir = `${buildCfg.rootPath}/jbuild_data/std_bins`;
134
+ var stdBinDir = `${buildCfg.rootPath}/jbuild_data/std_out`;
42
135
 
43
136
  // jre目录
44
137
  let jreCwd = "C:\\jdev_develop\\jre\\bin";
@@ -57,11 +150,15 @@ module.exports = async (cmd, buildCfg) => {
57
150
  // 默认软件名
58
151
  if (!apkinfoObj.appName) apkinfoObj.appName = "智能终端"
59
152
 
153
+ // 清理数据
154
+ console.log(`init dir ...`);
155
+ await jfile_utils.deleteFolder(stdBinDir);
156
+ await jfile_utils.mkdir(stdBinDir);
157
+
60
158
  // 存在自定义apk
61
159
  var custumApk = `${buildCfg.rootPath}/apk_cfg/app-release.apk`
62
160
  if (fs.existsSync(custumApk)) {
63
161
  console.warn(`exists custum Apk, unpack custum apk...`);
64
- await jutils.jfile_utils.deleteFolder(stdBinDir);
65
162
  child_process.execFileSync("C:\\jdev_develop\\jre\\bin\\java.exe", [
66
163
  "-jar", "C:\\jdev_develop\\h5_bin\\apktool.jar",
67
164
  "d", custumApk,
@@ -71,15 +168,25 @@ module.exports = async (cmd, buildCfg) => {
71
168
  cwd: jreCwd
72
169
  });
73
170
  }
171
+ else {
172
+ // 修改应用名
173
+ if (apkinfoObj.pkgName) {
174
+ await copyReNameDir(stdBinPriDir, stdBinDir, apkinfoObj.pkgName);
175
+ }
176
+ // 不修改
177
+ else {
178
+ await jfile_utils.copyFolder(stdBinPriDir, stdBinDir);
179
+ }
180
+ }
74
181
 
75
- // 清理数据
182
+ // 清理demo内容
76
183
  console.log(`delete temp file ...`);
77
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/assets/device_webapi");
78
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/assets/h5app");
79
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/assets/jext");
80
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/assets/screen");
81
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/assets/sounds");
82
- await jutils.jfile_utils.deleteFolder(stdBinDir + "/build");
184
+ await jfile_utils.deleteFolder(stdBinDir + "/assets/device_webapi");
185
+ await jfile_utils.deleteFolder(stdBinDir + "/assets/h5app");
186
+ await jfile_utils.deleteFolder(stdBinDir + "/assets/jext");
187
+ await jfile_utils.deleteFolder(stdBinDir + "/assets/screen");
188
+ await jfile_utils.deleteFolder(stdBinDir + "/assets/sounds");
189
+ await jfile_utils.deleteFolder(stdBinDir + "/build");
83
190
 
84
191
  // 修改版本号
85
192
  let platformVer = jutils.getUUID();
@@ -171,7 +278,7 @@ module.exports = async (cmd, buildCfg) => {
171
278
  if (fileList.length === 0) {
172
279
  console.warn("no audio_wav files!");
173
280
  try {
174
- jutils.jfile_utils.createDirs(pathSub)
281
+ jfile_utils.createDirs(pathSub)
175
282
  } catch (error) {
176
283
  }
177
284
  }
@@ -219,17 +326,12 @@ module.exports = async (cmd, buildCfg) => {
219
326
  // 修改其他信息
220
327
  try {
221
328
  var AndroidManifestPath = stdBinDir + "/AndroidManifest.xml";
222
- var AndroidManifestPathBak = stdBinDir + "/AndroidManifestBak.xml";
223
- // 备份
224
- if (!fs.existsSync(AndroidManifestPathBak)) {
225
- fs.copyFileSync(AndroidManifestPath, AndroidManifestPathBak);
226
- }
227
- var anfData = fs.readFileSync(AndroidManifestPathBak);
329
+ var anfData = fs.readFileSync(AndroidManifestPath);
228
330
 
229
331
  // 修改应用名
230
332
  if (apkinfoObj.appName) {
231
333
  let tmpName = Buffer.from("7A3657B017788420AE749039F9D25A2E", 'utf16le');
232
- var nameIndex = anfData.indexOf(tmpName);
334
+ let nameIndex = anfData.indexOf(tmpName);
233
335
  if (nameIndex > 0) {
234
336
  let toName = Buffer.from(apkinfoObj.appName, 'utf16le');
235
337
  // 清空
@@ -243,6 +345,22 @@ module.exports = async (cmd, buildCfg) => {
243
345
  }
244
346
  }
245
347
 
348
+ // 修改版本名
349
+ if (apkinfoObj.useAppVer) {
350
+ let tmpName = Buffer.from("12.34.56.7890", 'utf16le');
351
+ let nameIndex = anfData.indexOf(tmpName);
352
+ if (nameIndex > 0) {
353
+ let tmpVerStr = buildCfg.dateStr;
354
+ let toVerStr = `${tmpVerStr.substr(0, 2)}.${tmpVerStr.substr(2, 2)}.${tmpVerStr.substr(4, 2)}.${tmpVerStr.substr(7, 4)}`
355
+ console.log("versionName=" + toVerStr);
356
+ let toName = Buffer.from(toVerStr, 'utf16le');
357
+ // 写入名
358
+ for (let index = 0; index < toName.length; index++) {
359
+ anfData[nameIndex + index] = toName[index];
360
+ }
361
+ }
362
+ }
363
+
246
364
  // 写入
247
365
  fs.writeFileSync(AndroidManifestPath, anfData);
248
366
  } catch (error) {
@@ -359,7 +477,7 @@ module.exports = async (cmd, buildCfg) => {
359
477
  } catch (error) {
360
478
  // 清理文件
361
479
  try {
362
- jutils.jfile_utils.deleteFile(buildCfg.outpath);
480
+ jfile_utils.deleteFile(buildCfg.outpath);
363
481
  } catch (error2) {
364
482
  }
365
483
  // 延迟报错
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jh5_app_build",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "description": "jaskle jh5_app_build",
5
5
  "main": "./bin/jh5_app_build.js",
6
6
  "registry": true,