Files
MapLibreParticleLab/docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v2.md
OpenAI Codex bcd020fc55
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: close STEP-063 release validation
2026-09-09 15:07:36 +08:00

5.5 KiB
Raw Blame History

STEP-063 MapLibre 粒子 Android v1 发布工程化 — 完成报告 v2

结论:CLOSED / PASS。 日期:2026-09-09。

1. 最终发布契约

  • MapLibre Native upstream:13.4.1。
  • Core commit:18545ca10d296704b2cba675b182ff2c8da24588。
  • renderer:OpenGL。
  • npm package:@navsea/maplibre-particle-rn@13.4.1-particle.1。
  • Maven:cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1。
  • Maven repository:https://pbf.jpcn.ccwu.cc/maven。
  • release manifest:release/maplibre-particle/release-manifest.json。
  • Consumer:integration/react-native/MapLibreParticlePackageConsumerTestHost/。

正式 package 的职责是提供 React Native facade、WeatherRuntime bridge、Expo/Gradle 接线并复用唯一 MLRN peer dependency;正式 Android Native 来自 Maven AAR,不通过源码路径或 Maven Local 消费。

2. 正式制品与哈希

Android AAR:166,304,929 bytes,SHA-256:

63c976c5a73fe8f132f428afecca40b09fa2dbdedaa13721586c472ea7eb279d

npm tarball:navsea-maplibre-particle-rn-13.4.1-particle.1.tgz,9,100 bytes;SHA-1 247e2db901f6588c9e48bc3156a448b97d203d0d;SHA-256 31335791a5a6e553a538f84816322e8cd119f16d7c2b15436ce785aa497da6a8。

3. Consumer 依赖问题与最终修正

首次 Windows Consumer APK 编译失败原因不是 Particle AAR,而是正式 npm 包把 MLRN 作为普通 dependency,导致 native module 嵌套在 @navsea/.../node_modules/@maplibre/...,RN codegen/CMake 路径超过 Windows 260 字符限制。

修正提交:fa431ba6fd1f182b8b77345b50a9d74e225f17d4,将 @maplibre/maplibre-react-native@11.3.6 调整为 peer dependency,并仅保留 devDependency 支撑包自身开发。

修正后实际安装验证:根层 MLRN 存在,NavSea package 内嵌 MLRN 不存在;npm ls 只形成一份 MLRN native module。Gradle dependencyInsight 明确显示:

org.maplibre.gl:android-sdk-opengl:13.4.1
→ cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1

因此正式 Consumer APK 中使用的是正式 Particle AAR,而不是 step061、官方 OpenGL AAR、Maven Local 或 MapLibre Native 源码构建。

4. 真实 WeatherV2 验收 Host

为了让 Package Consumer 真正模拟未来 NavSea 升级包后的使用方式,Consumer 从原 2×2 smoke fixture 升级为真实 WeatherV2 T0–T3。实现提交:3ac678a3c8164082452bd77e61989ccc928ed8bd,message:test: validate release package with real WeatherV2,已 push 到 origin/particle/main。

Consumer 仍只从 @navsea/maplibre-particle-rn 导入 Map、Camera、WeatherRuntime;没有重新引入旧 weather-runtime-bridge 或 direct MLRN import。

真实数据为 ECMWF HRES 2026-08-07 00/06/12/18 四帧。每帧 513×769、3,155,976 bytes,canonical contract 为 maplibre-particle-field/v1、float32-le、interleaved-uv,U eastward、V northward;React transport 为 metadataJson + local file:// payload。

Linux 已通过:

  • Consumer TypeScript typecheck;
  • package peer/hoist 结构检查;
  • 禁止 direct MLRN / 旧 bridge 依赖审计;
  • Metro .f32 asset 配置;
  • npx expo export --platform android,实际导出四个 3.2MB .f32;
  • git diff --check。

没有执行 Jest。

5. Windows / Android 最终人工验收

Win11 Consumer Android 环境按 NavSea 当前编译基线对齐:Gradle 8.14.3、buildTools 36.0.0、minSdk 24、compileSdk/targetSdk 36、NDK 27.1.12297006、Kotlin Plugin 2.1.20、JDK 17、RN 0.85.2、New Architecture 与 Hermes 开启。

用户手工完成正式 Package Consumer 的 Android 编译和安装,并在实体设备运行;2026-09-09 用户明确确认:这个APK确认正常了。该 APK 对应已经升级为真实 WeatherV2 T0–T3 的 Package Consumer,因此 STEP-063 要求的正式 package / Maven AAR / Runtime / WeatherColor / Particle 消费链人工门槛判定 PASS。

本报告不把未单独提供的 PID logcat 全量 hard-gate 扫描写成已执行;PASS 依据正式依赖解析、成功 APK 编译安装、真实 Consumer 运行以及用户最终确认。

6. 关闭边界

  • 未修改 Particle GPU、WeatherColor 算法、Timeline、HostField canonical contract、JNI/Core 业务功能。
  • 未接入 NavSea 仓库。
  • 未执行 Jest。
  • npm registry 仍为 null。
  • release tag 仍为 null。

因此 STEP-063 的 CLOSED / PASS 只表示发布工程化、正式制品和 Package Consumer Android 验收完成;不等于 npm 已正式上传,也不等于 release tag 已创建。下一步应单独执行 Release Freeze / Tag。

7. React 使用说明

新增:

docs/30_设计/MapLibre粒子ReactNative使用说明_v1.md

该说明从 React Native 使用角度记录:正式包安装模型、Expo plugin、Map attach/detach、WeatherRuntime API、真实 T0–T3 提交方式、NavSea/Core 边界,以及最重要的 canonical 显示数据结构。

数据结构明确为规则二维 NW-origin row-major Grid;payload 是 contiguous float32-le / interleaved-uv,每 cell 8 bytes,cell=y*width+x,U eastward-positive、V northward-positive;metadata 包含 schema、field identity、generation、validTime、bounds、grid、noData 和 byteLength。文档同时区分当前 Native 强制校验字段与仅用于审计的额外 metadata。

8. Git 基线

本轮最终人工验收前的主线实现 HEAD:3ac678a3c8164082452bd77e61989ccc928ed8bd,已与 origin/particle/main 一致。本文档收尾只允许精确提交本轮新增/更新文档与 release manifest,不提交历史无关 untracked 文件。