@leonxin/meetgames 0.1.18 → 0.1.19
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 +5 -4
- package/dist/cache.d.ts +16 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +21 -0
- package/dist/cache.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -16
- package/dist/cli.js.map +1 -1
- package/dist/config/meetSdkDefaultConfig.d.ts +7 -11
- package/dist/config/meetSdkDefaultConfig.d.ts.map +1 -1
- package/dist/config/meetSdkDefaultConfig.js +216 -53
- package/dist/config/meetSdkDefaultConfig.js.map +1 -1
- package/dist/config/meetSdkIosConfig.d.ts +4 -5
- package/dist/config/meetSdkIosConfig.d.ts.map +1 -1
- package/dist/config/meetSdkIosConfig.js +19 -19
- package/dist/config/meetSdkIosConfig.js.map +1 -1
- package/dist/contracts/types.d.ts +4 -0
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +2 -0
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/previewPatches.d.ts +2 -2
- package/dist/core/previewPatches.d.ts.map +1 -1
- package/dist/core/previewPatches.js +3 -3
- package/dist/core/previewPatches.js.map +1 -1
- package/dist/core/workspace.d.ts.map +1 -1
- package/dist/core/workspace.js +1 -0
- package/dist/core/workspace.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/service.d.ts +2 -0
- package/dist/mcp/service.d.ts.map +1 -1
- package/dist/mcp/service.js +8 -7
- package/dist/mcp/service.js.map +1 -1
- package/dist/ops/handlers.d.ts.map +1 -1
- package/dist/ops/handlers.js +4 -0
- package/dist/ops/handlers.js.map +1 -1
- package/dist/remote/sdkHomeDownload.d.ts +4 -5
- package/dist/remote/sdkHomeDownload.d.ts.map +1 -1
- package/dist/remote/sdkHomeDownload.js +38 -12
- package/dist/remote/sdkHomeDownload.js.map +1 -1
- package/docs/API.md +13 -13
- package/docs/CLI.md +27 -13
- package/docs/INTEGRATION.md +7 -6
- package/package.json +1 -1
- package/src/cache.ts +37 -0
- package/src/cli.ts +21 -14
- package/src/config/meetSdkDefaultConfig.ts +243 -59
- package/src/config/meetSdkIosConfig.ts +17 -21
- package/src/contracts/types.ts +4 -0
- package/src/core/doctor.ts +2 -0
- package/src/core/previewPatches.ts +3 -3
- package/src/core/workspace.ts +1 -0
- package/src/index.ts +5 -3
- package/src/mcp/service.ts +11 -7
- package/src/ops/handlers.ts +4 -0
- package/src/remote/sdkHomeDownload.ts +48 -16
- package/config/meetsdk-android.json +0 -171
- package/config/meetsdk-ios.json +0 -15
- package/tests/assemble.test.ts +0 -12
- package/tests/doctor.test.ts +0 -131
- package/tests/downloadGoogleServicesJson.test.ts +0 -47
- package/tests/fetch-remote.test.ts +0 -23
- package/tests/fetchConfigOverrides.test.ts +0 -28
- package/tests/fetchConfigWrite.test.ts +0 -54
- package/tests/fixtures-hosts.test.ts +0 -78
- package/tests/gradle.test.ts +0 -33
- package/tests/integration-json.test.ts +0 -29
- package/tests/ios.codeUtils.test.ts +0 -23
- package/tests/ios.sdkBundle.test.ts +0 -21
- package/tests/loadManifest.test.ts +0 -15
- package/tests/manifest-xml.test.ts +0 -30
- package/tests/mcp.e2e.ts +0 -214
- package/tests/mcp.service.test.ts +0 -53
- package/tests/meetSdkRemoteConfig.test.ts +0 -482
- package/tests/meetSdkRemoteGradle.test.ts +0 -414
- package/tests/pipeline.android.test.ts +0 -149
- package/tests/pipeline.integration-json.test.ts +0 -58
- package/tests/pipeline.ios.test.ts +0 -609
- package/tests/pipeline.preview.patch.test.ts +0 -85
- package/tests/platformSelection.test.ts +0 -77
- package/tests/sdkHomeDownload.test.ts +0 -275
- package/tests/sdkVersionConfig.test.ts +0 -131
- package/tests/topsdk.test.ts +0 -53
- package/tests/topsdkDownloadSdkConfig.test.ts +0 -81
- package/tests/topsdkFeatureModules.test.ts +0 -116
package/docs/API.md
CHANGED
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
| `GET https://business-api.meetgames.com/sdk/home/version` | sdk-home | 获取下载中心展示的 Android / iOS 最新 SDK 版本和发布日期 |
|
|
9
9
|
| `GET https://business-api.meetgames.com/sdk/home/sdk-download/getDownLoadUrl` | sdk-home | 根据版本、平台、插件和包类型获取 SDK zip 临时下载地址 |
|
|
10
10
|
|
|
11
|
-
`downloadSDKConfig` 用于宿主工程配置,并由工具原样缓存到 `~/.cache/meet-sdk-tool`;sdk-home
|
|
11
|
+
`downloadSDKConfig` 用于宿主工程配置,并由工具原样缓存到 `~/.cache/meet-sdk-tool`;sdk-home 版本接口用于解析最新 SDK 版本;Android 会再通过 `getDownLoadUrl` 下载 SDK zip,从包内读取并写入 `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-android.json`;iOS SDK 下载会写入 `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-ios.json` 并同步 iOS SDK 资源到 `~/.cache/meet-sdk-tool/sdk/ios`。
|
|
12
12
|
|
|
13
13
|
## CLI 使用关系
|
|
14
14
|
|
|
15
15
|
| 命令 | 是否请求接口 | 说明 |
|
|
16
16
|
|---|---:|---|
|
|
17
17
|
| `fetch-config` | 是 | 拉取并写入缓存中的 `meetsdk-remote-config.json` |
|
|
18
|
-
| `setup` | 是 | 第一步执行 `fetch-config`;Android 集成阶段还会读取 sdk-home 最新 Android
|
|
19
|
-
| `doctor` | 是 | 第一步执行 `fetch-config`;Android 检查阶段还会读取 sdk-home 最新 Android
|
|
20
|
-
| `integrate` | Android 是 / iOS 否 | Android 读取 sdk-home 最新 Android
|
|
18
|
+
| `setup` | 是 | 第一步执行 `fetch-config`;Android 集成阶段还会读取 sdk-home 最新 Android 版本并下载 SDK zip,从包内配置写入缓存 |
|
|
19
|
+
| `doctor` | 是 | 第一步执行 `fetch-config`;Android 检查阶段还会读取 sdk-home 最新 Android 版本并下载 SDK zip,从包内配置写入缓存 |
|
|
20
|
+
| `integrate` | Android 是 / iOS 否 | Android 读取 sdk-home 最新 Android 版本,下载 SDK zip 并读取包内 `meetsdk-android.json` 写入缓存,再写入 Gradle;iOS 读取缓存 `meetsdk-remote-config.json` 和缓存 SDK |
|
|
21
21
|
| `download-ios-sdk` | 是 | 先读 sdk-home 最新 iOS 版本,再取 SDK zip URL,下载并解压到 `~/.cache/meet-sdk-tool/sdk/ios`,成功后写入 metadata |
|
|
22
22
|
|
|
23
23
|
## downloadSDKConfig
|
|
@@ -103,7 +103,7 @@ name
|
|
|
103
103
|
如果数据库没有 `name`,JSON 不输出 `name`。
|
|
104
104
|
服务端不做推导、不写空字符串占位。
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
示例(假设 iOS `meetsdk-remote-config.json` 推导出的插件为 `guest,facebook,google,apple,apple_pay,dataAppsFlyer`):
|
|
107
107
|
|
|
108
108
|
```json
|
|
109
109
|
{
|
|
@@ -124,18 +124,18 @@ name
|
|
|
124
124
|
|
|
125
125
|
`downloadSDKConfig` 不返回 SDK 版本、Maven 仓库、依赖坐标、Firebase Gradle plugin 等固定集成配置。
|
|
126
126
|
|
|
127
|
-
Maven 仓库、依赖坐标、Firebase Gradle plugin
|
|
127
|
+
Maven 仓库、依赖坐标、Firebase Gradle plugin 等由 sdk-home Android SDK zip 内的 `meetsdk-android.json` 提供,并由工具缓存为:
|
|
128
128
|
|
|
129
129
|
```text
|
|
130
|
-
|
|
130
|
+
~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-android.json
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
`integrate` / `doctor` 处理 Android 工程时,会调用 sdk-home `version` 接口读取 `data.result.android.ver` / `date`,再请求 `getDownLoadUrl` 下载 Android SDK zip,解压后检索包内 `meetsdk-android.json`,写入缓存中的 `topsdk.version` / `topsdk.date` 和固定配置,最后合并为 Gradle 的 `topsdk_version`、仓库和依赖。
|
|
134
134
|
|
|
135
|
-
iOS SDK
|
|
135
|
+
iOS SDK 下载元数据缓存为:
|
|
136
136
|
|
|
137
137
|
```text
|
|
138
|
-
|
|
138
|
+
~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-ios.json
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
该文件用于记录当前缓存 iOS SDK 对应的版本、发布日期、包类型和插件组合。
|
|
@@ -161,7 +161,7 @@ https://business.meetgames.com/sdkDownloadDetail?type=ios
|
|
|
161
161
|
|
|
162
162
|
用途:获取下载中心当前展示的最新 SDK 版本。
|
|
163
163
|
|
|
164
|
-
- Android `integrate` / `setup` / `doctor` 会读取 `data.result.android.ver` / `date
|
|
164
|
+
- Android `integrate` / `setup` / `doctor` 会读取 `data.result.android.ver` / `date`,再下载 Android SDK zip 并读取包内 `meetsdk-android.json`,用于写入或校验 Gradle 中的 `topsdk_version`、仓库和依赖。
|
|
165
165
|
- `download-ios-sdk` 未显式传 `--version` 时,会读取 `data.result.ios.ver` / `date` 作为下载版本;下载和解压成功后写入缓存 metadata。
|
|
166
166
|
|
|
167
167
|
请求:
|
|
@@ -219,7 +219,7 @@ data.result.ios.date
|
|
|
219
219
|
下载和解压成功后,工具会更新:
|
|
220
220
|
|
|
221
221
|
```text
|
|
222
|
-
|
|
222
|
+
~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-ios.json
|
|
223
223
|
```
|
|
224
224
|
|
|
225
225
|
请求:
|
|
@@ -228,7 +228,7 @@ data.result.ios.date
|
|
|
228
228
|
|---|---|---|
|
|
229
229
|
| `version` | SDK 版本;默认来自 `version` 接口的 `data.result.ios.ver` | 最新 iOS 版本 |
|
|
230
230
|
| `platform` | 平台 | `ios` |
|
|
231
|
-
| `plugins` | 逗号分隔插件列表;`setup`
|
|
231
|
+
| `plugins` | 逗号分隔插件列表;`setup` 和单独执行 `download-ios-sdk` 都必须从 iOS `meetsdk-remote-config.json` 启用模块推导 | 无默认值 |
|
|
232
232
|
| `packageType` | 包类型 / 引擎 | `native` |
|
|
233
233
|
|
|
234
234
|
示例:
|
package/docs/CLI.md
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
| 子命令 | 作用 | 是否写文件 |
|
|
8
8
|
|---|---|---|
|
|
9
9
|
| `fetch-config` | 请求 `downloadSDKConfig`,将响应原文写入 `~/.cache/meet-sdk-tool` | 是 |
|
|
10
|
-
| `download-ios-sdk` |
|
|
11
|
-
| `integrate` | 读取本地配置并接入 Android 或 iOS SDK;Android 会请求 sdk-home
|
|
12
|
-
| `setup` | 先执行 `fetch-config`;iOS 工程会再执行 `download-ios-sdk`;最后执行 `integrate`;Android 集成阶段会请求 sdk-home
|
|
13
|
-
| `doctor` | 先执行 `fetch-config`,再检查当前工程 SDK 接入是否正确;Android 检查阶段会请求 sdk-home
|
|
10
|
+
| `download-ios-sdk` | 读取 iOS `meetsdk-remote-config.json` 推导插件,再请求 sdk-home 版本和下载接口,下载 iOS SDK zip 并解压到 `~/.cache/meet-sdk-tool/sdk/ios` | 是 |
|
|
11
|
+
| `integrate` | 读取本地配置并接入 Android 或 iOS SDK;Android 会请求 sdk-home 最新版本和 SDK zip,并从包内读取 `meetsdk-android.json` 更新缓存 | 默认写;`--dry-run` 时不写宿主工程文件 |
|
|
12
|
+
| `setup` | 先执行 `fetch-config`;iOS 工程会再执行 `download-ios-sdk`;最后执行 `integrate`;Android 集成阶段会请求 sdk-home 最新版本和 SDK zip 并更新缓存 | 是;集成阶段受 `--dry-run` 影响 |
|
|
13
|
+
| `doctor` | 先执行 `fetch-config`,再检查当前工程 SDK 接入是否正确;Android 检查阶段会请求 sdk-home 最新版本和 SDK zip 并更新缓存 | 是,会刷新缓存中的 `meetsdk-remote-config.json` |
|
|
14
14
|
|
|
15
15
|
`doctor`、`setup`、`integrate` 都要求传入 `--project-root`。工具会根据该路径自动识别 Android 或 iOS,并且只执行对应平台逻辑。
|
|
16
|
-
Android `integrate` / `setup` / `doctor` 会调用 sdk-home `version` 接口读取最新 Android SDK
|
|
17
|
-
`download-ios-sdk` 面向本机缓存的 iOS SDK
|
|
16
|
+
Android `integrate` / `setup` / `doctor` 会调用 sdk-home `version` 接口读取最新 Android SDK 版本,再调用 `getDownLoadUrl` 下载 Android SDK zip,解压后检索包内 `meetsdk-android.json` 并写入 `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-android.json`,用于写入或校验 Gradle 中的 `topsdk_version`。
|
|
17
|
+
`download-ios-sdk` 面向本机缓存的 iOS SDK 资源;单独执行时必须能从 `--env` / `--app-id` / `--channel-type` 对应缓存,或 `--project-root`(默认当前目录)下读取到 iOS `meetsdk-remote-config.json`。
|
|
18
18
|
|
|
19
19
|
## 通用示例
|
|
20
20
|
|
|
@@ -67,7 +67,11 @@ node dist/entry.js doctor \
|
|
|
67
67
|
刷新工具内置 iOS SDK:
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
node dist/entry.js download-ios-sdk
|
|
70
|
+
node dist/entry.js download-ios-sdk \
|
|
71
|
+
--app-id <APP_ID> \
|
|
72
|
+
--channel-type APPLE \
|
|
73
|
+
--env test \
|
|
74
|
+
--verbose
|
|
71
75
|
```
|
|
72
76
|
|
|
73
77
|
指定包类型:
|
|
@@ -98,6 +102,8 @@ node dist/entry.js download-ios-sdk \
|
|
|
98
102
|
|
|
99
103
|
### download-ios-sdk 专用参数
|
|
100
104
|
|
|
105
|
+
`download-ios-sdk` 也接受 `--project-root`、`--app-id`、`--channel-type`、`--env`、`--sdk-api-base-url`、`--verbose`,用于定位 iOS `meetsdk-remote-config.json` 和覆盖 sdk-home 地址。
|
|
106
|
+
|
|
101
107
|
| 参数 | 说明 |
|
|
102
108
|
|---|---|
|
|
103
109
|
| `--package-type native|unity|cocos` | 包类型 / 引擎;默认 `native` |
|
|
@@ -182,7 +188,15 @@ Android 接入会先调用:
|
|
|
182
188
|
GET https://business-api.meetgames.com/sdk/home/version
|
|
183
189
|
```
|
|
184
190
|
|
|
185
|
-
用途:读取 `data.result.android.ver` / `date
|
|
191
|
+
用途:读取 `data.result.android.ver` / `date`,作为后续 Android 固定配置下载的版本,并作为 Gradle 中的 `topsdk_version`。
|
|
192
|
+
|
|
193
|
+
随后调用:
|
|
194
|
+
|
|
195
|
+
```text
|
|
196
|
+
GET https://business-api.meetgames.com/sdk/home/sdk-download/getDownLoadUrl?version=<Android版本>&platform=android&packageType=native&plugins=<渠道插件>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
用途:获取 Android SDK zip 下载地址;工具下载并解压后在目录内检索 `meetsdk-android.json`,再写入 `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-android.json`。
|
|
186
200
|
|
|
187
201
|
当 Android 工程中存在多个 application module 时,如果未传 `--app-target`,命令会报出候选 module 列表;传入后会把 Gradle、Manifest、`google-services.json` 等写到选中的 module 下。
|
|
188
202
|
|
|
@@ -210,17 +224,17 @@ GET https://business-api.meetgames.com/sdk/home/version
|
|
|
210
224
|
GET https://business-api.meetgames.com/sdk/home/sdk-download/getDownLoadUrl
|
|
211
225
|
```
|
|
212
226
|
|
|
213
|
-
|
|
227
|
+
`download-ios-sdk` 会读取 iOS `meetsdk-remote-config.json`,根据已启用的 iOS 模块生成 `plugins` 参数;单独执行和 `setup` 使用同一套规则,不再使用默认插件集合。
|
|
228
|
+
|
|
229
|
+
query:
|
|
214
230
|
|
|
215
231
|
```text
|
|
216
232
|
version=<version接口返回的iOS版本>
|
|
217
233
|
platform=ios
|
|
218
|
-
plugins
|
|
234
|
+
plugins=<meetsdk-remote-config.json 推导出的插件列表>
|
|
219
235
|
packageType=native
|
|
220
236
|
```
|
|
221
237
|
|
|
222
|
-
`setup` 会先读取 `meetsdk-remote-config.json`,并根据配置启用的 iOS 模块自动生成 `plugins` 参数。
|
|
223
|
-
|
|
224
238
|
用途:获取短期有效的 SDK zip 下载 URL。
|
|
225
239
|
|
|
226
240
|
3. 下载 zip 并解压到缓存目录:
|
|
@@ -234,7 +248,7 @@ packageType=native
|
|
|
234
248
|
下载和解压成功后,命令会更新:
|
|
235
249
|
|
|
236
250
|
```text
|
|
237
|
-
|
|
251
|
+
~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-ios.json
|
|
238
252
|
```
|
|
239
253
|
|
|
240
254
|
用途:记录当前缓存 iOS SDK 对应的版本、发布日期、包类型和插件组合。
|
package/docs/INTEGRATION.md
CHANGED
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
| 来源 | 类型 | 作用 |
|
|
18
18
|
|---|---|---|
|
|
19
19
|
| `~/.cache/meet-sdk-tool/configs/<env>/<appId>/<channelType>/meetsdk-remote-config.json` | `downloadSDKConfig` 接口拉取后落盘 | 每个游戏/渠道不同的业务参数,例如 `appId`、登录渠道 `clientId/secret/redirect/scheme/name` |
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
| `GET https://business-api.meetgames.com/sdk/home/version` | sdk-home 接口 | Android 接入/检查时读取 `data.result.android.ver
|
|
20
|
+
| `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-android.json` | sdk-home `version` + Android SDK zip 包内文件落盘 | Android 固定 SDK 集成配置,例如 SDK 版本、Maven 仓库、依赖坐标、Firebase Gradle plugin |
|
|
21
|
+
| `~/.cache/meet-sdk-tool/configs/sdk-home/meetsdk-ios.json` | sdk-home iOS 下载流程写入 | iOS 当前缓存 SDK 的版本、发布日期、包类型和从 `meetsdk-remote-config.json` 推导出的插件组合 |
|
|
22
|
+
| `GET https://business-api.meetgames.com/sdk/home/version` | sdk-home 接口 | Android 接入/检查时读取 `data.result.android.ver`;iOS 下载时读取 `data.result.ios.ver` |
|
|
23
|
+
| `GET https://business-api.meetgames.com/sdk/home/sdk-download/getDownLoadUrl` | sdk-home 接口 | Android / iOS 按版本、平台、包类型和插件获取 SDK zip 下载地址 |
|
|
23
24
|
|
|
24
25
|
`meetsdk-remote-config.json` 由 `fetch-config`、`setup`、`doctor` 拉取并原样写入 `~/.cache/meet-sdk-tool`,不会写入游戏工程根目录。
|
|
25
|
-
`integrate` 读取缓存配置并执行接入;Android 接入会额外请求 sdk-home
|
|
26
|
+
`integrate` 读取缓存配置并执行接入;Android 接入会额外请求 sdk-home 版本和 SDK 下载接口,下载 zip 后从解压目录检索 `meetsdk-android.json` 并同步写回缓存,不会重新拉取 `meetsdk-remote-config.json`。
|
|
26
27
|
|
|
27
28
|
## 推荐流程
|
|
28
29
|
|
|
@@ -71,10 +72,10 @@ node dist/entry.js setup \
|
|
|
71
72
|
|
|
72
73
|
## Android 接入内容
|
|
73
74
|
|
|
74
|
-
Android 接入时会根据 `meetsdk-remote-config.json`
|
|
75
|
+
Android 接入时会根据 `meetsdk-remote-config.json` 和 sdk-home 缓存默认配置检查/写入:
|
|
75
76
|
|
|
76
77
|
- Application module 默认自动检测;如果工程存在多个 application module,需要通过 `--app-target <module>` 指定,例如 `:app` 或 `launcher`。
|
|
77
|
-
- sdk-home `version` 接口中的 `data.result.android.ver` / `date
|
|
78
|
+
- sdk-home `version` 接口中的 `data.result.android.ver` / `date` 与 Android SDK zip 包内 `meetsdk-android.json` 固定配置,用于更新缓存并生成 App Module `build.gradle` 里的 `topsdk_version`。
|
|
78
79
|
- `settings.gradle` 或根 `build.gradle` 中的 Maven 仓库。
|
|
79
80
|
- 根 `build.gradle` 中的 Gradle plugin 声明,例如 Firebase google-services。
|
|
80
81
|
- App Module `build.gradle` 中的 SDK 依赖。
|
package/package.json
CHANGED
package/src/cache.ts
CHANGED
|
@@ -5,11 +5,17 @@ import path from "node:path";
|
|
|
5
5
|
import { MEETSDK_REMOTE_CONFIG_FILENAME } from "./config/meetSdkRemoteConfig.js";
|
|
6
6
|
|
|
7
7
|
export const MEET_SDK_TOOL_CACHE_ROOT = path.join(os.homedir(), ".cache", "meet-sdk-tool");
|
|
8
|
+
export const MEETSDK_ANDROID_CONFIG_FILENAME = "meetsdk-android.json";
|
|
9
|
+
export const MEETSDK_IOS_CONFIG_FILENAME = "meetsdk-ios.json";
|
|
8
10
|
|
|
9
11
|
function iosSdkZipFileName(version: string): string {
|
|
10
12
|
return `topSDK-ios--V${version}.zip`;
|
|
11
13
|
}
|
|
12
14
|
|
|
15
|
+
function androidSdkZipFileName(version: string): string {
|
|
16
|
+
return `topSDK-android-V${version}.zip`;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
function safeSegment(value: string): string {
|
|
14
20
|
const cleaned = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "_").replace(/^_+|_+$/g, "");
|
|
15
21
|
return cleaned || "unknown";
|
|
@@ -52,6 +58,14 @@ export function resolveRemoteConfigCachePath(params: {
|
|
|
52
58
|
);
|
|
53
59
|
}
|
|
54
60
|
|
|
61
|
+
export function resolveMeetSdkAndroidConfigCachePath(cacheRoot = MEET_SDK_TOOL_CACHE_ROOT): string {
|
|
62
|
+
return path.join(cacheRoot, "configs", "sdk-home", MEETSDK_ANDROID_CONFIG_FILENAME);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function resolveMeetSdkIosConfigCachePath(cacheRoot = MEET_SDK_TOOL_CACHE_ROOT): string {
|
|
66
|
+
return path.join(cacheRoot, "configs", "sdk-home", MEETSDK_IOS_CONFIG_FILENAME);
|
|
67
|
+
}
|
|
68
|
+
|
|
55
69
|
export function writeRemoteConfigCache(params: {
|
|
56
70
|
env: string;
|
|
57
71
|
appId: string;
|
|
@@ -110,6 +124,29 @@ export function resolveIosSdkCacheLayout(params: {
|
|
|
110
124
|
};
|
|
111
125
|
}
|
|
112
126
|
|
|
127
|
+
export function resolveAndroidSdkCacheLayout(params: {
|
|
128
|
+
version: string;
|
|
129
|
+
packageType: string;
|
|
130
|
+
plugins: readonly string[];
|
|
131
|
+
cacheRoot?: string;
|
|
132
|
+
}): { baseDir: string; zipPath: string; extractDir: string; metadataPath: string; lockDir: string } {
|
|
133
|
+
const baseDir = path.join(
|
|
134
|
+
params.cacheRoot ?? MEET_SDK_TOOL_CACHE_ROOT,
|
|
135
|
+
"sdk",
|
|
136
|
+
"android",
|
|
137
|
+
safeSegment(params.packageType),
|
|
138
|
+
safeSegment(params.version),
|
|
139
|
+
pluginsHash(params.plugins)
|
|
140
|
+
);
|
|
141
|
+
return {
|
|
142
|
+
baseDir,
|
|
143
|
+
zipPath: path.join(baseDir, androidSdkZipFileName(params.version)),
|
|
144
|
+
extractDir: path.join(baseDir, "extracted"),
|
|
145
|
+
metadataPath: path.join(baseDir, "metadata.json"),
|
|
146
|
+
lockDir: path.join(baseDir, ".lock"),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
113
150
|
export function writeIosSdkCacheMetadata(params: {
|
|
114
151
|
metadataPath: string;
|
|
115
152
|
version: string;
|
package/src/cli.ts
CHANGED
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
defaultSdkHomeApiBaseUrl,
|
|
17
17
|
downloadIosSdkToBundled,
|
|
18
18
|
DEFAULT_IOS_SDK_PACKAGE_TYPE,
|
|
19
|
-
resolveIosSdkDownloadPluginsFromRemoteConfig,
|
|
20
19
|
} from "./remote/sdkHomeDownload.js";
|
|
21
20
|
import type { Manifest } from "./contracts/types.js";
|
|
22
21
|
import {
|
|
@@ -74,7 +73,7 @@ meetgames — Android-first integration CLI (TypeScript)
|
|
|
74
73
|
Usage:
|
|
75
74
|
meetgames integrate [--project-root <path>] [--app-id ID] [--channel-type TYPE] [--env prod|pre|test] [--app-target <target>] [--dry-run] [--verbose] [--patch-file <path>]
|
|
76
75
|
meetgames fetch-config [--app-id ID] [--app-secret SECRET] [--channel-type TYPE] [--env prod|pre|test] [--project-root <path>] [--verbose]
|
|
77
|
-
meetgames download-ios-sdk [--package-type native|unity|cocos] [--sdk-api-base-url URL] [--verbose]
|
|
76
|
+
meetgames download-ios-sdk [--project-root <path>] [--app-id ID] [--channel-type TYPE] [--env prod|pre|test] [--package-type native|unity|cocos] [--sdk-api-base-url URL] [--verbose]
|
|
78
77
|
meetgames setup [--app-id ID] [--app-secret SECRET] [--channel-type TYPE] [--env prod|pre|test] [--project-root <path>] [--app-target <target>] [--dry-run] [--verbose] [--patch-file <path>]
|
|
79
78
|
meetgames doctor [--app-id ID] [--app-secret SECRET] [--channel-type TYPE] [--env prod|pre|test] --project-root <path> [--app-target <target>] [--verbose]
|
|
80
79
|
|
|
@@ -87,8 +86,8 @@ Notes:
|
|
|
87
86
|
- doctor first fetches downloadSDKConfig to the cache, then validates the detected platform integration.
|
|
88
87
|
- integrate uses recipes/integrate-default.yaml, filtered to the detected platform before execution.
|
|
89
88
|
- iOS SDK is read from ${MEET_SDK_TOOL_CACHE_ROOT}/sdk/ios/.
|
|
90
|
-
- Android integrate/doctor reads
|
|
91
|
-
- download-ios-sdk calls sdk-home getDownLoadUrl
|
|
89
|
+
- Android integrate/doctor reads latest SDK config from sdk-home and stores it under ${MEET_SDK_TOOL_CACHE_ROOT}/configs/sdk-home/.
|
|
90
|
+
- download-ios-sdk reads an iOS meetsdk-remote-config.json, derives sdk-home plugins from it, then calls sdk-home getDownLoadUrl and extracts the iOS SDK under ${MEET_SDK_TOOL_CACHE_ROOT}/sdk/ios/.
|
|
92
91
|
- fetch-config requires --app-secret (or TOPSDK_APP_SECRET) to sign downloadSDKConfig; appSecret is never read from meetsdk-remote-config.json.
|
|
93
92
|
- When analytics.firebase is enabled, Android downloads google-services.json to the detected/selected app module; iOS downloads GoogleService-Info.plist next to Info.plist.
|
|
94
93
|
- fetch-config writes to ${MEET_SDK_TOOL_CACHE_ROOT}/configs/<env>/<appId>/<channelType>/meetsdk-remote-config.json.
|
|
@@ -108,7 +107,7 @@ Options (global where noted):
|
|
|
108
107
|
--package-type download-ios-sdk: native(默认)| unity | cocos
|
|
109
108
|
--dry-run integrate: compute changes and patch preview without writing host project files (default is write to disk)
|
|
110
109
|
--report-file Write JSON report to path
|
|
111
|
-
--patch-file integrate: write unified diff to this path (works with --dry-run). If under <pkg>/
|
|
110
|
+
--patch-file integrate: write unified diff to this path (works with --dry-run). If under <pkg>/fixtures/expected-patches/, all existing files in that dir are removed first so only the latest patch remains.
|
|
112
111
|
--verbose Verbose logs and full patch preview
|
|
113
112
|
|
|
114
113
|
Subcommand notes:
|
|
@@ -396,12 +395,20 @@ async function cmdSetup(parsed: Parsed): Promise<void> {
|
|
|
396
395
|
await cmdIntegrate(parsed);
|
|
397
396
|
}
|
|
398
397
|
|
|
399
|
-
function
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
398
|
+
function resolveIosDownloadRemoteConfigPath(parsed: Parsed, explicitPath?: string): string {
|
|
399
|
+
const candidates = [
|
|
400
|
+
explicitPath,
|
|
401
|
+
cachedRemoteConfigPathFromArgs(parsed),
|
|
402
|
+
path.join(parsed.projectRoot, MEETSDK_REMOTE_CONFIG_FILENAME),
|
|
403
|
+
]
|
|
404
|
+
.filter((p): p is string => Boolean(p))
|
|
405
|
+
.filter((p, i, arr) => arr.indexOf(p) === i);
|
|
406
|
+
const found = candidates.find((p) => fs.existsSync(p));
|
|
407
|
+
if (found) return found;
|
|
408
|
+
fail(
|
|
409
|
+
`download-ios-sdk requires an iOS ${MEETSDK_REMOTE_CONFIG_FILENAME}; checked: ${candidates.join(", ")}`,
|
|
410
|
+
EXIT.CONFIG_ERROR
|
|
411
|
+
);
|
|
405
412
|
}
|
|
406
413
|
|
|
407
414
|
async function cmdDownloadIosSdk(parsed: Parsed, remoteConfigPath?: string): Promise<void> {
|
|
@@ -411,15 +418,15 @@ async function cmdDownloadIosSdk(parsed: Parsed, remoteConfigPath?: string): Pro
|
|
|
411
418
|
if (!["native", "unity", "cocos"].includes(packageType)) {
|
|
412
419
|
fail(`invalid --package-type (use native, unity, or cocos): ${packageType}`, EXIT.INVALID_ARGS);
|
|
413
420
|
}
|
|
414
|
-
const
|
|
415
|
-
const plugins = configuredPlugins;
|
|
421
|
+
const configPath = resolveIosDownloadRemoteConfigPath(parsed, remoteConfigPath);
|
|
416
422
|
|
|
423
|
+
console.log(`[meetgames] download-ios-sdk: using remote config ${configPath}`);
|
|
417
424
|
console.log("[meetgames] download-ios-sdk: resolving sdk-home iOS SDK…");
|
|
418
425
|
let result;
|
|
419
426
|
try {
|
|
420
427
|
result = await downloadIosSdkToBundled(resolvePackageRoot(), {
|
|
421
428
|
baseUrl,
|
|
422
|
-
|
|
429
|
+
remoteConfigPath: configPath,
|
|
423
430
|
packageType,
|
|
424
431
|
});
|
|
425
432
|
} catch (e) {
|