docs: align QBIN V4 particle.3 project baseline
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
This commit is contained in:
@@ -7,7 +7,9 @@
|
|||||||
1. `粒子系统项目规则与设计决策_v1.md`
|
1. `粒子系统项目规则与设计决策_v1.md`
|
||||||
2. `开发环境与系统构建规范_v1.md`
|
2. `开发环境与系统构建规范_v1.md`
|
||||||
3. `Step指令书与执行报告规范_v1.md`
|
3. `Step指令书与执行报告规范_v1.md`
|
||||||
4. `当前基线与开发路线_v1.md`
|
4. `当前基线与开发路线_v2.md`(当前)
|
||||||
|
|
||||||
|
`当前基线与开发路线_v1.md` 保留为 2026-08-29 历史冻结,不再作为当前构建/发布依据。
|
||||||
|
|
||||||
## 阅读顺序
|
## 阅读顺序
|
||||||
`AGENTS.md` → 本目录 README → 四份当前有效总则 → 当前 Step 指令书 → 上一 Step 执行报告 → 其他阶段文档。
|
`AGENTS.md` → 本目录 README → 四份当前有效总则 → 当前 Step 指令书 → 上一 Step 执行报告 → 其他阶段文档。
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# 当前基线与开发路线 v1
|
# 当前基线与开发路线 v1
|
||||||
|
|
||||||
|
> **历史冻结:2026-08-29。** 当前基线已由 `当前基线与开发路线_v2.md` 取代;本文仅保留当时事实,不用于当前 Android/RN 构建。
|
||||||
|
|
||||||
|
|
||||||
## 1. 冻结日期
|
## 1. 冻结日期
|
||||||
2026-08-29
|
2026-08-29
|
||||||
|
|
||||||
|
|||||||
41
docs/00_项目总则/当前基线与开发路线_v2.md
Normal file
41
docs/00_项目总则/当前基线与开发路线_v2.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# 当前基线与开发路线 v2
|
||||||
|
|
||||||
|
## 1. 冻结日期
|
||||||
|
2026-09-14。当前正式分支为 `particle/main`,本文对应 QBIN2 V4 Android/RN Test Host 已完成真机/模拟器人工验证后的基线。
|
||||||
|
|
||||||
|
## 2. 当前 Git 基线
|
||||||
|
当前整理起点 HEAD:`de8d230b87345c2538c71318681119cdecb2762a`。正式远端为 `origin/particle/main`。历史 STEP 文档用于追溯当时事实,不再自动代表当前构建方式。
|
||||||
|
|
||||||
|
## 3. 当前 Android/RN 版本
|
||||||
|
- Native OpenGL AAR:`cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.3`。
|
||||||
|
- RN package:`@navsea/maplibre-particle-rn@13.4.1-particle.3`。
|
||||||
|
- MLRN:`@maplibre/maplibre-react-native@11.3.6`。
|
||||||
|
- React Native Test Host:RN `0.85.2`、New Architecture。
|
||||||
|
- Native/RN 版本必须同为 `.3`;不得再使用 `.2` 作为当前消费坐标。
|
||||||
|
|
||||||
|
## 4. 当前数据与渲染主链
|
||||||
|
正式新增链路为 QBIN V4:宿主下载/缓存 raw QBIN,本地文件通过 `FieldRuntime.submitEncodedField(...)` 进入 Android Bridge/JNI,再由 `RasterArraySource::submitEncodedField(...)` 与 `QbinV2Decoder::decode(...)` 解码。MapLibre 不负责 HTTP、provider、manifest、缓存或业务调度。
|
||||||
|
|
||||||
|
旧 V3 canonical `submitField(...)` 仍保留用于历史兼容和 Test Host 对照,不是 NavSea 新接入的推荐主链。
|
||||||
|
|
||||||
|
## 5. 当前 V4 公共控制面
|
||||||
|
NavSea/Consumer 新代码优先使用:`submitEncodedField`、`setEncodedColorBinding`、`setEncodedParticleBinding`、`setEncodedForecastTime`、`setEncodedForecastPlaybackState`、`setEncodedForecastPlaybackSpeed`、`clearEncodedField`。运行时继续由 Core 拥有 Field Window、Forecast Clock、T0/T1/mix 与 boundary reuse。
|
||||||
|
|
||||||
|
## 6. 当前发布来源
|
||||||
|
`https://pbf.jpcn.ccwu.cc/` 映射 Linux `/mnt/nas/pbf`。Native 正常发布到 `/mnt/nas/pbf/maven/`,RN tgz 正常发布到 `/mnt/nas/pbf/npm/`;Windows 11 正常验证必须从公网 npm/Maven 消费,不以 Windows Maven Local 或 LAN AAR 复制作为正式路径。
|
||||||
|
|
||||||
|
当前已验证 AAR SHA-256:`9ef03eb0d0c03457adc04847cfa69fb67d85191daecd64d3b76db2ad8cc688cd`。当前 `.3` RN tgz 在 2026-09-14 Kotlin 编译修正后重新发布;今后公开版本内容变化必须升版本,不再覆盖同版本。
|
||||||
|
|
||||||
|
## 7. 当前 Test Host
|
||||||
|
正式源码:`integration/react-native/MapLibreParticleRNTestHost/`。V4 Golden fixtures:Wind/Wave/Current/Rain 各 T0/T1,共 8 个 `.qbin`。Test Host 同时保留 V3 控制用于对照,但 V4 验收必须通过 `submitEncodedField`。
|
||||||
|
|
||||||
|
Windows 推荐工作目录必须是普通子目录,例如 `D:\React\MapLibreParticleRNTestHost-V4`,不要在盘符根目录执行 Expo prebuild。Metro 监听 `8091`,Debug App 访问设备 `localhost:8081`,固定使用 `adb -s 192.168.1.146 reverse tcp:8081 tcp:8091`。
|
||||||
|
|
||||||
|
## 8. 当前权威操作文档
|
||||||
|
Android AAR 公网发布、Win11 Test Host 构建、Metro/ADB 与 V4 验收以 `docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md` 为准。`tools/particle_android_pipeline/README.md` 已明确 v1 本地 handoff 工具只用于历史/离线兼容。
|
||||||
|
|
||||||
|
## 9. 历史文档边界
|
||||||
|
STEP-060~072 中的 `Maven Local`、`13.4.1-particle.1/.2`、旧 `D:\V308`、旧 reverse 组合等内容保留为历史验收证据,不得直接用于当前 `.3` 构建。需要当前命令时先读本文件和 STEP-080 v2。
|
||||||
|
|
||||||
|
## 10. 下一阶段
|
||||||
|
当前 Native/RN QBIN V4 Android 基线可用于 NavSea 最小正式接入。建议先做 Wind 单纵向切片:NavSea Weather/Cache 层准备本地 QBIN → V4 submit/binding/time → 地图显示/clear;通过后再扩展 Wave/Current/Rain。NavSea 不解析 QBIN,也不把网络 URL 交给 MapLibre。
|
||||||
@@ -1,3 +1,11 @@
|
|||||||
# Step 记录目录
|
# Step 记录目录
|
||||||
|
|
||||||
保存阶段权威状态,初始化脚本生成 STEP-000。
|
保存各阶段已发生事实和阶段权威状态。历史 Step 不因后续版本升级而改写。
|
||||||
|
|
||||||
|
## 当前 Android / RN 操作入口
|
||||||
|
|
||||||
|
当前 QBIN V4 / Android `.3` 的构建、pbf 公网发布、Win11 Test Host、Metro/ADB 与人工验收流程:
|
||||||
|
|
||||||
|
`STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md`
|
||||||
|
|
||||||
|
`STEP-080 ... v1` 及 STEP-060~072 中的 MavenLocal、`.1/.2`、旧 Win11 路径/端口均保留为历史证据,不作为当前命令来源。
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# STEP-080 — Android AAR 与 RN Test Host 标准构建流水线 v1
|
# STEP-080 — Android AAR 与 RN Test Host 标准构建流水线 v1
|
||||||
|
|
||||||
|
> **历史版本。** 当前正常公网发布/Win11 验证流程以同目录 `STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md` 为准;v1 的本地 bundle/MavenLocal 流程仅作历史/离线参考。
|
||||||
|
|
||||||
|
|
||||||
状态:完成
|
状态:完成
|
||||||
|
|
||||||
日期:2026-09-13
|
日期:2026-09-13
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# STEP-072 V3-08 Android 单次综合验收
|
# STEP-072 V3-08 Android 单次综合验收
|
||||||
|
|
||||||
|
> **历史 V3 验收文档。** 本文的 Native `.2`、Maven Local、旧 reverse/临时路径仅描述 STEP-072 当时事实;当前 QBIN V4 `.3` 验收请改读 `docs/00_项目总则/当前基线与开发路线_v2.md` 与 `docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md`。
|
||||||
|
|
||||||
|
|
||||||
## 状态与边界
|
## 状态与边界
|
||||||
|
|
||||||
本文件只列出用户手工执行的单次 Android 验收流程。目标组合是 RN/TS `13.4.1-particle.3` 与 Native `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.2`。`.2` 是 STEP-069 v2 multi-plane 所需的新坐标;不得复用、覆盖或误用旧 `.1`。
|
本文件只列出用户手工执行的单次 Android 验收流程。目标组合是 RN/TS `13.4.1-particle.3` 与 Native `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.2`。`.2` 是 STEP-069 v2 multi-plane 所需的新坐标;不得复用、覆盖或误用旧 `.1`。
|
||||||
|
|||||||
35
docs/70_发布/Android_RN_QBINV4_13.4.1-particle.3_发布基线_v1.md
Normal file
35
docs/70_发布/Android_RN_QBINV4_13.4.1-particle.3_发布基线_v1.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Android / RN QBIN V4 `13.4.1-particle.3` 发布基线 v1
|
||||||
|
|
||||||
|
日期:2026-09-14。状态:Android OpenGL / RN Test Host 人工验证通过。
|
||||||
|
|
||||||
|
## 版本
|
||||||
|
|
||||||
|
- Native:`cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.3`
|
||||||
|
- RN:`@navsea/maplibre-particle-rn@13.4.1-particle.3`
|
||||||
|
- MLRN:`11.3.6`
|
||||||
|
|
||||||
|
## 公网 Maven
|
||||||
|
|
||||||
|
Repository:`https://pbf.jpcn.ccwu.cc/maven`
|
||||||
|
|
||||||
|
AAR:`https://pbf.jpcn.ccwu.cc/maven/cc/navsea/maplibre/android-sdk-particle-opengl/13.4.1-particle.3/android-sdk-particle-opengl-13.4.1-particle.3.aar`
|
||||||
|
|
||||||
|
AAR SHA-256:`9ef03eb0d0c03457adc04847cfa69fb67d85191daecd64d3b76db2ad8cc688cd`。
|
||||||
|
|
||||||
|
## 公网 RN tgz
|
||||||
|
|
||||||
|
`https://pbf.jpcn.ccwu.cc/npm/navsea-maplibre-particle-rn-13.4.1-particle.3.tgz`
|
||||||
|
|
||||||
|
2026-09-14 Kotlin guard 修正后的公网回读 SHA-256:`abdd5b5f313b6dc2bc2f2b00848d1901be72fed6a6e1fa15899efb10df9f923f`。
|
||||||
|
|
||||||
|
## 发布规则
|
||||||
|
|
||||||
|
`https://pbf.jpcn.ccwu.cc/` 对应 Linux `/mnt/nas/pbf`。Native AAR/POM/module 写入 `/mnt/nas/pbf/maven/.../<version>/`;RN tgz 写入 `/mnt/nas/pbf/npm/`。发布后必须从公网重新下载并比对 SHA,不能只验证 NAS 本地文件。
|
||||||
|
|
||||||
|
本次开发过程中曾为完成 Android 编译验证覆盖同一个 `.3` tgz;该做法从本基线起禁止。以后公开 artifact 内容变化必须递增版本,避免 npm/CDN/Gradle cache provenance 不清。
|
||||||
|
|
||||||
|
## 当前验证事实
|
||||||
|
|
||||||
|
Win11 Debug APK 已成功构建、安装并运行;Metro/App 端口固定为 Metro `8091`、App `8081`、ADB reverse `8081 → 8091`。Test Host V4 Wind/Wave/Current/Rain Golden QBIN 功能由用户人工确认正常。
|
||||||
|
|
||||||
|
完整发布/构建命令以 `docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md` 为准。
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
# 发布目录
|
# 发布目录
|
||||||
|
|
||||||
保存 Particle release、MapLibre upstream 升级、冻结 commit 和双平台回归结果。
|
保存 Particle release、MapLibre upstream 升级、冻结 commit 和双平台回归结果。
|
||||||
|
|
||||||
|
## 当前 Android / RN 发布基线
|
||||||
|
|
||||||
|
当前有效基线:`Android_RN_QBINV4_13.4.1-particle.3_发布基线_v1.md`。
|
||||||
|
|
||||||
|
历史 release/Step 记录可用于追溯,但当前 Consumer 版本、URL、SHA 和发布规则以该文件、`docs/00_项目总则/当前基线与开发路线_v2.md`、`docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md` 为准。
|
||||||
|
|||||||
@@ -1,76 +1,76 @@
|
|||||||
# MapLibreParticleRNTestHost
|
# MapLibreParticleRNTestHost
|
||||||
|
|
||||||
这是 MapLibreParticleLab 内的独立 React Native 开发宿主,不是 NavSea 业务应用。它只有一个 `MLRNMapView` 与 WeatherRuntime 控制页,用于证明低频控制面:React 的 `reactTag` 经薄 Android 模块定位该 View,再定位该 View 的 `MapLibreMap` 与 map-owned `WeatherRuntime`。
|
这是 MapLibreParticleLab 的独立 React Native 验证宿主,不是 NavSea 业务应用。当前用途是验证 `@navsea/maplibre-particle-rn@13.4.1-particle.3` 与 Native `13.4.1-particle.3` 的 Android OpenGL / QBIN V4 链路。
|
||||||
|
|
||||||
## STEP-079 V4 QBIN Golden Fixture
|
## 当前版本
|
||||||
|
|
||||||
`assets/qbin-golden/` 固化了 WeatherV2 的 8 个未压缩 QBIN V2 fixture:Wind、Wave、Current、Rain 各 T0/T1。它们从冻结来源 `/root/sourceserver/weatherV2/_artifacts/MapLibre_QBIN_V2_单元测试数据_v1/` 复制而来;运行时不依赖该来源、HTTP、CDN、NAS 或 gzip。每个 asset 经 `expo-asset` materialize 为本地 `file://` URI,再仅通过 `FieldRuntime.submitEncodedField(...)` 提交。
|
- RN package:`@navsea/maplibre-particle-rn@13.4.1-particle.3`
|
||||||
|
- Native:`cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.3`
|
||||||
|
- MLRN:`11.3.6`
|
||||||
|
- React Native:`0.85.2`
|
||||||
|
- package:`org.maplibre.particle.rntesthost`
|
||||||
|
- Android 测试设备:`192.168.1.146`
|
||||||
|
|
||||||
`src/qbinGoldenFixtures.ts` 保留 profile contract、稳定 field identity、validTime、size、SHA-256 和真实 binding。Wind/Current 的 ColorBinding 是 U `VELOCITY_COMPONENT`(semantic 1/group 1/unit 1),不是伪造 `SCALAR`;Wave 是 height `SCALAR` 与 direction particle;Rain 的 particle 明确为 N/A。页面保留全部 V3 控制,并新增独立 V4 dataset/load、T0/T1 结果、binding、seek、PLAY/PAUSE、正速度和 clear 控制。midpoint 只报告 command accepted,RN API 未暴露 mix,不能据此宣称观测到 0.5。
|
`.2`、Maven Local handoff、`D:\V308` 等只属于历史 Step,不是当前正常构建入口。
|
||||||
|
|
||||||
开发机可用以下只读校验核验 source 与 bundled 文件的 bytes/SHA-256(不属于运行时依赖):
|
## QBIN V4 Golden Fixture
|
||||||
|
|
||||||
```bash
|
`assets/qbin-golden/` 固化 8 个 raw QBIN:Wind、Wave、Current、Rain 各 T0/T1。`src/qbinGoldenFixtures.ts` 定义 field identity、profile contract、validTime、SHA 和 Binding。
|
||||||
python3 integration/react-native/MapLibreParticleRNTestHost/scripts/verify-qbin-golden-fixtures.py
|
|
||||||
|
V4 页面实际调用:
|
||||||
|
|
||||||
|
```text
|
||||||
|
FieldRuntime.submitEncodedField
|
||||||
|
FieldRuntime.setEncodedColorBinding
|
||||||
|
FieldRuntime.setEncodedParticleBinding
|
||||||
|
FieldRuntime.setEncodedForecastTime
|
||||||
|
FieldRuntime.setEncodedForecastPlaybackState
|
||||||
|
FieldRuntime.setEncodedForecastPlaybackSpeed
|
||||||
|
FieldRuntime.clearEncodedField
|
||||||
```
|
```
|
||||||
|
|
||||||
## 当前 V3-08 版本与首次 prebuild 边界
|
Android Native 链路最终进入 `RasterArraySource::submitEncodedField(...)` 与 `QbinV2Decoder::decode(...)`。因此 V4 验证不是 JS 解码 QBIN。
|
||||||
|
|
||||||
- 当前验收目标是 RN/TS `13.4.1-particle.3` 配合 Native `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.2`。`.2` 是 STEP-069 v2 multi-plane 新 artifact;不得复用或覆盖 `.1`。
|
Test Host 仍保留 V3 canonical 控件作为历史兼容/对照,不代表 NavSea 新接入应继续使用 V3。
|
||||||
- 本地 legacy `@maplibre-particle/weather-runtime-bridge` 已移除;`@navsea/maplibre-particle-rn@13.4.1-particle.3` 是唯一的 `WeatherRuntimeBridge` 提供者。
|
|
||||||
- 必须先由用户手工构建并 Maven Local publish Native `.2`,再对 Test Host 执行 clean prebuild、build、install 与启动。当前仅完成坐标准备,AAR 尚未构建、发布或验收。
|
|
||||||
- Metro 当前 binary asset extension 为 `.f32`、`.u8` 与 `.qbin`。
|
|
||||||
|
|
||||||
- package manager 为 npm(`packageManager: npm@10.9.4`),锁文件为 `package-lock.json`;当前环境的 `npm ci --dry-run --ignore-scripts` 无须 `--legacy-peer-deps` 即可解析。
|
## Metro fixture 配置
|
||||||
- package 明确固定 React Native `0.85.2`、React `19.2.3`、Expo `56.0.4`、`expo-file-system` `56.0.11`、TypeScript `5.9.3`、MLRN `11.3.6`;`app.json` 明确请求 New Architecture。Hermes 的最终启用状态必须在首次 Android prebuild 后检查生成工程。
|
|
||||||
- AGP `8.5.0`、Gradle `8.14.3`、Kotlin `2.1.20`、NDK `27.1.12297006`、JDK 17、minSdk 24、compile/targetSdk 36 是本 Test Host 的**人工验收配置目标**,不是尚未生成 Android 工程的已验证结果。首次 prebuild 后必须以实际 Gradle wrapper、AGP/Kotlin plugin、SDK/NDK 与 Hermes/New Architecture 配置为准核对。
|
|
||||||
|
|
||||||
## 历史:STEP-061/062 Custom SDK 来源(手工执行)
|
`metro.config.js` 注册 `.f32`、`.u8`、`.qbin`,并自动探测 `particle-v3-fields`:仓库内运行时使用 `integration/react-native/particle-v3-fields`;独立 Win11 Host 复制到 `D:\React\MapLibreParticleRNTestHost-V4` 时可使用同级 `D:\React\particle-v3-fields`。
|
||||||
|
|
||||||
Gate C 封存环境负责生成 custom AAR;Test Host 只负责 Maven Local handoff。Expo plugin 对唯一 custom 坐标 `org.maplibre.gl:android-sdk-opengl` 排除 Maven Central,而将 Maven Local 排在首位。因此未先发布本仓库 custom SDK 时 dependency resolution 必须失败,不能悄悄使用官方 SDK;MLRN 的独立 turf/annotation/scalebar 依赖不被这个 SDK-only 排除误伤。
|
## Windows 构建
|
||||||
|
|
||||||
```bash
|
正常消费路径必须来自公网 pbf:RN tgz 从 `https://pbf.jpcn.ccwu.cc/npm/` 安装,Native Gradle 从 `https://pbf.jpcn.ccwu.cc/maven` 解析。Windows 不编译 Native AAR,也不以 Maven Local/LAN AAR 作为正常路径。
|
||||||
cd /mnt/sda1/MapLibreParticleLab/platform/android
|
|
||||||
# 仅当 checkout 已变化,或下方已核对 AAR 的 SHA-256 不一致时才需要:
|
仓库内 Test Host 的 `package.json` 保留 `file:../../../packages/maplibre-particle-rn`,用于同仓源码开发;**正式 Win11 发布物验证时必须显式安装公网 tgz 覆盖该开发依赖**,以证明发布包本身可独立消费。
|
||||||
RENDERER=opengl BUILDTYPE=Release make apackage
|
|
||||||
# STEP-061 必须先按当前 checkout 重建,且只能发布新的 `13.4.1-step061` 坐标:
|
不要在 `V:\` 等盘符根目录执行 Expo prebuild;使用普通子目录,例如:
|
||||||
./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
|
|
||||||
cd /mnt/sda1/MapLibreParticleLab/integration/react-native/MapLibreParticleRNTestHost
|
```text
|
||||||
npm ci
|
D:\React\MapLibreParticleRNTestHost-V4
|
||||||
npx expo prebuild --platform android --clean
|
|
||||||
npx expo run:android
|
|
||||||
```
|
```
|
||||||
|
|
||||||
上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。STEP-060C 的 Maven Local publication 已于 2026-09-07 人工通过:`signOpenglreleasePublication SKIPPED`,没有 `no configured signatory`,发布 AAR、POM、module metadata 均存在,且没有 `.asc`。当前 Gate C build output 与 Maven Local AAR 的共同 SHA-256 是 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`,含 `WeatherRuntime`/`MapLibreMap` classes 和四 ABI。`47646fb…` 只是 publication 前中间 AAR SHA,不再是当前 artifact。后续只有 checkout 或 AAR 变化时,才重新 build/publish 并核对 provenance;不得以 `-x sign` 绕过签名,Maven Central 正式 publication 仍要求签名。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。
|
第一次生成 Android 工程时确保 `android/local.properties` 或 `ANDROID_HOME`/`ANDROID_SDK_ROOT` 指向实际 Android SDK。
|
||||||
|
|
||||||
## Bridge 与生命周期
|
完整 Linux AAR 发布、Win11 npm/Gradle 构建步骤以 `docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md` 为准。
|
||||||
|
|
||||||
`WeatherRuntimeBridge` 每个命令通过 `UIManagerHelper.getUIManager(...FABRIC).resolveView(reactTag)` 解析 View,并只接受 `MLRNMapView`。它直接读取公开的 `MLRNMapView.mapLibreMap`,不复制 MLRN 的私有 `mViews`,不保存 current map,也没有第二套 timeline/playback state。`MapLibreMap` 持有每个 map 的唯一 `WeatherRuntime`:style replacement、View detach 和 React unmount 都会 dispose 旧 facade;style ready 后 `attach` 创建新的 facade。
|
## Metro 与 ADB
|
||||||
|
|
||||||
Style JSON 明确创建 background、host-field `RasterArraySource`、`WeatherColorLayer` 与 `RasterParticleLayer`。Bridge 仅在 source/layers 都存在且 style 已加载时 attach;它不会创建私有 Style registry。错误为结构化 reject:`MAP_VIEW_NOT_FOUND`、`MAP_NOT_READY`、`STYLE_NOT_READY`、`WEATHER_OBJECTS_NOT_READY`、`RUNTIME_DISPOSED`、`INVALID_ARGUMENT` 或 Native `REJECTED`。
|
Metro 固定监听 Win11 `8091`:
|
||||||
|
|
||||||
## Phase A / B 操作
|
```powershell
|
||||||
|
npx expo start --port 8091 --clear
|
||||||
|
```
|
||||||
|
|
||||||
页面 style ready 后显示 reactTag/runtime;Phase A 按钮为 `getState`、enable、WeatherColor visible、particle visible、FPS 30。Phase B 还通过 bridge 暴露 epoch-ms forecast seek、PLAY/PAUSE、速度、stops、独立 particle/trail RGBA、粒子视觉参数和 WeatherColor opacity。JS 只校验小参数,并不保存另一套 runtime 状态;snapshot 来自 Native。
|
Debug App 仍连接设备 `localhost:8081`,所以正确 reverse 只有:
|
||||||
|
|
||||||
## STEP-061 Binary U/V Field transport
|
```powershell
|
||||||
|
adb -s 192.168.1.146 reverse tcp:8081 tcp:8091
|
||||||
|
```
|
||||||
|
|
||||||
正式 Binary ingress 为 `metadataJson + payloadFileUri/path`。Test Host 使用 Expo FileSystem `File.write(Uint8Array)` 将 raw bytes 写入 app cache;TurboModule 只接收 metadata 和本地 `file://` URI(也接受绝对本地路径),Kotlin 对可读性与 64 MiB 上限 fail-closed 后读取原始 `byte[]`,并且只调用既有 `WeatherRuntime.submitWindField(metadataJson, byte[])`。没有 `number[]`/`Array<number>`、payload JSON、base64、hex 或网络下载层。
|
安装/启动可使用 `scripts/05-install-and-run.ps1`。脚本固定设备、package、activity,并按 `8081 → 8091` 设置 reverse。
|
||||||
|
|
||||||
`Submit binary WIND T0/T1` 固定生产 4×3 的两帧 `WIND/GLOBAL` canonical field:north-west origin、row-major、`interleaved-uv`、`float32-le`,并以 `DataView.setFloat32(..., true)` 显式写入 U=eastward、V=northward。初始状态与每轮开始均为 `PENDING`,绝不预先显示 READY。按钮先通过既有 `clearWindFields()` 清空 Source-owned Timeline,再依序提交一个声明字节数与文件实际字节数不一致的 invalid probe、T0、T1,并严格断言 Core 结果依次为 `REJECTED_ADAPTER`、`ACCEPTED_PENDING_INITIAL_WINDOW`、`INITIAL_WINDOW_READY`,最后 Native `WeatherRuntime.state` 必须为 `READY`;任意不符均显示 `ERROR`。
|
## 当前人工验收
|
||||||
|
|
||||||
界面严格区分 `Core evidence: INITIAL_WINDOW_READY + runtime READY` 与 producer 已提交的 T0/T1 generation/time identity;后者不是 Native/Core runtime window。MIX 明确为 `Core-owned / not exposed`。Android 最终 T0/T1 真值由既有 logcat `HOST_FIELD_SNAPSHOT_READY` 与 `HOST_FIELD_INITIAL_WINDOW_READY` 验证,本 Step 不新增 Core getter。
|
2026-09-14 已完成 Win11 Debug APK 构建、安装、Metro bundle 和人工功能验证。V4 Wind/Wave/Current/Rain 可加载;T0/midpoint/T1、PLAY/PAUSE、速度和 clear 可操作。midpoint 只证明 forecast-time command 接受;若没有 Native mix getter/日志,不把 UI 操作本身写成“已观测 mix=0.5”。
|
||||||
|
|
||||||
启动入口是 `App.tsx`。`app.json` 已固定 `orientation: landscape`;下一次 Android prebuild/build 应生成 `MainActivity android:screenOrientation="landscape"`。Android build、安装及设备操作必须由用户手工执行,详见 `docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md`。
|
历史 STEP-060~072 过程与旧 V3/MavenLocal 证据保留在 `docs/`,但当前操作先读 `docs/00_项目总则/当前基线与开发路线_v2.md` 与 STEP-080 v2。
|
||||||
|
|
||||||
## STEP-062 真实 WeatherV2 综合地图
|
|
||||||
|
|
||||||
Test Host 固定消费已验收的 `org.maplibre.gl:android-sdk-opengl:13.4.1-step061`,本阶段不构建或发布 AAR。页面 style 顺序是 `background → GSI raster → WeatherColorLayer → RasterParticleLayer`;GSI 使用国土地理院标准地图 `https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png`(256、maxzoom 18、含 attribution),相机初始聚焦日本及周边 WeatherV2 bounds。
|
|
||||||
|
|
||||||
受控 assets `assets/weather/ecmwf-hres-wind-20260807/` 原样复制 Android Validation 的 `dataset.json` 与四个 `metadata.json`/`field.f32`。`expo-asset` 是明确直接依赖,`metro.config.js` 当前增加 `.f32` 与 `.u8` binary asset extension。点击 `LOAD REAL WEATHER T0-T3` 会先 clear,然后通过 `Asset.fromModule(...).downloadAsync()` 取得四个 Expo cache `file://` URI,按 producer validTime 提交;JS 只传小型 metadata JSON 和文件引用,不 materialize 3.01 MiB payload 为数组、JSON、base64 或 hex。
|
|
||||||
|
|
||||||
硬断言依次为 T0=`ACCEPTED_PENDING_INITIAL_WINDOW`、T1=`INITIAL_WINDOW_READY`、T2/T3=`ACCEPTED_NEXT_SNAPSHOT`,并在最后要求 Native state=`READY`;任何偏差均显示 `ERROR`。界面提供 PLAY/PAUSE、HALF/NORMAL/DOUBLE、四个 epoch-ms forecast seek、AUTO/30/60 FPS、两层可见性、冻结 WeatherColor stops、独立 particle/trail 色彩,以及粒子/轨迹视觉参数。Expo/系统管理 asset cache;本页不自建 `.f32` 临时文件。
|
|
||||||
|
|
||||||
## Windows 安装与 Metro reverse
|
|
||||||
|
|
||||||
Test Host 的 Metro 固定在 8091,但 Debug APK 的 RN dev-server 探测仍从设备 `localhost:8081` 发起。手工安装前以受控脚本 `scripts/05-install-and-run.ps1` 保留两条 reverse:`tcp:8091 -> tcp:8091` 与 `tcp:8081 -> tcp:8091`。脚本固定设备 `192.168.1.146`、package `org.maplibre.particle.rntesthost`、activity `.MainActivity`,并在安装前完成 reverse。
|
|
||||||
|
|||||||
@@ -2,11 +2,10 @@ $ErrorActionPreference = 'Stop'
|
|||||||
Write-Host '=== 安装并启动 RN Test Host ==='
|
Write-Host '=== 安装并启动 RN Test Host ==='
|
||||||
$root = Split-Path $PSScriptRoot -Parent
|
$root = Split-Path $PSScriptRoot -Parent
|
||||||
$apk = Join-Path $root 'android\app\build\outputs\apk\debug\app-debug.apk'
|
$apk = Join-Path $root 'android\app\build\outputs\apk\debug\app-debug.apk'
|
||||||
if (-not (Test-Path $apk)) { throw '请先执行 03-build-debug.ps1' }
|
if (-not (Test-Path $apk)) { throw 'Debug APK 不存在;请先在 android 目录执行 .\gradlew.bat :app:assembleDebug --console=plain' }
|
||||||
|
|
||||||
$device = '192.168.1.146'
|
$device = '192.168.1.146'
|
||||||
adb -s $device get-state
|
adb -s $device get-state
|
||||||
adb -s $device reverse tcp:8091 tcp:8091
|
|
||||||
adb -s $device reverse tcp:8081 tcp:8091
|
adb -s $device reverse tcp:8081 tcp:8091
|
||||||
adb -s $device install -r $apk
|
adb -s $device install -r $apk
|
||||||
if ($LASTEXITCODE -ne 0) { throw 'APK 安装失败' }
|
if ($LASTEXITCODE -ne 0) { throw 'APK 安装失败' }
|
||||||
|
|||||||
@@ -1,24 +1,22 @@
|
|||||||
# 变更记录
|
# 变更记录
|
||||||
|
|
||||||
## 13.4.1-particle.3
|
## 13.4.1-particle.3(当前 Android QBIN V4 基线)
|
||||||
|
|
||||||
- V3-08 将 RN package、Expo plugin 与 Test Host 的目标 Native 坐标同步为 `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.2`;`.2` 是 STEP-069 v2 multi-plane 所需的新 artifact,绝不复用或覆盖 `.1`。
|
- RN package 与 Android Native artifact 已统一为 `13.4.1-particle.3`。
|
||||||
- 此项仅为 Android 手工构建、Maven Local 发布与单次综合验收做准备;AAR 尚未发布或验收,未执行 Android Gradle/AAR/APK/ADB 或 Jest。
|
- 新增 QBIN V4 encoded ingress:`submitEncodedField`、Color/Particle Binding、Forecast Time/Playback、encoded clear。
|
||||||
- `FieldRuntime.submitField` 升级为 `maplibre-particle-field/v2` 的明确 `FieldPayloadRefs`:shared validity 加可选 scalar/vector 本地文件,不再接受模糊单 payload。
|
- Android/JNI/RN 链路已接通 `RasterArraySource::submitEncodedField` 与 `QbinV2Decoder`。
|
||||||
- 新增 `setFieldValueSource` 与 `setParticleAdvectionScale`,仅桥接既有 renderer 配置,不重传 field 或改变 Timeline。
|
- ColorBinding 支持 `VELOCITY_COMPONENT`,用于 Wind/Current 的 U 分量色场。
|
||||||
- 保留 `submitWindField` native/internal v1 ABI;公共兼容入口改名为 `submitLegacyVectorField`,避免与 v2 混淆。
|
- 保留 V3 `submitField(FieldPayloadRefs)` 作为兼容/对照入口;新 Consumer 推荐 V4。
|
||||||
- Android bridge 在读取前校验全部 local file、非空 plane 与合计 64 MiB;Java/JNI 用有 presence flags 和长度的 v2 packed container 恢复 Core `ParticleFieldPayloadBundle`。
|
- 2026-09-14 Win11 实编译发现并修正 Kotlin `validUInt16` / `validSafeInteger` 条件表达式;修正后的 RN `.3` 已重新发布。
|
||||||
|
- Test Host 已用 8 个真实 QBIN Golden Fixture(Wind/Wave/Current/Rain,各 T0/T1)完成 Android 人工验证。
|
||||||
|
- Expo plugin、Test Host plugin 与 RN Android dependency 均指向公网 pbf Maven 的 Native `.3`。
|
||||||
|
|
||||||
## 13.4.1-particle.2
|
## 13.4.1-particle.2
|
||||||
|
|
||||||
- 公共 RN/TS API 重整为纯 `FieldRuntime` Field Renderer 接口。
|
- 公共 RN/TS API 重整为纯 Field Renderer 接口。
|
||||||
- 移除根入口对 `@maplibre/maplibre-react-native` 的转导出,以及旧 Weather/Wind 公共 API 与兼容 wrapper。
|
- 移除包内数据加载、HTTP、解码与业务辅助模块;宿主负责业务选择、缓存和本地文件。
|
||||||
- 移除包内数据加载、HTTP、解码与业务辅助模块;数据获取、业务选择、缓存和本地文件写入由 Consumer/宿主负责。
|
- 新增 V3 canonical `submitField` / `FieldPayloadRefs` 与通用 Scalar/Vector Field 支持。
|
||||||
- 新增 `FieldColorStop.value`、`particleFieldIds` 与不含底图的 `createParticleFieldStyleFragment()`。
|
- 该版本属于 V3 历史基线。
|
||||||
- 非原生环境可安全导入;实际调用且 native bridge 缺失时返回稳定错误。
|
|
||||||
- RN 包版本升为 `.2`;Android Native artifact 保持 `13.4.1-particle.1`,未构建、未修改、未发布。
|
|
||||||
- Consumer 实测发现并修正 style helper 中无效的 `raster-particle-opacity`;最终 helper 使用 Native `.1` 已验证的 `raster-particle-active`,不修改 Native AAR。
|
|
||||||
- Android Consumer 已验证 `FieldRuntime` attach、T0–T3、Runtime READY,以及图场/粒子独立开关。
|
|
||||||
|
|
||||||
## 13.4.1-particle.1
|
## 13.4.1-particle.1
|
||||||
|
|
||||||
|
|||||||
@@ -1,74 +1,49 @@
|
|||||||
# @navsea/maplibre-particle-rn
|
# @navsea/maplibre-particle-rn
|
||||||
|
|
||||||
`13.4.1-particle.3` 提供 React Native 的纯 Field Renderer 接口。它只接收宿主已经准备好的 canonical field 元数据与本地二进制文件,并控制既有 Native/Core 渲染器;不提供地图组件、底图、数据集、provider、HTTP、缓存或业务策略。
|
当前版本:`13.4.1-particle.3`。Android Native 必须配套 `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.3`。本包是 React Native 的薄控制面,不负责 Map 组件、provider、HTTP、manifest、下载、缓存或 NavSea 业务策略。
|
||||||
|
|
||||||
Map 与 Camera 必须由 Consumer 直接从 `@maplibre/maplibre-react-native@11.3.6` 导入。本包将该库声明为 peer dependency,不再转导出 MapLibre React Native。
|
## 当前推荐主链:QBIN V4
|
||||||
|
|
||||||
## 版本关系
|
宿主负责取得并缓存 QBIN 文件,然后只把本地绝对路径或 `file://` URI 交给 RN/Native:
|
||||||
|
|
||||||
- RN/TS 包:`13.4.1-particle.3`
|
|
||||||
- Android Native artifact(V3-08 目标):`cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.2`
|
|
||||||
|
|
||||||
`.2` 是 STEP-069 v2 multi-plane(shared validity 加可选 scalar/vector)的新 Native artifact 坐标,不能复用或覆盖旧 `.1`。本次只完成坐标准备;用户尚未手工构建、发布或验收 Android AAR,Expo plugin 现指向目标 `.2`,不得将其表述为已发布或已通过。
|
|
||||||
|
|
||||||
## 最小接入
|
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { Camera, Map } from "@maplibre/maplibre-react-native";
|
await FieldRuntime.attach(reactTag);
|
||||||
import {
|
await FieldRuntime.submitEncodedField(reactTag, fieldKey, metadata, profileContract, qbinFileUri);
|
||||||
FieldRuntime,
|
await FieldRuntime.setEncodedColorBinding(reactTag, colorBinding);
|
||||||
createParticleFieldStyleFragment,
|
await FieldRuntime.setEncodedParticleBinding(reactTag, particleBinding);
|
||||||
type FieldColorStop,
|
await FieldRuntime.setEncodedForecastTime(reactTag, timestampMs);
|
||||||
} from "@navsea/maplibre-particle-rn";
|
|
||||||
|
|
||||||
const renderer = createParticleFieldStyleFragment();
|
|
||||||
const mapStyle = JSON.stringify({
|
|
||||||
version: 8,
|
|
||||||
sources: { ...renderer.sources },
|
|
||||||
layers: [...renderer.layers],
|
|
||||||
});
|
|
||||||
```
|
```
|
||||||
|
|
||||||
宿主在样式加载并取得 `reactTag` 后调用 `FieldRuntime.attach(reactTag)`。准备 canonical payload 的方式由宿主决定,再按时间顺序调用:
|
Android 链路为:`FieldRuntime.submitEncodedField` → `WeatherRuntimeBridgeModule` → `WeatherRuntime.submitEncodedField` → JNI → `RasterArraySource::submitEncodedField` → `QbinV2Decoder::decode`。因此 QBIN 解码发生在 MapLibre Native,不在 JS/TS。
|
||||||
|
|
||||||
```ts
|
V4 主要公共方法:`submitEncodedField`、`setEncodedColorBinding`、`setEncodedParticleBinding`、`setEncodedForecastTime`、`setEncodedForecastPlaybackState`、`setEncodedForecastPlaybackSpeed`、`clearEncodedField`。ColorBinding 支持 `SCALAR`、`VELOCITY_COMPONENT`、`DIRECTION_ANGLE`;ParticleBinding 支持 U/V vector components 或 direction angle。
|
||||||
await FieldRuntime.clearFields(reactTag);
|
|
||||||
await FieldRuntime.submitField(reactTag, metadataJson, {
|
|
||||||
validityFileUri: "file:///absolute/path/validity.u8",
|
|
||||||
scalarFileUri: "file:///absolute/path/scalar.f32", // 可选
|
|
||||||
vectorFileUri: "file:///absolute/path/vector-uv.f32", // 可选;至少 scalar/vector 之一
|
|
||||||
});
|
|
||||||
await FieldRuntime.setFieldColorStops(reactTag, [
|
|
||||||
{ value: 0, red: 0.08, green: 0.2, blue: 0.8, alpha: 0.72 },
|
|
||||||
{ value: 30, red: 0.9, green: 0.08, blue: 0.08, alpha: 0.72 },
|
|
||||||
]);
|
|
||||||
```
|
|
||||||
|
|
||||||
`createParticleFieldStyleFragment()` 只返回 renderer source、field layer 与 particle layer;不含底图或业务数据。`particleFieldIds` 可供宿主引用相同的 source/layer ID。
|
## V3 canonical 兼容
|
||||||
|
|
||||||
## FieldRuntime
|
`submitField(metadataJson, FieldPayloadRefs)`、`clearFields`、旧 renderer 参数接口仍保留,用于历史 Consumer/Test Host 对照。新 NavSea 接入不要以 V3 `submitField` 作为新主链。
|
||||||
|
|
||||||
全部方法均以 `reactTag` 为首参并返回既有桥接命令结果:
|
## Map / Camera
|
||||||
|
|
||||||
- 生命周期:`attach`、`detach`、`getState`
|
Map 与 Camera 直接从 `@maplibre/maplibre-react-native@11.3.6` 使用。本包把 MLRN 作为 peer dependency,不转导出 MapLibre React Native。
|
||||||
- 数据:`clearFields`、`submitField`(v2 `FieldPayloadRefs`)
|
|
||||||
- renderer 配置:`setFieldValueSource("SCALAR" | "VECTOR_MAGNITUDE")`、`setParticleAdvectionScale(scale)`
|
|
||||||
- 显示与播放:`setEnabled`、`setFieldVisible`、`setParticleVisible`、`setTargetFps`、`setTargetTime`、`setPlaybackState`、`setPlaybackSpeed`
|
|
||||||
- 色彩:`setFieldColorStops`、`setParticleColor`、`setTrailColor`
|
|
||||||
- 粒子视觉参数:`setParticleCount`、`setParticleLineWidth`、`setParticleLength`、`setParticleOpacity`、`setTrailOpacity`、`setTrailFade`、`setFieldOpacity`
|
|
||||||
|
|
||||||
`FieldColorStop` 使用无业务含义的 `value` 字段;色阶继续遵循既有 Native 契约,至少提供 2 个且 `value` 严格递增。包在非原生环境可安全导入;实际调用 `FieldRuntime` 而 Native bridge 不存在时会给出稳定、明确的错误。
|
## Android 发布
|
||||||
|
|
||||||
`submitField` 的 v2 `payloadRefs` 必须有 `validityFileUri`,并且必须有 `scalarFileUri` 或 `vectorFileUri`。每个引用只能是 `file://` URI 或绝对本地路径;桥接层会在读入前检查全部文件、非空性和合计 64 MiB 上限。它不接受 JS number array、Base64 或大 JSON payload。Core 继续按 metadata 精确校验各 plane 的长度、encoding、layout 和 validity。
|
RN tgz:
|
||||||
|
|
||||||
旧 Native `.1` 的 `submitWindField(metadataJson, byte[])` 是单一 v1 vector ABI。`.3` 不再以该模糊形状作为主入口;确有旧 native seam 的 Consumer 可显式调用 `submitLegacyVectorField`,它仅转发冻结的 v1 ABI。新代码应使用目标 Native `.2` 提供的 v2 `submitField`。
|
|
||||||
|
|
||||||
## 安装与发布
|
|
||||||
|
|
||||||
正式包仍以 HTTPS tarball 交付:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
https://pbf.jpcn.ccwu.cc/npm/navsea-maplibre-particle-rn-13.4.1-particle.3.tgz
|
https://pbf.jpcn.ccwu.cc/npm/navsea-maplibre-particle-rn-13.4.1-particle.3.tgz
|
||||||
```
|
```
|
||||||
|
|
||||||
Consumer 只依赖发布 tarball,不依赖本仓库源码路径。发布前通过 `npm pack` 检查 tarball 内容;本包不包含 AAR、APK、fixture 或凭证。
|
Native Maven repository:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://pbf.jpcn.ccwu.cc/maven
|
||||||
|
```
|
||||||
|
|
||||||
|
Native coordinate:
|
||||||
|
|
||||||
|
```text
|
||||||
|
cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.3
|
||||||
|
```
|
||||||
|
|
||||||
|
Expo plugin 与 `android/build.gradle` 必须指向同一 `.3`。正常 Consumer 不复制 AAR、不依赖 MapLibreParticleLab 源码路径,也不以 Maven Local 作为公网验证主路径。完整 Linux 发布与 Win11 验证流程见 `docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md`。
|
||||||
|
|||||||
@@ -810,3 +810,9 @@ Android V3-08 单次综合验收已完成并关闭。Native `13.4.1-particle.2`
|
|||||||
- 固化 Linux `linux_build_publish.sh`:仅接受 RN/Native 完全一致版本,默认固定 OpenGL Release 四 ABI build、Maven Local publish、AAR/POM/module 校验、RN package typecheck/npm pack,以及 AAR/tgz bytes+SHA-256 的版本隔离 build-manifest;noisy Linux build/typecheck/package 一律经 build-output-throttle,缺 runner 立即 fail-closed。
|
- 固化 Linux `linux_build_publish.sh`:仅接受 RN/Native 完全一致版本,默认固定 OpenGL Release 四 ABI build、Maven Local publish、AAR/POM/module 校验、RN package typecheck/npm pack,以及 AAR/tgz bytes+SHA-256 的版本隔离 build-manifest;noisy Linux build/typecheck/package 一律经 build-output-throttle,缺 runner 立即 fail-closed。
|
||||||
- 固化 Windows `windows_build_testhost.ps1`:manifest 是唯一 artifact/version 输入,支持先 `-DryRun`,再把 bundle 校验安装到 Windows Maven Local、固定 tgz/coordinate、显式 prebuild 与 Debug APK build。默认没有 ADB/设备;`-Install`/`-Run` 显式开关才可访问 `192.168.1.146`。
|
- 固化 Windows `windows_build_testhost.ps1`:manifest 是唯一 artifact/version 输入,支持先 `-DryRun`,再把 bundle 校验安装到 Windows Maven Local、固定 tgz/coordinate、显式 prebuild 与 Debug APK build。默认没有 ADB/设备;`-Install`/`-Run` 显式开关才可访问 `192.168.1.146`。
|
||||||
- 在 `particle-codex` 使用已存在的 Native `.3` Maven Local publication 运行 `--reuse-existing`:AAR/POM/module、`.2` 历史保护、RN typecheck、npm tgz、manifest 路径/bytes/SHA/version 全部 PASS;未重复完整 AAR 编译、未执行 Gradle APK/ADB/设备/Jest。Linux 无 `pwsh`,Windows PowerShell parser 未本机执行,已明确记录而未伪称 PASS。
|
- 在 `particle-codex` 使用已存在的 Native `.3` Maven Local publication 运行 `--reuse-existing`:AAR/POM/module、`.2` 历史保护、RN typecheck、npm tgz、manifest 路径/bytes/SHA/version 全部 PASS;未重复完整 AAR 编译、未执行 Gradle APK/ADB/设备/Jest。Linux 无 `pwsh`,Windows PowerShell parser 未本机执行,已明确记录而未伪称 PASS。
|
||||||
|
### 2026-09-14 QBIN V4 Android `.3` 人工验收与文档基线整理
|
||||||
|
|
||||||
|
- Linux OpenGL Native 与 RN package 已统一为 `13.4.1-particle.3`;AAR 通过 `/mnt/nas/pbf/maven` 对应公网 `https://pbf.jpcn.ccwu.cc/maven` 发布,RN tgz 通过 `/mnt/nas/pbf/npm` 对应公网 `/npm/` 发布。Win11 Test Host 正常路径改为直接消费公网 npm/Maven,不再以 LAN AAR/Maven Local 作为当前主流程。
|
||||||
|
- Win11 实际构建发现并修正 JNI particle binding declaration 参数数目与 Kotlin `validUInt16`/`validSafeInteger` 编译表达式;Debug APK 成功生成、安装并启动。Metro 固定监听 8091,App 仍访问 localhost:8081,正确 reverse 为 `8081 -> 8091`。
|
||||||
|
- Test Host 的 8 个 V4 QBIN Golden Fixture(Wind/Wave/Current/Rain,各 T0/T1)已由用户人工确认功能正常;V4 调用经 `submitEncodedField` 进入 `RasterArraySource::submitEncodedField` / `QbinV2Decoder`,不是 JS 解码。
|
||||||
|
- 当前入口文档已整理:`docs/00_项目总则/当前基线与开发路线_v2.md`、`docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md`、`docs/70_发布/Android_RN_QBINV4_13.4.1-particle.3_发布基线_v1.md`。旧 STEP-060~072 与 STEP-080 v1 保留历史事实,但不再作为当前构建命令来源。
|
||||||
|
|||||||
Reference in New Issue
Block a user