cj-tauri 1.1.2 → 2.0.0
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/README.md +64 -18
- package/cjpm.toml +52 -52
- package/cli/cjpm.toml +10 -1
- package/cli/src/doctor.cj +4 -2
- package/cli/src/main.cj +11 -3
- package/cli/src/manifest.cj +558 -0
- package/cli/src/project.cj +38 -22
- package/cli/src/scaffold.cj +369 -361
- package/cli/src/sync.cj +526 -0
- package/cli/src/util.cj +168 -159
- package/cli/templates/app/README.md +48 -80
- package/cli/templates/app/{capabilities → assets/capabilities}/default.json +7 -7
- package/cli/templates/app/{ui → assets/ui}/index.html +118 -118
- package/cli/templates/app/cj-tauri.toml +22 -0
- package/cli/templates/app/cjpm.toml +34 -17
- package/cli/templates/app/src/main.cj +90 -88
- package/cli/templates/app-react/README.md +56 -67
- package/cli/templates/app-react/{capabilities → assets/capabilities}/default.json +7 -7
- package/cli/templates/app-react/{ui → assets/ui}/package.json +19 -19
- package/cli/templates/app-react/{ui → assets/ui}/src/main.jsx +6 -6
- package/cli/templates/app-react/{ui → assets/ui}/vite.config.js +24 -24
- package/cli/templates/app-react/cj-tauri.toml +23 -0
- package/cli/templates/app-react/cjpm.toml +34 -17
- package/cli/templates/app-react/src/main.cj +91 -102
- package/cli/templates/app-vue/README.md +56 -60
- package/cli/templates/app-vue/{capabilities → assets/capabilities}/default.json +7 -7
- package/cli/templates/app-vue/{ui → assets/ui}/package.json +18 -18
- package/cli/templates/app-vue/{ui → assets/ui}/src/main.js +4 -4
- package/cli/templates/app-vue/{ui → assets/ui}/vite.config.js +24 -24
- package/cli/templates/app-vue/cj-tauri.toml +23 -0
- package/cli/templates/app-vue/cjpm.toml +34 -17
- package/cli/templates/app-vue/src/main.cj +91 -102
- package/cli/templates/{ohos-pc → ohos-skeleton}/AppScope/app.json5 +13 -13
- package/cli/templates/{ohos-pc → ohos-skeleton}/AppScope/resources/base/element/string.json +8 -8
- package/cli/templates/{ohos-pc → ohos-skeleton}/AppScope/resources/base/media/layered_image.json +6 -6
- package/cli/templates/{ohos-pc → ohos-skeleton}/README.md +79 -79
- package/cli/templates/{ohos-pc → ohos-skeleton}/build-profile.json5 +46 -46
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/build-profile.json5 +26 -26
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/cjpm.toml +43 -43
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/hvigorfile.ts +6 -6
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/oh-package.json5 +9 -9
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/cangjie/ability_stage.cj +17 -17
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/cangjie/app_host.cj +94 -94
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/cangjie/index.cj +167 -167
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/cangjie/main_ability.cj +139 -139
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/module.json5 +49 -49
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/element/color.json +8 -8
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/element/string.json +16 -16
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/media/layered_image.json +6 -6
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/profile/main_pages.json +2 -2
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/rawfile/capabilities.json +6 -6
- package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/rawfile/index.html +92 -92
- package/cli/templates/{ohos-pc → ohos-skeleton}/hvigor/hvigor-config.json5 +5 -5
- package/cli/templates/{ohos-pc → ohos-skeleton}/hvigorfile.ts +6 -6
- package/cli/templates/{ohos-pc → ohos-skeleton}/oh-package.json5 +10 -10
- package/package.json +4 -2
- package/prebuilt/win32-x64/cj-tauri.exe +0 -0
- package/src/app.cj +49 -20
- package/src/app_spec.cj +76 -0
- package/src/arkweb_script.cj +142 -154
- package/src/host.cj +20 -17
- package/src/host_arkweb.cj +778 -740
- package/src/host_webkit.cj +22 -0
- package/src/host_webview2.cj +22 -0
- package/src/launch.cj +62 -0
- package/src/platform/platform_app_context.cj +77 -0
- package/src/platform/platform_assets.cj +33 -0
- package/src/platform/platform_discover.cj +176 -0
- package/src/platform/platform_env.cj +29 -0
- package/src/platform/platform_feature.cj +31 -0
- package/src/platform/platform_page_source.cj +87 -0
- package/src/platform/platform_target_info.cj +32 -0
- package/src/platform_host_provider.cj +87 -0
- package/src/plugin.cj +36 -2
- package/src/plugins/clipboard/plugin_clipboard.cj +8 -0
- package/src/plugins/menu/plugin_menu.cj +158 -150
- package/src/plugins/notification/plugin_notification.cj +8 -0
- package/src/plugins/serial/plugin_serial.cj +454 -442
- package/src/plugins/serial/serial_bridge.cj +194 -186
- package/src/plugins/serial/serial_ohos_stub.cj +61 -0
- package/src/plugins/shell/plugin_shell.cj +258 -230
- package/src/plugins/sqlite/plugin_sqlite.cj +710 -697
- package/src/plugins/sqlite/sqlite_ffi.cj +211 -206
- package/src/plugins/sqlite/sqlite_ohos_stub.cj +91 -0
- package/src/tests/app_spec_test.cj +127 -0
- package/src/tests/fake_host.cj +23 -8
- package/src/tests/platform_contract_test.cj +251 -0
- package/src/tests/plugin_test.cj +585 -542
- package/src/version.cj +1 -1
- package/src/host_factory.cj +0 -48
- /package/cli/templates/app-react/{ui → assets/ui}/index.html +0 -0
- /package/cli/templates/app-react/{ui → assets/ui}/src/App.css +0 -0
- /package/cli/templates/app-react/{ui → assets/ui}/src/App.jsx +0 -0
- /package/cli/templates/app-vue/{ui → assets/ui}/index.html +0 -0
- /package/cli/templates/app-vue/{ui → assets/ui}/src/App.vue +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/AppScope/resources/base/media/background.png +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/AppScope/resources/base/media/foreground.png +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/build-hap.sh +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/media/background.png +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/media/foreground.png +0 -0
- /package/cli/templates/{ohos-pc → ohos-skeleton}/entry/src/main/resources/base/media/startIcon.png +0 -0
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
WebView 宿主、IPC 双向桥(`invoke` / `resolve` / `event`)、能力安全模型(capability 白名单)。
|
|
6
6
|
|
|
7
7
|
- 仓库与完整文档:<https://atomgit.com/qq8864/cj-tauri>
|
|
8
|
+
- 当前版本:**2.0.0**(主版本:删除了已失效的 `setHostFactory` / `requireInjectedHost`,见文末「2.0.0 变更」)
|
|
8
9
|
- 当前状态:**Windows(WebView2)、Linux(WebKitGTK)与鸿蒙 PC(ArkWeb)均已实机跑通**
|
|
9
10
|
|
|
10
11
|
## 前置条件:仓颉 SDK
|
|
@@ -13,7 +14,7 @@ WebView 宿主、IPC 双向桥(`invoke` / `resolve` / `event`)、能力安
|
|
|
13
14
|
把你的应用编译出来。所以请先装 SDK(验证版本 **1.2.0**,含 **stdx**),并让本包能找到它:
|
|
14
15
|
|
|
15
16
|
```bash
|
|
16
|
-
# Linux
|
|
17
|
+
# Linux
|
|
17
18
|
export CANGJIE_HOME=/opt/cangjie/cangjie
|
|
18
19
|
|
|
19
20
|
# Windows cmd
|
|
@@ -21,7 +22,15 @@ set CANGJIE_HOME=D:\Program Files (x86)\Cangjie
|
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
不设 `CANGJIE_HOME` 时,本包会探测常见安装位置(Windows `D:\Program Files (x86)\Cangjie`、
|
|
24
|
-
Linux `/opt/cangjie/cangjie
|
|
25
|
+
Linux `/opt/cangjie/cangjie`)。另外两个变量视情况给:
|
|
26
|
+
|
|
27
|
+
| 变量 | 什么时候需要 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `CJ_TAURI_ROOT` | 不在 cj-tauri 仓库内运行、又找不到框架根目录时(`create` 要把框架路径写进工程) |
|
|
30
|
+
| `CANGJIE_STDX` | 应用的 `cjpm.toml` 用 `${CANGJIE_STDX}` 展开 stdx 路径;本包会从框架/工程的 toml 里探测,探不到就照此变量 |
|
|
31
|
+
| `CANGJIE_STDX_OHOS` | 只在构建鸿蒙工程时用(鸿蒙版 stdx,`build-hap.sh` 按它找动态库) |
|
|
32
|
+
|
|
33
|
+
装好后自检:
|
|
25
34
|
|
|
26
35
|
```bash
|
|
27
36
|
npx cj-tauri info # 打印框架 / 项目 / stdx / SDK / cjpm / C 桥 的解析结果
|
|
@@ -33,46 +42,69 @@ npx cj-tauri info # 打印框架 / 项目 / stdx / SDK / cjpm / C 桥 的
|
|
|
33
42
|
## 用法
|
|
34
43
|
|
|
35
44
|
```bash
|
|
36
|
-
npx cj-tauri create myapp
|
|
45
|
+
npx cj-tauri create myapp --template app # 内联 HTML,零 Node(缺省模板)
|
|
37
46
|
cd myapp
|
|
38
|
-
npx cj-tauri
|
|
47
|
+
npx cj-tauri sync # 按清单派生 targets/ 骨架(首次;重跑幂等)
|
|
48
|
+
npx cj-tauri dev # 构建 C 桥 + cjpm build + 启动窗口
|
|
39
49
|
|
|
40
|
-
npx cj-tauri create myapp-vue --template vue # Vue 3 + Vite
|
|
50
|
+
npx cj-tauri create myapp-vue --template vue # Vue 3 + Vite(前端工程在 assets/ui/)
|
|
41
51
|
npx cj-tauri create myapp-react --template react # React 18 + Vite
|
|
42
52
|
|
|
43
|
-
npx cj-tauri create myohos --template ohos # 鸿蒙 PC
|
|
53
|
+
npx cj-tauri create myohos --template ohos # 鸿蒙 PC:同一份业务代码 + targets/ohos
|
|
44
54
|
npx cj-tauri create myohos --template ohos --bundle com.example.myapp --label "我的应用"
|
|
45
55
|
|
|
46
56
|
npm i -g cj-tauri # 也可以全局安装,之后直接用 cj-tauri <子命令>
|
|
47
57
|
```
|
|
48
58
|
|
|
59
|
+
**一份业务代码,骨架按目标派生**——`create` 只生成清单与业务侧,平台骨架是 `sync` 的产物:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
myapp/
|
|
63
|
+
├── cj-tauri.toml # 应用清单——单一真相(id/version/窗口/资产/能力目录)
|
|
64
|
+
├── cjpm.toml # 业务包(static 库;骨架以 path 依赖引用)
|
|
65
|
+
├── src/main.cj # 业务装配点 build(): AppSpec(零平台知识)
|
|
66
|
+
├── assets/
|
|
67
|
+
│ ├── ui/index.html # 前端页面(任意 Web 技术栈)
|
|
68
|
+
│ └── capabilities/default.json # 能力白名单(命令 / 事件 / 权限集)
|
|
69
|
+
└── targets/ # cj-tauri sync 生成(勿手改;check 判漂移)
|
|
70
|
+
├── desktop/ # 桌面可执行(launcher 调 build())
|
|
71
|
+
└── ohos/ # 鸿蒙 hap 工程(DevEco + build-hap.sh)
|
|
72
|
+
```
|
|
73
|
+
|
|
49
74
|
| 子命令 | 作用 |
|
|
50
75
|
|---|---|
|
|
51
|
-
| `create <项目名> [--template app\|vue\|react\|ohos]` |
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
76
|
+
| `create <项目名> [--template app\|vue\|react\|ohos]` | 生成统一工程(清单 + `src/` + `assets/`);`--bundle` / `--label` 只对 `ohos` 模板有意义,缺省由项目名推导 |
|
|
77
|
+
| `sync [desktop\|ohos]` | 按清单派生 `targets/` 骨架(缺省两端都派生;幂等重跑) |
|
|
78
|
+
| `dev` | 构建 C 桥 + `cjpm build` + 启动应用;Vite 模板会接管 dev server(HMR) |
|
|
79
|
+
| `build` | 构建 C 桥 + `cjpm build`;鸿蒙端在 `targets/ohos` 里 `bash build-hap.sh` |
|
|
80
|
+
| `run` | 运行已构建产物;鸿蒙端 `bash build-hap.sh --install`(构建 + 装机 + 拉起) |
|
|
81
|
+
| `check` | 校验 `cj-tauri.toml`(id / 窗口 / 资产存在)+ `targets/` 骨架漂移 + 插件三方比对 |
|
|
82
|
+
| `info [--json]` | 环境自检(排障先跑它);`--json` 只输出插件清单,机器可读 |
|
|
83
|
+
| `doctor` | 环境自检逐行给结论(每条自带「缺了就怎么办」) |
|
|
56
84
|
| `help` | 帮助 |
|
|
57
85
|
|
|
58
86
|
## 鸿蒙 PC(`--template ohos`)
|
|
59
87
|
|
|
60
88
|
同一套框架换个宿主:桌面用 WebView2 / WebKitGTK,鸿蒙 PC 用 **ArkWeb**,上层页面、命令层、能力校验不用改。
|
|
89
|
+
`--template ohos` 生成的仍是那种**统一工程**(`cj-tauri.toml` + `src/` + `assets/`),只是清单里带鸿蒙端信息
|
|
90
|
+
(`[app] id` 就是 `bundleName`);DevEco 工程是 `sync` 的产物,落在 `targets/ohos/`:
|
|
61
91
|
|
|
62
92
|
```bash
|
|
63
|
-
npx cj-tauri create myohos --template ohos
|
|
93
|
+
npx cj-tauri create myohos --template ohos --bundle com.example.myapp --label "我的应用"
|
|
64
94
|
cd myohos
|
|
65
|
-
|
|
95
|
+
npx cj-tauri sync ohos # 派生 targets/ohos(DevEco 骨架 + rawfile 里的页面与能力清单)
|
|
96
|
+
cd targets/ohos
|
|
97
|
+
bash build-hap.sh --install # 构建 hap + hdc 装机 + aa start
|
|
66
98
|
```
|
|
67
99
|
|
|
68
|
-
|
|
100
|
+
`targets/ohos/` 是标准 DevEco 工程(`entry/` + `AppScope/` + `build-profile.json5` + `hvigorfile.ts`),
|
|
69
101
|
鸿蒙相关的那层很薄:
|
|
70
102
|
|
|
71
103
|
| 路径 | 作用 |
|
|
72
104
|
|---|---|
|
|
73
105
|
| `entry/src/main/cangjie/main_ability.cj` | UIAbility:`ArkWebRuntime.configure(filesDir)` → 非 UI 线程 `spawn { run() }` → 等宿主登记再 `loadContent` |
|
|
74
|
-
| `entry/src/main/cangjie/
|
|
75
|
-
| `entry/src/main/resources/rawfile/` | `index.html
|
|
106
|
+
| `entry/src/main/cangjie/app_host.cj` | `@Component` 的 ArkWeb 宿主 + 双向桥(**必须住应用模块**,框架包引用 ArkUI 会启动即崩);调你 `assets/` 里那份业务 `build()` |
|
|
107
|
+
| `entry/src/main/resources/rawfile/` | `index.html` 与能力清单(从 `assets/` 拷进来的真文件) |
|
|
76
108
|
| `build-hap.sh` | 唯一构建入口:探测 DevEco / stdx、`--no-daemon` 跑 hvigor、可选 `--install` |
|
|
77
109
|
|
|
78
110
|
前置两件事:
|
|
@@ -87,7 +119,8 @@ bash build-hap.sh --install # 构建 hap + hdc 装机 + aa start;等价
|
|
|
87
119
|
|
|
88
120
|
已知限制:签名要在 DevEco 里配(命令行不做自动签名,换 `bundleName` 需重新签);同一份调试签名下两个
|
|
89
121
|
工程会互相顶掉安装位;单窗口、暂无原生对话框(那两条能力位如实返回 0);没有可用的 C 桥,
|
|
90
|
-
`launchHidden` / 串口 /
|
|
122
|
+
`launchHidden` / 串口 / 托盘这类宿主能力在鸿蒙上不提供。改完 `assets/` 里的页面或能力清单要重跑
|
|
123
|
+
`cj-tauri sync ohos`(`targets/` 是生成物,`check` 会报漂移)。
|
|
91
124
|
|
|
92
125
|
真机上怎么自证它通了(hilog,`CjTauri` tag):
|
|
93
126
|
|
|
@@ -104,11 +137,24 @@ main window keeps system default 2090x1394 px at density 190% on screen 3120x208
|
|
|
104
137
|
- **环境自检**:`cjpm` 与 SDK 运行时库的定位、`PATH` / `LD_LIBRARY_PATH` 的拼装都在这里完成;
|
|
105
138
|
- **CLI 本体的获取**:优先用包内预编译二进制(`prebuilt/<平台-架构>/`),没有则把 CLI 源码拷到
|
|
106
139
|
`~/.cache/cj-tauri/<版本>/` 下用本机 `cjpm build` 一次并缓存 —— 不往安装目录写产物,避免全局安装只读;
|
|
107
|
-
- **数据目录**:Linux
|
|
140
|
+
- **数据目录**:Linux 用 `$XDG_CACHE_HOME/cj-tauri`(默认 `~/.cache/cj-tauri`),Windows 用 `%LOCALAPPDATA%\cj-tauri`。
|
|
108
141
|
|
|
109
142
|
已知限制:首次 `dev` / `build` 会把 C 桥构建到**框架目录的 `native/`** 下(应用 `cjpm.toml` 的
|
|
110
143
|
链接参数指向那里),所以包安装目录需要可写;如果装在只读路径下,请改用仓库内运行方式。
|
|
111
144
|
|
|
145
|
+
## 2.0.0 变更
|
|
146
|
+
|
|
147
|
+
- **不兼容**:删除已失效的公开 API `setHostFactory` / `requireInjectedHost`(框架侧单槽宿主注入)。
|
|
148
|
+
源码里仍在调用它们的应用会编译失败——那些调用本来也不生效(`requireInjectedHost` 没有任何调用方)。
|
|
149
|
+
多宿主注入走 `registerHost(HostProvider)`(带优先级),鸿蒙宿主已内置。
|
|
150
|
+
- **修复**:`sync` 生成的工程在 Windows 上编不过(TOML 路径保留反斜杠触发 `errLexEscape`、鸿蒙 entry 的
|
|
151
|
+
`compile-option` 内层引号未转义、生成源码里 `url=\"…\"` 少一层转义);`cj-tauri check` 的三方比对在
|
|
152
|
+
Windows 上因产物名 `main.exe` 恒被跳过;示例 `modbus-poll` 缺串口插件 import。
|
|
153
|
+
- **门禁**:版本校验从五处扩到六处(新增官网 `website/index.html`),并给与 `docs/` 同源的图片 / 图
|
|
154
|
+
加上了逐字节比对——官网是独立拷贝、此前不在门禁里,正是它漏更的根因。
|
|
155
|
+
|
|
156
|
+
完整变更见仓库的 `CHANGELOG.md` 的 `[2.0.0] - 2026-10-23`。
|
|
157
|
+
|
|
112
158
|
## License
|
|
113
159
|
|
|
114
160
|
[MIT](https://atomgit.com/qq8864/cj-tauri/blob/main/LICENSE) © 2026 yangyongzhen
|
package/cjpm.toml
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
cjc-version = "1.0.5"
|
|
3
|
-
name = "cjTauri"
|
|
4
|
-
description = "仓颉版 Tauri:轻量跨端混合开发框架(WebView 宿主 + IPC 桥 + 能力安全模型)"
|
|
5
|
-
version = "
|
|
6
|
-
target-dir = ""
|
|
7
|
-
output-type = "static"
|
|
8
|
-
compile-option = ""
|
|
9
|
-
override-compile-option = ""
|
|
10
|
-
link-option = ""
|
|
11
|
-
package-configuration = {}
|
|
12
|
-
|
|
13
|
-
[dependencies]
|
|
14
|
-
|
|
15
|
-
[target.x86_64-unknown-linux-gnu]
|
|
16
|
-
# -lsqlite3:sqlite 插件直连发行版系统库(D-018 第 8 条);Windows 侧未落地,故 mingw 段不加
|
|
17
|
-
link-option = "-Lnative -lcjtbridge -lsqlite3 -lwebkit2gtk-4.1 -lgtk-3 -lgdk-3 -lglib-2.0 -lgio-2.0 -lsoup-3.0 -ljavascriptcoregtk-4.1 -lgobject-2.0"
|
|
18
|
-
|
|
19
|
-
[target.x86_64-unknown-linux-gnu.bin-dependencies]
|
|
20
|
-
path-option = ["${CANGJIE_STDX}"]
|
|
21
|
-
|
|
22
|
-
[target.x86_64-w64-mingw32]
|
|
23
|
-
# -lsqlite3:sqlite 插件子包需要(导入库 libsqlite3.a 由 sqlite3.def 生成,DLL 本身不入库——
|
|
24
|
-
# 跑 sqlite 相关测试/应用时本机自备 native/sqlite3.dll;不碰 sqlite 的应用不引用它就不链接)
|
|
25
|
-
link-option = "-Lnative -lcjtbridge -lsqlite3"
|
|
26
|
-
|
|
27
|
-
[target.x86_64-w64-mingw32.bin-dependencies]
|
|
28
|
-
path-option = ["${CANGJIE_STDX}"]
|
|
29
|
-
|
|
30
|
-
[target.aarch64-linux-ohos]
|
|
31
|
-
# 鸿蒙目标(真机 / 鸿蒙 PC):交叉编译工具链与 sysroot 由 DevEco 仓颉套件提供,
|
|
32
|
-
# 四个路径全部走环境变量展开——hvigor 构建时由插件注入前两个,命令行交叉编译时自行 export 同名变量。
|
|
33
|
-
# 照抄 DevEco 生成的工程(TestCj2)同一串参数,避免两套口径。
|
|
34
|
-
# 末尾的 `--dy-std` 不可省:鸿蒙上应用模块(entry)是 `output-type = "dynamic"` 且用动态 std,
|
|
35
|
-
# 框架包若按默认的静态 std 编,两者混进同一个 .so 就会出现**两套 std 运行时**——表象是
|
|
36
|
-
# 启动即崩在框架包全局初始化(`cjTauri::package_global_init` → 跨包 `_CGP*` 包初始化符号
|
|
37
|
-
# 解析到模块内偏移、跳到未映射地址 0x50xxx),窗口起不来且 hilog 只有一行 SIGSEGV。
|
|
38
|
-
# 只加在鸿蒙段:桌面两平台仍是静态 std,产物形态不变。
|
|
39
|
-
compile-option = "-B \"${DEVECO_CANGJIE_HOME}/build-tools/third_party/llvm/bin\" -B \"${DEVECO_OH_NATIVE_HOME}/sysroot/usr/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/sysroot/usr/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/llvm/lib/clang/15.0.4/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/llvm/lib/aarch64-linux-ohos\" --sysroot \"${DEVECO_OH_NATIVE_HOME}/sysroot\" --dy-std"
|
|
40
|
-
|
|
41
|
-
[target.aarch64-linux-ohos.bin-dependencies]
|
|
42
|
-
# stdx 必须用鸿蒙版(官方发布 cangjie-stdx-ohos-aarch64-<cjc 版本>.zip,桌面版 ABI 不通);
|
|
43
|
-
# CANGJIE_OHOS_LIBS 指 DevEco 套件的 api/lib/linux_ohos_aarch64_cjnative/ohos(仓颉标准库 + ohos API 绑定)。
|
|
44
|
-
#
|
|
45
|
-
# 后两项是 ArkUI 的**宏库**与 kit 绑定,hvigor 构建时由 cangjie-build-support 注入
|
|
46
|
-
# (cangjie-path-impl.js 的 getBuildEnvByAbi):AARCH64_MACRO_LIBS = <sdk>/api/macro/ohos
|
|
47
|
-
# (`lib-macro_ohos.arkui.state_macro_manage.dll` 就在里面),AARCH64_KIT_LIBS =
|
|
48
|
-
# .../linux_ohos_aarch64_cjnative/kit。**宏库目录漏挂的症状极具误导性**:`@Component` 的
|
|
49
|
-
# 声明能解析到(.cjo 在 ohos 目录里),但宏实现库找不到,报的是
|
|
50
|
-
# `macro evaluation has failed for macro call 'Component'`——看着像「宏不能用在框架包里」。
|
|
51
|
-
# 命令行交叉编译时这两个变量要自己 export,取值见上。
|
|
52
|
-
path-option = ["
|
|
1
|
+
[package]
|
|
2
|
+
cjc-version = "1.0.5"
|
|
3
|
+
name = "cjTauri"
|
|
4
|
+
description = "仓颉版 Tauri:轻量跨端混合开发框架(WebView 宿主 + IPC 桥 + 能力安全模型)"
|
|
5
|
+
version = "2.0.0"
|
|
6
|
+
target-dir = ""
|
|
7
|
+
output-type = "static"
|
|
8
|
+
compile-option = ""
|
|
9
|
+
override-compile-option = ""
|
|
10
|
+
link-option = ""
|
|
11
|
+
package-configuration = {}
|
|
12
|
+
|
|
13
|
+
[dependencies]
|
|
14
|
+
|
|
15
|
+
[target.x86_64-unknown-linux-gnu]
|
|
16
|
+
# -lsqlite3:sqlite 插件直连发行版系统库(D-018 第 8 条);Windows 侧未落地,故 mingw 段不加
|
|
17
|
+
link-option = "-Lnative -lcjtbridge -lsqlite3 -lwebkit2gtk-4.1 -lgtk-3 -lgdk-3 -lglib-2.0 -lgio-2.0 -lsoup-3.0 -ljavascriptcoregtk-4.1 -lgobject-2.0"
|
|
18
|
+
|
|
19
|
+
[target.x86_64-unknown-linux-gnu.bin-dependencies]
|
|
20
|
+
path-option = ["${CANGJIE_STDX}"]
|
|
21
|
+
|
|
22
|
+
[target.x86_64-w64-mingw32]
|
|
23
|
+
# -lsqlite3:sqlite 插件子包需要(导入库 libsqlite3.a 由 sqlite3.def 生成,DLL 本身不入库——
|
|
24
|
+
# 跑 sqlite 相关测试/应用时本机自备 native/sqlite3.dll;不碰 sqlite 的应用不引用它就不链接)
|
|
25
|
+
link-option = "-Lnative -lcjtbridge -lsqlite3"
|
|
26
|
+
|
|
27
|
+
[target.x86_64-w64-mingw32.bin-dependencies]
|
|
28
|
+
path-option = ["${CANGJIE_STDX}"]
|
|
29
|
+
|
|
30
|
+
[target.aarch64-linux-ohos]
|
|
31
|
+
# 鸿蒙目标(真机 / 鸿蒙 PC):交叉编译工具链与 sysroot 由 DevEco 仓颉套件提供,
|
|
32
|
+
# 四个路径全部走环境变量展开——hvigor 构建时由插件注入前两个,命令行交叉编译时自行 export 同名变量。
|
|
33
|
+
# 照抄 DevEco 生成的工程(TestCj2)同一串参数,避免两套口径。
|
|
34
|
+
# 末尾的 `--dy-std` 不可省:鸿蒙上应用模块(entry)是 `output-type = "dynamic"` 且用动态 std,
|
|
35
|
+
# 框架包若按默认的静态 std 编,两者混进同一个 .so 就会出现**两套 std 运行时**——表象是
|
|
36
|
+
# 启动即崩在框架包全局初始化(`cjTauri::package_global_init` → 跨包 `_CGP*` 包初始化符号
|
|
37
|
+
# 解析到模块内偏移、跳到未映射地址 0x50xxx),窗口起不来且 hilog 只有一行 SIGSEGV。
|
|
38
|
+
# 只加在鸿蒙段:桌面两平台仍是静态 std,产物形态不变。
|
|
39
|
+
compile-option = "-B \"${DEVECO_CANGJIE_HOME}/build-tools/third_party/llvm/bin\" -B \"${DEVECO_OH_NATIVE_HOME}/sysroot/usr/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/sysroot/usr/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/llvm/lib/clang/15.0.4/lib/aarch64-linux-ohos\" -L \"${DEVECO_OH_NATIVE_HOME}/llvm/lib/aarch64-linux-ohos\" --sysroot \"${DEVECO_OH_NATIVE_HOME}/sysroot\" --dy-std"
|
|
40
|
+
|
|
41
|
+
[target.aarch64-linux-ohos.bin-dependencies]
|
|
42
|
+
# stdx 必须用鸿蒙版(官方发布 cangjie-stdx-ohos-aarch64-<cjc 版本>.zip,桌面版 ABI 不通);
|
|
43
|
+
# CANGJIE_OHOS_LIBS 指 DevEco 套件的 api/lib/linux_ohos_aarch64_cjnative/ohos(仓颉标准库 + ohos API 绑定)。
|
|
44
|
+
#
|
|
45
|
+
# 后两项是 ArkUI 的**宏库**与 kit 绑定,hvigor 构建时由 cangjie-build-support 注入
|
|
46
|
+
# (cangjie-path-impl.js 的 getBuildEnvByAbi):AARCH64_MACRO_LIBS = <sdk>/api/macro/ohos
|
|
47
|
+
# (`lib-macro_ohos.arkui.state_macro_manage.dll` 就在里面),AARCH64_KIT_LIBS =
|
|
48
|
+
# .../linux_ohos_aarch64_cjnative/kit。**宏库目录漏挂的症状极具误导性**:`@Component` 的
|
|
49
|
+
# 声明能解析到(.cjo 在 ohos 目录里),但宏实现库找不到,报的是
|
|
50
|
+
# `macro evaluation has failed for macro call 'Component'`——看着像「宏不能用在框架包里」。
|
|
51
|
+
# 命令行交叉编译时这两个变量要自己 export,取值见上。
|
|
52
|
+
path-option = ["${CANGJIE_STDX_OHOS}", "${CANGJIE_OHOS_LIBS}", "${AARCH64_MACRO_LIBS}", "${AARCH64_KIT_LIBS}"]
|
package/cli/cjpm.toml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
cjc-version = "1.0.5"
|
|
3
3
|
name = "cli"
|
|
4
4
|
description = "cj-tauri CLI:脚手架 create / dev / build / run / info"
|
|
5
|
-
version = "
|
|
5
|
+
version = "2.0.0"
|
|
6
6
|
target-dir = ""
|
|
7
7
|
output-type = "executable"
|
|
8
8
|
compile-option = ""
|
|
@@ -11,3 +11,12 @@
|
|
|
11
11
|
package-configuration = {}
|
|
12
12
|
|
|
13
13
|
[dependencies]
|
|
14
|
+
|
|
15
|
+
[target.x86_64-unknown-linux-gnu.bin-dependencies]
|
|
16
|
+
path-option = ["${CANGJIE_STDX}"]
|
|
17
|
+
|
|
18
|
+
[target.x86_64-w64-mingw32.bin-dependencies]
|
|
19
|
+
# 与根 cjpm.toml 同口径:CLI 也 import stdx.encoding.json,Windows 上缺这一段时
|
|
20
|
+
# cjpm 报的是 `root package 'cli' imports package 'stdx.encoding.json' … not added as a
|
|
21
|
+
# dependency in cjpm.toml`(看着像 toml 漏配,其实是 Windows 目标段没声明 stdx)。
|
|
22
|
+
path-option = ["${CANGJIE_STDX}"]
|
package/cli/src/doctor.cj
CHANGED
|
@@ -198,7 +198,8 @@ func cmdDoctor(): Int64 {
|
|
|
198
198
|
match (projRoot) {
|
|
199
199
|
case Some(proj) =>
|
|
200
200
|
doctorLine(rep, CheckLevel.Ok, "项目根目录", proj, "")
|
|
201
|
-
|
|
201
|
+
let newForm = exists(joinPath(proj, "cj-tauri.toml"))
|
|
202
|
+
match (findAppBinary(proj, newForm)) {
|
|
202
203
|
case Some(bin) =>
|
|
203
204
|
if (fwRoot.size > 0 && !appBinaryIsFresh(bin, fwRoot)) {
|
|
204
205
|
doctorLine(rep, CheckLevel.Warn, "可执行产物", "${bin} [比框架源码旧]",
|
|
@@ -207,7 +208,8 @@ func cmdDoctor(): Int64 {
|
|
|
207
208
|
doctorLine(rep, CheckLevel.Ok, "可执行产物", bin, "")
|
|
208
209
|
}
|
|
209
210
|
case None =>
|
|
210
|
-
doctorLine(rep, CheckLevel.Warn, "可执行产物", "未构建",
|
|
211
|
+
doctorLine(rep, CheckLevel.Warn, "可执行产物", "未构建",
|
|
212
|
+
if (newForm) { "`cj-tauri sync` + `cj-tauri build`" } else { "`cj-tauri build`" })
|
|
211
213
|
}
|
|
212
214
|
case None =>
|
|
213
215
|
doctorLine(rep, CheckLevel.Warn, "项目根目录", "当前不在 cj-tauri 项目内",
|
package/cli/src/main.cj
CHANGED
|
@@ -8,15 +8,17 @@ func usage(): Unit {
|
|
|
8
8
|
println("")
|
|
9
9
|
println("用法:")
|
|
10
10
|
println(" cj-tauri create <项目名> [--template <t>] [--bundle <bundleName>] [--label <应用名>]")
|
|
11
|
-
println(" 创建新项目(
|
|
12
|
-
println(" 模板: app(内联单文件,缺省)/ vue / react")
|
|
13
|
-
println(" ohos
|
|
11
|
+
println(" 创建新项目(cj-tauri.toml + src/ + assets/;骨架由 cj-tauri sync 派生)")
|
|
12
|
+
println(" 模板: app(内联单文件,缺省)/ vue / react(Vite 前端,作为资产)")
|
|
13
|
+
println(" ohos(鸿蒙生态:同形态统一工程,清单决定目标端)")
|
|
14
14
|
println(" --bundle / --label 只对 ohos 模板有意义(缺省由项目名推导)")
|
|
15
15
|
println(" cj-tauri dev 构建 C 桥 + cjpm build + 启动应用(鸿蒙工程改走 build-hap.sh)")
|
|
16
16
|
println(" cj-tauri build 构建 C 桥 + cjpm build(鸿蒙工程 = 编 hap)")
|
|
17
17
|
println(" cj-tauri run 运行已构建产物(鸿蒙工程 = 装到设备并拉起)")
|
|
18
18
|
println(" cj-tauri info [--json] 环境自检(排障用);--json 只输出插件清单(机器可读)")
|
|
19
19
|
println(" cj-tauri doctor 环境自检逐行给结论(每条自带「缺了就怎么办」)")
|
|
20
|
+
println(" cj-tauri check 校验 cj-tauri.toml(id/窗口/资产存在)+ targets 骨架漂移")
|
|
21
|
+
println(" cj-tauri sync [desktop|ohos] 按清单派生 targets 骨架(缺省两端都派生)")
|
|
20
22
|
println(" cj-tauri help 显示本帮助")
|
|
21
23
|
println("")
|
|
22
24
|
println("环境变量:")
|
|
@@ -114,6 +116,12 @@ main(args: Array<String>): Int64 {
|
|
|
114
116
|
if (sub == "doctor") {
|
|
115
117
|
return cmdDoctor()
|
|
116
118
|
}
|
|
119
|
+
if (sub == "check") {
|
|
120
|
+
return cmdCheck()
|
|
121
|
+
}
|
|
122
|
+
if (sub == "sync") {
|
|
123
|
+
return cmdSync(args)
|
|
124
|
+
}
|
|
117
125
|
eprintln("未知子命令: ${sub}")
|
|
118
126
|
println("")
|
|
119
127
|
usage()
|