diff --git a/docs/50_Step记录/STEP-043B_40-02C_Android到Core_MIX属性桥接_v1.md b/docs/50_Step记录/STEP-043B_40-02C_Android到Core_MIX属性桥接_v1.md index 173fa34d1..68f4a1a05 100644 --- a/docs/50_Step记录/STEP-043B_40-02C_Android到Core_MIX属性桥接_v1.md +++ b/docs/50_Step记录/STEP-043B_40-02C_Android到Core_MIX属性桥接_v1.md @@ -5,3 +5,7 @@ - 实现:最小 `NativeMapView.setStyleLayerFloatProperty(layerId, propertyName, value)`,JNI 通过 `Style::getLayer()` 与正式 `Layer::setProperty()` 更新 Core 属性;没有完整 RasterParticle Java peer。 - Host:MIX 不再查询 Java Layer peer,bridge 成功后才更新 `timeMix`。 - 未运行 Android Gradle/ADB;T4--T10 待用户验收。 + +## Android 编译修正 + +首次 Android 编译发现 `Layer::setProperty(..., static_cast(value))` 触发未支持的 `Convertible` / `ConversionTraits`。Core 已有强类型 `RasterParticleLayer::setTimeMix(float)`;bridge 现确认 `raster-particle-time-mix` 与实际 layer 类型后直接调用该 setter,不新增 conversion trait。Kotlin `setTimeMix()` 不含 `Style.getLayer()`、`layer.setProperties()` 或 `PaintPropertyValue` 的 MIX 写入,bridge 成功后才更新 `timeMix`。 diff --git a/docs/报告/STEP-043B_40-02C_Android到Core_MIX属性桥接_Codex完成报告_v1.md b/docs/报告/STEP-043B_40-02C_Android到Core_MIX属性桥接_Codex完成报告_v1.md index 035c5673f..e6332d975 100644 --- a/docs/报告/STEP-043B_40-02C_Android到Core_MIX属性桥接_Codex完成报告_v1.md +++ b/docs/报告/STEP-043B_40-02C_Android到Core_MIX属性桥接_Codex完成报告_v1.md @@ -13,3 +13,16 @@ ``` APK:`platform/android/MapLibreAndroidTestApp/build/outputs/apk/opengl/debug/MapLibreAndroidTestApp-opengl-debug.apk`。T4--T10 仍待 Android 手工验收,状态不得判 PASS。 + +## Android 编译修正 + +第一次 Android 编译失败是因为 generic `Layer::setProperty()` 收到 `double`,而当前 conversion 系统没有 `Convertible` / `ConversionTraits` backing。最终使用已存在的强类型 `RasterParticleLayer::setTimeMix(float)`:JNI 先校验 property 名和 runtime Layer 类型,再调用 setter。未使用 generic Convertible,也没有新增 conversion trait。Kotlin 已完全删除 MIX 的 Java `Style.getLayer()` / `layer.setProperties()` 写入;JNI boolean 成功才写入 `timeMix`,失败保持原值。未修改 shader、Renderer、Field、ADVANCE;未运行 Android Gradle、ADB,未加入 Jest。 + +用户 x86_64 编译: + +```bash +cd /mnt/sda1/MapLibreParticleLab/platform/android +./gradlew :MapLibreAndroidTestApp:assembleOpenglDebug -Pandroid.injected.build.abi=x86_64 --console=plain +``` + +APK:`./MapLibreAndroidTestApp/build/intermediates/apk/opengl/debug/MapLibreAndroidTestApp-opengl-debug.apk`。 diff --git a/platform/android/MapLibreAndroid/src/cpp/native_map_view.cpp b/platform/android/MapLibreAndroid/src/cpp/native_map_view.cpp index 552a203b9..8f86e2573 100644 --- a/platform/android/MapLibreAndroid/src/cpp/native_map_view.cpp +++ b/platform/android/MapLibreAndroid/src/cpp/native_map_view.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -1112,10 +1113,16 @@ jni::jboolean NativeMapView::setStyleLayerFloatProperty(JNIEnv& env, const jni::jfloat value) { auto* layer = map->getStyle().getLayer(jni::Make(env, layerId)); if (!layer) return false; - if (const auto error = layer->setProperty(jni::Make(env, propertyName), static_cast(value))) { - mbgl::Log::Error(mbgl::Event::JNI, "ParticleGPU: event=STYLE_PROPERTY_SET result=FAILURE " + error->message); + if (jni::Make(env, propertyName) != "raster-particle-time-mix") { + mbgl::Log::Error(mbgl::Event::JNI, "ParticleGPU: event=STYLE_PROPERTY_SET result=UNSUPPORTED_PROPERTY"); return false; } + auto* particleLayer = dynamic_cast(layer); + if (!particleLayer) { + mbgl::Log::Error(mbgl::Event::JNI, "ParticleGPU: event=STYLE_PROPERTY_SET result=UNSUPPORTED_LAYER"); + return false; + } + particleLayer->setTimeMix(value); mbgl::Log::Info(mbgl::Event::JNI, "ParticleGPU: event=STYLE_PROPERTY_SET layerId=" + jni::Make(env, layerId) + " property=" + jni::Make(env, propertyName) + " value=" + std::to_string(value) +