Files
MapLibreParticleLab/docs/报告/STEP-060E_CoreOnlyLayer存在性检查修复_Codex完成报告_v1.md
OpenAI Codex 11402bc557
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: correct STEP-060E validation record
2026-09-08 19:17:32 +08:00

3.3 KiB
Raw Blame History

STEP-060E CoreOnly Layer 存在性检查修复 — Codex 完成报告

结论

状态:IMPLEMENTED / WAITING_CODE_REVIEW。本轮完成 Android Host 到 JNI/Core 的 Style 存在性窄查询,修复 RN bridge 对 CoreOnly weather layer 的假阴性;STEP-060 未 CLOSED,未进入 STEP-061。

实际完成内容

  • 根因:RasterParticleLayer 与 WeatherColorLayer 是 CoreOnly layer,Core 可正常渲染,但 Style.getLayer() 需要 Java peer,故会错误返回 null。
  • 新增公开 MapLibreMap.hasStyleSource(String)、hasStyleLayer(String);实现穿过 NativeMap/NativeMapView 和 JNI,C++ 直接以 map->getStyle().getSource(id) 与 getLayer(id) 判断。
  • WeatherRuntimeBridge.attach() 在 style fully loaded 后,使用三个独立 Core 查询检查 rn-weather-fields、rn-weather-color、rn-weather-particles;没有改变 attach 成功路径、replaceWeatherRuntime()、snapshot 或 View detach listener。
  • WEATHER_OBJECTS_NOT_READY 保留固定错误码和三个独立 present/missing 字段,新增 styleUri(JSON style 为空时 ),移除 style.getLayers()/getSources() 的 Java peer 枚举。
  • Maven 临时版本同步为 13.4.1-step060e。

修改文件

  • platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/{NativeMap.java,NativeMapView.java,MapLibreMap.java}
  • platform/android/MapLibreAndroid/src/cpp/{native_map_view.hpp,native_map_view.cpp}
  • integration/react-native/MapLibreParticleRNTestHost/modules/weather-runtime-bridge/android/src/main/java/org/maplibre/particle/rntesthost/weather/WeatherRuntimeBridgeModule.kt
  • platform/android/VERSION、bridge android/build.gradle、plugins/withParticleNativeAndroid.js、Test Host README、本 Step 记录、本文档及 粒子开发记录.md。

验证

  • ./gradlew :MapLibreAndroid:tasks --all --console=plain:PASS。
  • ./gradlew :MapLibreAndroid:compileOpenglReleaseJavaWithJavac --console=plain:PASS。
  • cmake --build platform/android/MapLibreAndroid/.cxx/RelWithDebInfo/243u115z/x86_64 --target maplibre -- -j2:PASS(JNI/OpenGL x86_64 等价精确 CMake/Ninja target,不打包 AAR)。
  • 静态检查:JNI Java 声明、C++ 声明/实现/注册名称一致;Bridge 不再调用 Style.getLayer()、Style.getLayers()、Style.getSource() 或 Style.getSources() 作为 weather object 真值。
  • git diff --check:PASS。

所有可能产生大量输出的 Gradle 编译均通过 build-output-throttle 执行;未执行 Jest。

未执行与风险

  • AAR_BUILD_NOT_EXECUTED_BY_CODEX。
  • 未执行 Maven Local publication、Android APK build/install、ADB、设备或模拟器验证。
  • 本地 Expo 生成工程先前缺少 NativeWeatherRuntimeBridgeSpec;未为本轮新增大型 codegen 或 mocking 方案。后续人工构建新 AAR 并在 Win11 更新 Maven Local 后,仍需执行两条 dependencyInsight、APK build 与 attach/runtime 人工验收。
  • 运行期新 JNI 方法的真值行为需要上述 Android 人工验收;本轮未改变 CoreOnly 注册或 WeatherRuntime 控制状态机。

Git

  • source baseline:2d2375cd532468821c6e3c158ee1a275f4522044
  • 功能 commit / Final HEAD / push 结果:将在本次受限验证、提交并推送后回填。
  • remote branch:origin/particle/main
  • 预期 Maven 坐标:org.maplibre.gl:android-sdk-opengl:13.4.1-step060e