From c4910153a2de7ebbf3405ff2c6bc3f4966597bfe Mon Sep 17 00:00:00 2001 From: wanzixuan Date: Tue, 9 Sep 2025 10:33:57 +0800 Subject: [PATCH] Use BindStaticNativeMethod for binding static methods Signed-off-by: wanzixuan --- .../display_ani/src/display_ani.cpp | 11 +++++++++-- .../screen_ani/src/screen_ani_manager.cpp | 17 ++++++++++++----- .../window_stage_ani/src/ani_window.cpp | 17 +++++++++++++---- .../src/ani_window_stage_module.cpp | 15 ++++++++++++--- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 7377735c04..a820d17488 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -475,14 +475,21 @@ ani_status DisplayAni::ClassBindNativeFunctions(ani_env* env, ani_class displayC reinterpret_cast(DisplayAni::RegisterCallback)}, ani_native_function {"syncOff", nullptr, reinterpret_cast(DisplayAni::UnRegisterCallback)}, + }; + auto ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size()); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] bind class methods fail %{public}u", ret); + return ANI_NOT_FOUND; + } + std::array staticMethods = { ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}C{std.core.Object}:z", reinterpret_cast(DisplayAni::TransferStatic)}, ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", reinterpret_cast(DisplayAni::TransferDynamic)}, }; - auto ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size()); + ret = env->Class_BindStaticNativeMethods(displayCls, staticMethods.data(), staticMethods.size()); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); + TLOGE(WmsLogTag::DMS, "[ANI] bind class static methods fail %{public}u", ret); return ANI_NOT_FOUND; } return ANI_OK; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index eb1b52a9ef..1b2f301364 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -698,10 +698,6 @@ ani_status ScreenManagerAni::ClassBindNativeFunctions(ani_env* env, ani_class sc std::array methods = { ani_native_function {"setDensityDpiInternal", "d:", reinterpret_cast(ScreenAni::SetDensityDpi)}, - ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}C{std.core.Object}:z", - reinterpret_cast(ScreenAni::TransferStatic)}, - ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", - reinterpret_cast(ScreenAni::TransferDynamic)}, ani_native_function {"setScreenActiveModeInternal", nullptr, reinterpret_cast(ScreenAni::SetScreenActiveMode)}, ani_native_function {"setOrientationInternal", nullptr, @@ -709,7 +705,18 @@ ani_status ScreenManagerAni::ClassBindNativeFunctions(ani_env* env, ani_class sc }; ani_status ret = env->Class_BindNativeMethods(screenCls, methods.data(), methods.size()); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); + TLOGE(WmsLogTag::DMS, "[ANI] bind namespace methods fail %{public}u", ret); + return ANI_NOT_FOUND; + } + std::array staticMethods = { + ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}C{std.core.Object}:z", + reinterpret_cast(ScreenAni::TransferStatic)}, + ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", + reinterpret_cast(ScreenAni::TransferDynamic)}, + }; + ret = env->Class_BindStaticNativeMethods(screenCls, staticMethods.data(), staticMethods.size()); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] bind namespace static methods fail %{public}u", ret); return ANI_NOT_FOUND; } return ANI_OK; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index e9b376ee37..baf53e0781 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -4487,10 +4487,6 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(SetSingleFrameComposerEnabled)}, ani_native_function {"getTransitionControllerSync", "l:C{@ohos.window.window.TransitionController}", reinterpret_cast(AniWindow::GetTransitionController)}, - ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}:C{std.core.Object}", - reinterpret_cast(AniWindow::NativeTransferStatic)}, - ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", - reinterpret_cast(AniWindow::NativeTransferDynamic)}, }; for (auto method : methods) { if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { @@ -4499,6 +4495,19 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } } + std::array staticMethods = { + ani_native_function {"nativeTransferStatic", "C{std/interop/ESValue}:C{std/core/Object}", + reinterpret_cast(AniWindow::NativeTransferStatic)}, + ani_native_function {"nativeTransferDynamic", "l:C{std/interop/ESValue}", + reinterpret_cast(AniWindow::NativeTransferDynamic)}, + }; + for (auto method : staticMethods) { + if ((ret = env->Class_BindStaticNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window static method fail %{public}u, %{public}s, %{public}s", + ret, method.name, method.signature); + return ANI_NOT_FOUND; + } + } *result = ANI_VERSION_1; ani_namespace ns; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp index 78c7f0b5ef..edda21a6af 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp @@ -128,14 +128,23 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, + }; + for (auto method : methods) { + if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", + ret, method.name, method.signature); + return ANI_NOT_FOUND; + } + } + std::array staticMethods = { ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}:C{std.core.Object}", reinterpret_cast(AniWindowStage::NativeTransferStatic)}, ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", reinterpret_cast(AniWindowStage::NativeTransferDynamic)}, }; - for (auto method : methods) { - if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", + for (auto method : staticMethods) { + if ((ret = env->Class_BindStaticNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window static method fail %{public}u, %{public}s, %{public}s", ret, method.name, method.signature); return ANI_NOT_FOUND; } -- Gitee