@flun/node-mobile-app 4.0.5 → 4.0.7

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 (49) hide show
  1. package/Android /346/236/204/345/273/272/346/214/207/345/215/227.md" +84 -76
  2. package/CHANGELOG.md +9 -9
  3. package/LICENSE +9 -4
  4. package/README.md +206 -113
  5. package/bin/cli.js +9 -9
  6. package/cli-assets/server.js +7 -4
  7. package/mobileAppConfig.js +32 -32
  8. package/package.json +5 -5
  9. package/scripts/copy-files.js +1 -1
  10. package/src/commands/build.js +9 -4
  11. package/src/commands/clean.js +3 -2
  12. package/src/commands/test.js +13 -9
  13. package/src/config.js +3 -3
  14. package/src/copy.js +41 -36
  15. package/src/fingerprint.js +4 -3
  16. package/src/generate.js +5 -3
  17. package/src/install.js +38 -27
  18. package/src/optimize-node-modules.js +10 -5
  19. package/src/patcher.js +37 -32
  20. package/src/platform-ios.js +6 -6
  21. package/src/utils.js +26 -22
  22. package/template/App.tsx +4 -4
  23. package/template/Gemfile +1 -1
  24. package/template/android/app/build.gradle +1 -1
  25. package/template/android/app/proguard-rules.pro +1 -1
  26. package/template/android/app/src/main/java/com/myapp/MainActivity.kt +1 -1
  27. package/template/android/app/src/main/java/com/myapp/MainApplication.kt +1 -1
  28. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +6 -3
  29. package/template/android/app/src/main/res/raw/keep.xml +1 -1
  30. package/template/android/app/src/main/res/values/strings.xml +1 -1
  31. package/template/android/app/src/main/res/values/styles.xml +1 -1
  32. package/template/android/build.gradle +1 -1
  33. package/template/android/gradle.properties +1 -1
  34. package/template/android/gradlew +3 -2
  35. package/template/android/gradlew.bat +3 -2
  36. package/template/android/settings.gradle +1 -1
  37. package/template/app.json +1 -1
  38. package/template/index.js +2 -2
  39. package/template/ios/.xcode.env +1 -1
  40. package/template/ios/MyApp/Images.xcassets/AppIcon.appiconset/Contents.json +1 -1
  41. package/template/ios/MyApp/Images.xcassets/Contents.json +1 -1
  42. package/template/ios/MyApp/Info.plist +1 -1
  43. package/template/ios/MyApp/LaunchScreen.storyboard +30 -12
  44. package/template/ios/MyApp/PrivacyInfo.xcprivacy +1 -1
  45. package/template/ios/MyApp.xcodeproj/project.pbxproj +34 -15
  46. package/template/ios/MyApp.xcodeproj/xcshareddata/xcschemes/MyApp.xcscheme +1 -1
  47. package/template/ios/Podfile +1 -1
  48. package/template/package.json +1 -1
  49. package//350/207/252/345/256/232/344/271/211libnode/346/214/207/345/215/227.md +131 -98
@@ -1,65 +1,66 @@
1
1
  # Android 构建指南
2
2
 
3
- 本文档是 [README.md](./README.md) 的**深度附件**;日常使用(`test` / `build`)不需要看——CLI 自动处理;
3
+ 本文档是 [README.md](./README.md) 的**深度附件**;日常使用(`test` / `build`)不需要看--CLI 自动处理;
4
4
 
5
- 本文档只讲四件事,都是 README 没细说的:
6
- 1. **环境准备**(JDK / SDK / NDK / adb / 原生模块编译)
7
- 2. **libnode.so**(v18 vs v22、预编译仓库、替换、full-icu 验证)
8
- 3. **Express 版本选择**(踩坑清单)
9
- 4. **调试与缓存排查**(logcat 命令、手动清缓存兜底)
5
+ 本文档只讲四件事,都是 README 没细说的:
6
+ 1. **环境准备**(JDK / SDK / NDK / adb / 原生模块编译)
7
+ 2. **libnode.so**(v18 vs v22、预编译仓库、替换、full-icu 验证)
8
+ 3. **Express 版本选择**(踩坑清单)
9
+ 4. **调试与缓存排查**(logcat 命令、手动清缓存兜底)
10
10
 
11
11
  ---
12
12
 
13
13
  ## 一、环境准备
14
14
 
15
- ### 1.1 JDK 17(必须)
15
+ ### 1.1 JDK 17(必须)
16
16
 
17
17
  Android Gradle Plugin 不支持 JDK 18+;
18
18
 
19
- 下载:[Adoptium JDK 17](https://adoptium.net/temurin/releases/?version=17)
19
+ 下载:[Adoptium JDK 17](https://adoptium.net/temurin/releases/?version=17)
20
20
 
21
21
  **CLI 不读 `JAVA_HOME`**,直接用系统 PATH 里的 `java`;确保 `java -version` 输出是 17;
22
22
 
23
23
  ### 1.2 Android SDK
24
24
 
25
- CLI 自动查找,顺序:
25
+ CLI 自动查找,顺序:
26
26
 
27
27
  1. `mobileAppConfig.js` 的 `android.sdkPath`
28
28
  2. 环境变量 `ANDROID_HOME` / `ANDROID_SDK_ROOT`
29
- 3. 常见默认路径(Windows:`%LOCALAPPDATA%\Android\Sdk`)
29
+ 3. 常见默认路径(Windows:`%LOCALAPPDATA%\Android\Sdk`)
30
30
 
31
- **必需组件**:
31
+ **必需组件**:
32
32
 
33
33
  | 组件 | 版本 |
34
34
  | -------------- | ------------------------------------------------------------------------- |
35
35
  | SDK Platform | 与 `mobileAppConfig.js` 的 `android.compileSdkVersion` 一致的 Platform |
36
36
  | Build-Tools | 与 `mobileAppConfig.js` 的 `android.buildToolsVersion` 一致 |
37
37
  | Platform-Tools | 含 adb 的较新版本 |
38
- | NDK | 与模板 `android/build.gradle` 的 `ndkVersion` 一致(libnode.so 编译依赖) |
38
+ | NDK | 与模板 `android/build.gradle` 的 `ndkVersion` 一致(libnode.so 编译依赖) |
39
39
 
40
40
  ### 1.3 adb
41
41
 
42
- 查找顺序同 SDK;常用命令:
42
+ 查找顺序同 SDK;常用命令:
43
43
 
44
44
  ```powershell
45
45
  $adb = "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe"
46
46
  & $adb devices
47
47
  ```
48
48
 
49
- ### 1.4 原生模块编译(自动检测)
49
+ ### 1.4 原生模块编译(自动检测)
50
50
 
51
- CLI 会扫描 `<buildDir>/nodejs-assets/nodejs-project/node_modules/` 下是否有 `binding.gyp` 文件(原生模块的标志),自动写:
51
+ CLI 会扫描 `<buildDir>/nodejs-assets/nodejs-project/node_modules/` 下是否有 `binding.gyp` 文件(原生模块的标志),自动写:
52
52
 
53
53
  ```
54
54
  <buildDir>/nodejs-assets/BUILD_NATIVE_MODULES.txt # 1=有原生模块,0=无
55
55
  ```
56
56
 
57
- - **检测到原生模块**(如 `bcrypt`、`sqlite3`):写 `1`,并设环境变量 `NODEJS_MOBILE_BUILD_NATIVE_MODULES=1`,`npm install` 时自动重编
58
- - **未检测到**:写 `0`,跳过编译
57
+ - **检测到原生模块**(如 `bcrypt`、`sqlite3`):写 `1`,并设环境变量 `NODEJS_MOBILE_BUILD_NATIVE_MODULES=1`,`npm install`
58
+ 时自动重编
59
+ - **未检测到**:写 `0`,跳过编译
59
60
 
60
61
  **用户无需手动配置**;检测结果会纳入依赖哈希,装/卸原生模块时会自动触发重装重编;
61
62
 
62
- **手动强制重编**:换过 `libnode.so` 但依赖没变、需要重新编译原生模块时:
63
+ **手动强制重编**:换过 `libnode.so` 但依赖没变、需要重新编译原生模块时:
63
64
 
64
65
  ```bash
65
66
  # Linux / macOS
@@ -71,7 +72,9 @@ NODE_MOBILE_FORCE_REBUILD=1 npx node-mobile-app test
71
72
  $env:NODE_MOBILE_FORCE_REBUILD=1; npx node-mobile-app test
72
73
  ```
73
74
 
74
- **Windows 编译原生模块的前置条件**:需 Android SDK 中的 NDK(提供交叉编译工具链与 `make.exe`)与 Git for Windows(提供 `sh` / `sed` / `rm` 等 GNU 工具,`nodejs-mobile-gyp` 会从注册表或常见路径自动定位);二者缺失时编译阶段报错;Linux / macOS 使用系统自带的同类工具,无需额外安装;
75
+ **Windows 编译原生模块的前置条件**:需 Android SDK 中的 NDK(提供交叉编译工具链与 `make.exe`)与 Git for Windows(提供 `sh` /
76
+ `sed` / `rm` 等 GNU 工具,`nodejs-mobile-gyp` 会从注册表或常见路径自动定位);二者缺失时编译阶段报错;Linux / macOS
77
+ 使用系统自带的同类工具,无需额外安装;
75
78
 
76
79
  ---
77
80
 
@@ -81,15 +84,16 @@ $env:NODE_MOBILE_FORCE_REBUILD=1; npx node-mobile-app test
81
84
 
82
85
  ### 2.0 预编译二进制怎么来的
83
86
 
84
- 从 `@flun/nodejs-mobile-react-native` 1.0.1 起,`libnode.so` **不在 npm 包里**,安装时由 postinstall 脚本从 Gitee / GitHub Release 自动下载:
87
+ 从 `@flun/nodejs-mobile-react-native` 1.0.1 起,`libnode.so` **不在 npm 包里**,安装时由 postinstall 脚本从 Gitee / GitHub
88
+ Release 自动下载:
85
89
 
86
- - **下载源**:Gitee 优先,失败自动回退 GitHub
87
- - **下载内容**:`android-libnode.zip`(双架构约 88 MB),含 `bin/` + `include/`;具体大小以实际下载为准;
88
- - **覆盖目标**:`node_modules/@flun/nodejs-mobile-react-native/android/libnode/`
89
- - **幂等**:已装版本匹配则跳过,不重复下载
90
- - **失败处理**:全部源失败时打印下载链接,不中断 npm 安装
90
+ - **下载源**:Gitee 优先,失败自动回退 GitHub
91
+ - **下载内容**:`android-libnode.zip`(双架构约 88 MB),含 `bin/` + `include/`;具体大小以实际下载为准;
92
+ - **覆盖目标**:`node_modules/@flun/nodejs-mobile-react-native/android/libnode/`
93
+ - **幂等**:已装版本匹配则跳过,不重复下载
94
+ - **失败处理**:全部源失败时打印下载链接,不中断 npm 安装
91
95
 
92
- 环境变量(按需):
96
+ 环境变量(按需):
93
97
 
94
98
  ```bash
95
99
  NODE_MOBILE_PREBUILT_VERSION=v22.23.2 # 覆盖默认版本
@@ -97,17 +101,17 @@ NODE_MOBILE_PREBUILT_SKIP=1 # 跳过全部下载
97
101
  NODE_MOBILE_PREBUILT_ANDROID_SKIP=1 # 只跳过 Android
98
102
  ```
99
103
 
100
- **用户不需要手动下载和替换**——除非要换成自编译的版本,见 2.2;
104
+ **用户不需要手动下载和替换**--除非要换成自编译的版本,见 2.2;
101
105
 
102
106
  ### 2.1 自动下载的预编译产物
103
107
 
104
- 路径:
108
+ 路径:
105
109
 
106
110
  ```
107
111
  <你的项目>/node_modules/@flun/nodejs-mobile-react-native/android/libnode/bin/<架构>/libnode.so
108
112
  ```
109
113
 
110
- 以下为 v18 产物的实测大小;其它版本的体积以实际下载为准:
114
+ 以下为 v18 产物的实测大小;其它版本的体积以实际下载为准:
111
115
 
112
116
  | 架构 | 大小 |
113
117
  | ----------- | ------- |
@@ -115,18 +119,19 @@ NODE_MOBILE_PREBUILT_ANDROID_SKIP=1 # 只跳过 Android
115
119
  | armeabi-v7a | 56 MB |
116
120
  | x86_64 | 62.3 MB |
117
121
 
118
- **版本特性**:v18 产物使用 `--with-intl=none`,不含 ICU,不能用 `\p{...}` / `\P{...}` Unicode 正则,必须配 Express 4;v22 起产物带 full-icu,可用 Unicode 正则与 Express 5;下载版本由 `package.json` 的 `prebuiltAssets.version` 决定;
122
+ **版本特性**:v18 产物使用 `--with-intl=none`,不含 ICU,不能用 `\p{...}` / `\P{...}` Unicode 正则,必须配 Express 4;v22
123
+ 起产物带 full-icu,可用 Unicode 正则与 Express 5;下载版本由 `package.json` 的 `prebuiltAssets.version` 决定;
119
124
 
120
125
  ### 2.2 替换为自编译产物
121
126
 
122
- 自动下载的产物若不含 full-icu(见 2.3 的 `strings` 验证),且需跑 Express 5 或使用 Unicode 正则,替换为自编译的 full-icu 版本;
127
+ 自动下载的产物若不含 full-icu(见 2.3 的 `strings` 验证),且需跑 Express 5 或使用 Unicode 正则,替换为自编译的 full-icu 版本;
123
128
 
124
- **预编译产物仓库**:
129
+ **预编译产物仓库**:
125
130
 
126
- - GitHub:https://github.com/OpenFlun/nodejs-mobile
127
- - Gitee(国内):https://gitee.com/OpenFlun/nodejs-mobile
131
+ - GitHub:https://github.com/OpenFlun/nodejs-mobile
132
+ - Gitee(国内):https://gitee.com/OpenFlun/nodejs-mobile
128
133
 
129
- **架构支持(按版本)**:
134
+ **架构支持(按版本)**:
130
135
 
131
136
  | 架构 | v18 | v22 |
132
137
  | ----------- | --- | --- |
@@ -134,16 +139,17 @@ NODE_MOBILE_PREBUILT_ANDROID_SKIP=1 # 只跳过 Android
134
139
  | x86_64 | ✓ | ✓ |
135
140
  | armeabi-v7a | ✓ | ✗ |
136
141
 
137
- 架构支持随产物版本变化;具体以 Releases 页面各版本的产物说明为准;
142
+ 架构支持随产物版本变化;具体以 Releases 页面各版本的产物说明为准;
138
143
 
139
- **替换步骤**:
144
+ **替换步骤**:
140
145
 
141
- 1. 下载 `android-libnode.zip`(含 `bin/` + `include/`)
146
+ 1. 下载 `android-libnode.zip`(含 `bin/` + `include/`)
142
147
  2. **整体替换** `你的项目/node_modules/@flun/nodejs-mobile-react-native/android/libnode/`
143
- 3. `mobileAppConfig.js` 的 `android.abiFilters` 只写该产物实际包含的架构(见解压后的 `libnode/bin/` 目录)
148
+ 3. `mobileAppConfig.js` 的 `android.abiFilters` 只写该产物实际包含的架构(见解压后的 `libnode/bin/` 目录)
144
149
  4. 跑 `npx node-mobile-app test` 或 `build`
145
150
 
146
- CLI 指纹机制检测到 `libnode.so` 变化后,会清 `.cxx` / `android/build` / `app/build`,并清 `nodejs-assets` 与依赖快照,触发重装、重编、重优化——**无需手动清缓存**;
151
+ CLI 指纹机制检测到 `libnode.so` 变化后,会清 `.cxx` / `android/build` / `app/build`,并清 `nodejs-assets` 与依赖快照,
152
+ 触发重装、重编、重优化--**无需手动清缓存**;
147
153
 
148
154
  **完整自编译流程**见 `自定义libnode指南.md`;
149
155
 
@@ -154,34 +160,34 @@ CLI 指纹机制检测到 `libnode.so` 变化后,会清 `.cxx` / `android/buil
154
160
  strings libnode.so | grep -c icudt78l
155
161
  ```
156
162
 
157
- - 输出几千(约 4300)→ 带 full-icu
163
+ - 输出几千(约 4300)→ 带 full-icu
158
164
  - 输出 0 → 不带
159
165
 
160
- **体积对照**(实测,strip 后):
166
+ **体积对照**(实测,strip 后):
161
167
 
162
168
  | 版本 | arm64-v8a | x86_64 |
163
169
  | ---------------------- | --------- | -------- |
164
- | v18(官方,无 ICU) | 59.6 MB | 62.3 MB |
165
- | v22(自编译,full-icu) | 112.4 MB | 117.2 MB |
170
+ | v18(官方,无 ICU) | 59.6 MB | 62.3 MB |
171
+ | v22(自编译,full-icu) | 112.4 MB | 117.2 MB |
166
172
 
167
- 体积差异约 50 MB,来自三部分:Node v22 核心引擎 + full-icu 数据(约 25–30 MB)+ V8 版本升级;**不是编译出错**;
173
+ 体积差异约 50 MB,来自三部分:Node v22 核心引擎 + full-icu 数据(约 25–30 MB)+ V8 版本升级;**不是编译出错**;
168
174
 
169
175
  ---
170
176
 
171
- ## 三、Express 版本选择(踩坑清单)
177
+ ## 三、Express 版本选择(踩坑清单)
172
178
 
173
- **选错版本会在 Node 进程启动时崩溃**,且错误信息极具误导性(如 `number 116 is not a function`);
179
+ **选错版本会在 Node 进程启动时崩溃**,且错误信息极具误导性(如 `number 116 is not a function`);
174
180
 
175
181
  ### 3.1 版本对照
176
182
 
177
183
  | libnode.so | Node.js | ICU | Express |
178
184
  | --------------------- | ------- | --- | ---------------------- |
179
- | 官方 v18 | v18 | 无 | **4.x**(如 `4.22.2`) |
180
- | 自编译 v22 + full-icu | v22 | 有 | **5.x**(如 `5.2.1`) |
185
+ | 官方 v18 | v18 | 无 | **4.x**(如 `4.22.2`) |
186
+ | 自编译 v22 + full-icu | v22 | 有 | **5.x**(如 `5.2.1`) |
181
187
 
182
- ### 3.2 场景 A(v18 + Express 4)
188
+ ### 3.2 场景 A(v18 + Express 4)
183
189
 
184
- `nodejs-project/package.json`:
190
+ `nodejs-project/package.json`:
185
191
 
186
192
  ```json
187
193
  {
@@ -191,13 +197,13 @@ strings libnode.so | grep -c icudt78l
191
197
  }
192
198
  ```
193
199
 
194
- 依赖里如有 `\P{ASCII}` 等 Unicode 正则,改写成 ASCII 等价:
200
+ 依赖里如有 `\P{ASCII}` 等 Unicode 正则,改写成 ASCII 等价:
195
201
 
196
202
  | 原写法 | ASCII 写法 |
197
203
  | ----------- | -------------- |
198
204
  | `\P{ASCII}` | `[^\x00-\x7F]` |
199
205
 
200
- ### 3.3 场景 B(v22 + full-icu + Express 5)
206
+ ### 3.3 场景 B(v22 + full-icu + Express 5)
201
207
 
202
208
  ```json
203
209
  {
@@ -207,15 +213,16 @@ strings libnode.so | grep -c icudt78l
207
213
  }
208
214
  ```
209
215
 
210
- **三个前提**:
216
+ **三个前提**:
211
217
 
212
- 1. `libnode.so` 确实带 full-icu(用 `strings` 验证过)
213
- 2. **不要**用 `@alloc/path-to-regexp` 替换原版——它的 `exports` 只有 `import` 条件,CJS 下 `require()` 报 `No "exports" main defined`
218
+ 1. `libnode.so` 确实带 full-icu(用 `strings` 验证过)
219
+ 2. **不要**用 `@alloc/path-to-regexp` 替换原版--它的 `exports` 只有 `import` 条件,CJS 下 `require()` 报
220
+ `No "exports" main defined`
214
221
  3. **不要**加任何 `overrides` 强制替换 `path-to-regexp`
215
222
 
216
223
  ### 3.4 Express 5 路由语法迁移
217
224
 
218
- `app.get('*')` 会抛 `TypeError: Missing parameter name`:
225
+ `app.get('*')` 会抛 `TypeError: Missing parameter name`:
219
226
 
220
227
  | Express 4 | Express 5 |
221
228
  | ---------------------------- | --------------------------------- |
@@ -234,7 +241,7 @@ npm ls express --all
234
241
  npm ls path-to-regexp --all
235
242
  ```
236
243
 
237
- **期望(场景 B)**:
244
+ **期望(场景 B)**:
238
245
 
239
246
  ```
240
247
  express@5.2.1
@@ -242,7 +249,7 @@ express@5.2.1
242
249
  └── path-to-regexp@8.4.2
243
250
  ```
244
251
 
245
- 如出现 `@alloc/path-to-regexp`,说明 `package-lock.json` 里有残留 `overrides`;**彻底清理**:
252
+ 如出现 `@alloc/path-to-regexp`,说明 `package-lock.json` 里有残留 `overrides`;**彻底清理**:
246
253
 
247
254
  ```powershell
248
255
  Remove-Item -Recurse -Force node_modules, package-lock.json
@@ -251,9 +258,10 @@ npm install
251
258
 
252
259
  ### 3.6 三个常见误区
253
260
 
254
- - **误区 1**:以为 `@alloc/path-to-regexp` 能解决 ESM 问题 → 它的 `exports` 也是纯 `import`,`require()` 依然失败
255
- - **误区 2**:只改路由语法就想让 Express 5 跑 → 若 `libnode.so` 无 full-icu,加载 `path-to-regexp@8` 时仍崩
256
- - **误区 3**:用 `overrides` 强制替换 `path-to-regexp` → 破坏依赖链,且 `package-lock.json` 会残留解析结果,删掉 `overrides` 也不生效
261
+ - **误区 1**:以为 `@alloc/path-to-regexp` 能解决 ESM 问题 → 它的 `exports` 也是纯 `import`,`require()` 依然失败
262
+ - **误区 2**:只改路由语法就想让 Express 5 跑 → 若 `libnode.so` 无 full-icu,加载 `path-to-regexp@8` 时仍崩
263
+ - **误区 3**:用 `overrides` 强制替换 `path-to-regexp` → 破坏依赖链,且 `package-lock.json` 会残留解析结果,删掉 `overrides`
264
+ 也不生效
257
265
 
258
266
  ---
259
267
 
@@ -275,55 +283,55 @@ $adb = "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe"
275
283
  & $adb logcat -d | Select-String 'NODEJS-MOBILE|ReactNativeJS'
276
284
  ```
277
285
 
278
- **正常日志**:
286
+ **正常日志**:
279
287
  ```
280
288
  NODEJS-MOBILE: [node-mobile-app] server URL: http://127.0.0.1:3000
281
289
  NODEJS-MOBILE: Express started on port 3000
282
290
  ReactNativeJS: Node started on http://127.0.0.1:3000
283
291
  ```
284
292
 
285
- **失败日志**:
293
+ **失败日志**:
286
294
  ```
287
295
  NODEJS-MOBILE: [node-mobile-app] failed: Node 服务 5 秒内未启动 -- 请检查 ./server.js 是否调用了 listen()
288
296
  ```
289
297
 
290
- **崩溃日志**:
298
+ **崩溃日志**:
291
299
 
292
300
  ```powershell
293
301
  & $adb logcat -c
294
302
  & $adb logcat | Select-String 'FATAL|AndroidRuntime|NODEJS-MOBILE'
295
303
  ```
296
304
 
297
- ### 4.2 手动清缓存(兜底)
305
+ ### 4.2 手动清缓存(兜底)
298
306
 
299
- **正常情况不需要**——CLI 指纹机制自动清;以下仅当指纹判断失效(如手动改过 `node-mobile-app-build/` 内文件)时用:
307
+ **正常情况不需要**--CLI 指纹机制自动清;以下仅当指纹判断失效(如手动改过 `node-mobile-app-build/` 内文件)时用:
300
308
 
301
309
  ```powershell
302
- # 最彻底:删整个 RN 工程
310
+ # 最彻底:删整个 RN 工程
303
311
  Remove-Item -Recurse -Force D:\你的项目\node-mobile-app-build
304
312
 
305
313
  # 或删插件 CMake 缓存
306
314
  Remove-Item -Recurse -Force D:\你的项目\node_modules\@flun\nodejs-mobile-react-native\android\.cxx
307
315
  Remove-Item -Recurse -Force D:\你的项目\node_modules\@flun\nodejs-mobile-react-native\android\build
308
316
 
309
- # 或删指纹文件(下次跑 = 全新构建)
317
+ # 或删指纹文件(下次跑 = 全新构建)
310
318
  Remove-Item -Force D:\你的项目\node-mobile-app-build\.build-fingerprint.json
311
319
  ```
312
320
 
313
- 或直接:
321
+ 或直接:
314
322
 
315
323
  ```powershell
316
324
  npx node-mobile-app clean
317
325
  ```
318
326
 
319
- ### 4.3 手动端口转发(`test` 会自动做)
327
+ ### 4.3 手动端口转发(`test` 会自动做)
320
328
 
321
329
  ```powershell
322
330
  & "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" reverse tcp:8081 tcp:8081
323
331
  & "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" reverse --list
324
332
  ```
325
333
 
326
- ### 4.4 模拟器(x86_64)
334
+ ### 4.4 模拟器(x86_64)
327
335
 
328
336
  ```powershell
329
337
  # 列出 AVD
@@ -333,7 +341,7 @@ npx node-mobile-app clean
333
341
  & "$env:LOCALAPPDATA\Android\Sdk\emulator\emulator.exe" -avd Pixel_7_API_34
334
342
  ```
335
343
 
336
- **三个必须**:
344
+ **三个必须**:
337
345
  - `mobileAppConfig.js` 的 `abiFilters` 含 `x86_64`
338
346
  - `libnode/bin/x86_64/libnode.so` 存在
339
347
  - 模拟器镜像是 **x86_64 架构**
@@ -342,6 +350,6 @@ npx node-mobile-app clean
342
350
 
343
351
  ## 相关文档
344
352
 
345
- - [README.md](./README.md) —— 快速开始、配置字段、命令
346
- - [自定义libnode指南.md](./自定义libnode指南.md) —— 自编译 v22 + full-icu 完整流程
347
- - [libnode.so 预编译仓库](https://github.com/OpenFlun/nodejs-mobile)([Gitee](https://gitee.com/OpenFlun/nodejs-mobile))
353
+ - [README.md](./README.md) -- 快速开始、配置字段、命令
354
+ - [自定义libnode指南.md](./自定义libnode指南.md) -- 自编译 v22 + full-icu 完整流程
355
+ - [libnode.so 预编译仓库](https://github.com/OpenFlun/nodejs-mobile)([Gitee](https://gitee.com/OpenFlun/nodejs-mobile))
package/CHANGELOG.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # 变更日志
2
- ## [4.0.4] - 2026-10-21 12:10
2
+ ## [4.0.7] - 2026-10-25 15:16
3
3
  ### 优化
4
- - 进一步优化 .md 文件;
4
+ - 项目标点已改为以英文标点为主;
5
+ - 行宽改为以 123 为主,部分超宽表格改为了列表;
5
6
 
6
- ## [4.0.4] - 2026-10-21 10:02
7
- ### 优化
8
- - 优化了大量文件细节
7
+ ## [4.0.6] - 2026-10-22 16:31
8
+ ### 更新
9
+ - 同步升级了一些依赖包;
9
10
 
10
- ## [4.0.3] - 2026-10-21 08:28
11
- ### 修复
12
- - **`[3/11]` 提示中清理目标重复**:`depsChanged` 与 `appInfoChanged` 同时为真时,`targets` 数组会推入两次 `Gradle 缓存`,提示显示为"清理 依赖缓存、Gradle 缓存、Gradle 缓存";现用 `[...new Set(targets)]` 去重,提示与清理目标一致;
13
- - **删除依赖快照误用 `removeDir`**:`.deps-snapshot.json` 是文件,原代码调用 `removeDir` 删除;该函数名与实现均针对目录,当前靠 `fs.rmSync` 的兼容性正常工作,但语义错位,一旦 `removeDir` 实现收紧(如增加 `isDirectory` 判断)会静默失效,导致快照残留、`[5/11]` 误判"依赖与环境未变化";现改用 `fs.rmSync(path, { force: true })` 直接删除文件;
11
+ ## [4.0.5] - 2026-10-21 12:10
12
+ ### 优化
13
+ - 进一步优化 .md 文件;
package/LICENSE CHANGED
@@ -1,12 +1,17 @@
1
1
  ISC 许可证 (ISC License)
2
2
 
3
- 版权所有 (c) 2026, flun <open@flun.top>
3
+ Copyright (c) 2026, flun <open@flun.top>
4
4
 
5
- 特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向其提供本软件的人这样做,但须满足以下条件:
5
+ 特此免费授予任何获得本软件及相关文档文件("软件")副本的人,不受限制地处理本软件的权利,
6
+ 包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,
7
+ 并允许向其提供本软件的人这样做,但须满足以下条件:
6
8
 
7
9
  上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中;
8
10
 
9
- 本软件按“原样”提供,不作任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证;在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而产生的任何索赔、损害或其他责任负责,无论是合同之诉、侵权之诉还是其他行为之诉;
11
+ 本软件按"原样"提供,不作任何形式的明示或暗示的保证,
12
+ 包括但不限于适销性、特定用途的适用性和不侵权的保证;
13
+ 在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其它交易而产生的
14
+ 任何索赔、损害或其它责任负责,无论是合同之诉、侵权之诉还是其它行为之诉;
10
15
 
11
16
  ---
12
17
 
@@ -26,4 +31,4 @@ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
26
31
  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
27
32
  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
28
33
  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
29
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
34
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.