From 3512f17883e56a8de2eeb1d9b9b867c3e2e649c8 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Thu, 12 Jun 2025 19:48:30 +0800 Subject: [PATCH] =?UTF-8?q?0411ApplicationContext=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=9B=9E=E5=90=88master=E4=BF=AE=E6=94=B9=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzezhong --- .../context_native_constructor.cpp | 39 ++++++++----------- frameworks/native/appkit/BUILD.gn | 3 -- .../context/application_context_manager.cpp | 32 +++------------ .../context/ets_application_context_utils.cpp | 2 +- .../context/ets_context_utils.cpp | 16 ++++---- .../include/ani_base_context.h | 1 - .../context/application_context_manager.h | 12 ++---- 7 files changed, 35 insertions(+), 70 deletions(-) diff --git a/frameworks/ets/ani/native_constructor/context_native_constructor.cpp b/frameworks/ets/ani/native_constructor/context_native_constructor.cpp index 2326c5f48bd..fac3b89d47a 100644 --- a/frameworks/ets/ani/native_constructor/context_native_constructor.cpp +++ b/frameworks/ets/ani/native_constructor/context_native_constructor.cpp @@ -13,27 +13,20 @@ * limitations under the License. */ #include -#include #include "hilog_tag_wrapper.h" namespace OHOS { namespace AbilityRuntime { -void ContextConstructor() -{ -} +void ContextConstructor() {} -void ExtensionContextConstructor() -{ -} +void ExtensionContextConstructor() {} -void UIAbilityContextConstructor() -{ -} +void UIAbilityContextConstructor() {} extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { - ani_env *env; + ani_env *env = nullptr; if (vm == nullptr || result == nullptr) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Illegal VM or result"); return ANI_ERROR; @@ -42,47 +35,47 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) TAG_LOGE(AAFwkTag::ETSRUNTIME, "Unsupported ANI_VERSION_1"); return ANI_ERROR; } - ani_class contextClass; + ani_class contextClass = nullptr; static const char *contextClassName = "Lapplication/Context/Context;"; if (ANI_OK != env->FindClass(contextClassName, &contextClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", contextClassName); return ANI_NOT_FOUND; } - std::array classMethods_context = { + std::array classMethodsContext = { ani_native_function {"", ":V", reinterpret_cast(ContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(contextClass, classMethods_context.data(), - classMethods_context.size())) { + if (ANI_OK != env->Class_BindNativeMethods(contextClass, classMethodsContext.data(), + classMethodsContext.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", contextClassName); return ANI_ERROR; }; - ani_class extensionContextClass; + ani_class extensionContextClass = nullptr; static const char *extensionContextClassName = "Lapplication/ExtensionContext/ExtensionContext;"; if (ANI_OK != env->FindClass(extensionContextClassName, &extensionContextClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", extensionContextClassName); return ANI_NOT_FOUND; } - std::array classMethods_extensionContext = { + std::array classMethodsExtensionContext = { ani_native_function {"", ":V", reinterpret_cast(ExtensionContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(extensionContextClass, classMethods_extensionContext.data(), - classMethods_extensionContext.size())) { + if (ANI_OK != env->Class_BindNativeMethods(extensionContextClass, classMethodsExtensionContext.data(), + classMethodsExtensionContext.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", extensionContextClassName); return ANI_ERROR; }; - ani_class uiAbilityClass; + ani_class uiAbilityClass = nullptr; static const char *uiAbilityClassName = "Lapplication/UIAbilityContext/UIAbilityContext;"; if (ANI_OK != env->FindClass(uiAbilityClassName, &uiAbilityClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", uiAbilityClassName); return ANI_NOT_FOUND; } - std::array classMethods_uiAbility = { + std::array classMethodsUiAbility = { ani_native_function {"", ":V", reinterpret_cast(UIAbilityContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(uiAbilityClass, classMethods_uiAbility.data(), - classMethods_uiAbility.size())) { + if (ANI_OK != env->Class_BindNativeMethods(uiAbilityClass, classMethodsUiAbility.data(), + classMethodsUiAbility.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", uiAbilityClassName); return ANI_ERROR; }; diff --git a/frameworks/native/appkit/BUILD.gn b/frameworks/native/appkit/BUILD.gn index ddd25fc1faf..3e605624b59 100644 --- a/frameworks/native/appkit/BUILD.gn +++ b/frameworks/native/appkit/BUILD.gn @@ -619,7 +619,6 @@ ohos_shared_library("application_context_manager") { include_dirs = [ "${ability_runtime_path}/interfaces/inner_api/runtime/include", "${ability_runtime_path}/interfaces/kits/native/ability/native", - "${ability_runtime_path}/ets_environment/interfaces/inner_api", ] sources = [ "${ability_runtime_native_path}/appkit/ability_runtime/context/application_context_manager.cpp" ] @@ -630,10 +629,8 @@ ohos_shared_library("application_context_manager") { } external_deps = [ - "ets_runtime:libark_jsruntime", "hilog:libhilog", "napi:ace_napi", - "runtime_core:ani", ] public_configs = [ ":application_context_manager_config" ] diff --git a/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp b/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp index 073170d29b5..bbebe59874f 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp @@ -89,37 +89,17 @@ void ApplicationContextManager::RemoveGlobalObject(napi_env env) } } -void ApplicationContextManager::AddEtsGlobalObject(ani_env* env, +void ApplicationContextManager::SetEtsGlobalObject( std::shared_ptr applicationContextObj) { - std::lock_guard lock(etsApplicationContextMutex_); - auto iter = etsApplicationContextMap_.find(env); - if (iter == etsApplicationContextMap_.end()) { - etsApplicationContextMap_[env] = applicationContextObj; - return; - } - if (iter->second != nullptr) { - iter->second.reset(); - iter->second = nullptr; - } - iter->second = applicationContextObj; -} - -std::shared_ptr ApplicationContextManager::GetEtsGlobalObject(ani_env* env) -{ - std::lock_guard lock(etsApplicationContextMutex_); - return etsApplicationContextMap_[env]; + std::lock_guard lock(applicationContextMutex_); + etsApplicationContextRef_ = applicationContextObj; } -void ApplicationContextManager::RemoveEtsGlobalObject(ani_env* env) +std::shared_ptr ApplicationContextManager::GetEtsGlobalObject() { - std::lock_guard lock(etsApplicationContextMutex_); - auto iter = etsApplicationContextMap_.find(env); - if (iter != etsApplicationContextMap_.end() && iter->second != nullptr) { - iter->second.reset(); - iter->second = nullptr; - etsApplicationContextMap_.erase(env); - } + std::lock_guard lock(applicationContextMutex_); + return etsApplicationContextRef_; } } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp index b7aec88b2f2..135a7e536e3 100644 --- a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp @@ -160,7 +160,7 @@ ani_object EtsApplicationContextUtils::CreateEtsApplicationContext(ani_env* aniE } auto etsReference = std::make_shared(); etsReference->aniObj = applicationContextObject; - AbilityRuntime::ApplicationContextManager::GetApplicationContextManager().AddEtsGlobalObject(aniEnv, etsReference); + AbilityRuntime::ApplicationContextManager::GetApplicationContextManager().SetEtsGlobalObject(etsReference); BindApplicationContextFunc(aniEnv); return applicationContextObject; } diff --git a/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp index eac017820b3..b9ae514d357 100644 --- a/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp @@ -29,7 +29,7 @@ namespace OHOS { namespace AbilityRuntime { namespace ContextUtil { namespace { - constexpr const char* CONTEXT_CLASS_NAME = "Lapplication/Context/Context;"; +constexpr const char* CONTEXT_CLASS_NAME = "Lapplication/Context/Context;"; } void BindApplicationInfo(ani_env* aniEnv, ani_class contextClass, ani_object contextObj, std::shared_ptr context) @@ -99,9 +99,9 @@ void BindParentProperty(ani_env* aniEnv, ani_class contextClass, ani_object cont return; } auto filesDir = context->GetFilesDir(); - ani_string filesDir_string{}; - aniEnv->String_NewUTF8(filesDir.c_str(), filesDir.size(), &filesDir_string); - if (aniEnv->Object_SetField_Ref(contextObj, filesDirField, reinterpret_cast(filesDir_string)) != ANI_OK) { + ani_string filesDirString{}; + aniEnv->String_NewUTF8(filesDir.c_str(), filesDir.size(), &filesDirString); + if (aniEnv->Object_SetField_Ref(contextObj, filesDirField, reinterpret_cast(filesDirString)) != ANI_OK) { TAG_LOGE(AAFwkTag::APPKIT, "Object_SetField_Ref failed"); return; } @@ -111,9 +111,9 @@ void BindParentProperty(ani_env* aniEnv, ani_class contextClass, ani_object cont return; } auto tempDir = context->GetTempDir(); - ani_string tempDir_string{}; - aniEnv->String_NewUTF8(tempDir.c_str(), tempDir.size(), &tempDir_string); - if (aniEnv->Object_SetField_Ref(contextObj, tempDirField, reinterpret_cast(tempDir_string)) != ANI_OK) { + ani_string tempDirString{}; + aniEnv->String_NewUTF8(tempDir.c_str(), tempDir.size(), &tempDirString); + if (aniEnv->Object_SetField_Ref(contextObj, tempDirField, reinterpret_cast(tempDirString)) != ANI_OK) { TAG_LOGE(AAFwkTag::APPKIT, "Object_SetField_Ref failed"); return; } @@ -211,7 +211,7 @@ ani_object GetApplicationContextSync([[maybe_unused]]ani_env *env, [[maybe_unuse return {}; } if (!applicationContext->GetApplicationInfoUpdateFlag()) { - auto appContextObj = ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(env); + auto appContextObj = ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(); if (appContextObj != nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "appContextObj is not nullptr"); return appContextObj->aniObj; diff --git a/interfaces/inner_api/ani_base_context/include/ani_base_context.h b/interfaces/inner_api/ani_base_context/include/ani_base_context.h index b9ba82e8ea3..24350f8dac0 100644 --- a/interfaces/inner_api/ani_base_context/include/ani_base_context.h +++ b/interfaces/inner_api/ani_base_context/include/ani_base_context.h @@ -48,7 +48,6 @@ ani_status IsStageContext(ani_env* env, ani_object object, ani_boolean& stageMod * @param object Native value of context. * @return The stage mode context. */ -class Context; std::shared_ptr GetStageModeContext(ani_env* env, ani_object object); } } diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h index bb307cb0926..1b57ccfd754 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h @@ -17,7 +17,6 @@ #define OHOS_ABILITY_RUNTIME_APPLICATION_CONTEXT_MANAGER_H #include "native_engine/native_engine.h" -#include "ets_runtime.h" #include #include @@ -28,7 +27,7 @@ struct EnvData { napi_env env; EnvData(napi_env napienv) : env(napienv) {} }; - +struct ETSNativeReference; class ApplicationContextManager { public: ApplicationContextManager(const ApplicationContextManager&) = delete; @@ -43,11 +42,9 @@ public: void RemoveGlobalObject(napi_env env); - void AddEtsGlobalObject(ani_env* env, std::shared_ptr applicationContextObj); - - std::shared_ptr GetEtsGlobalObject(ani_env* env); + void SetEtsGlobalObject(std::shared_ptr applicationContextObj); - void RemoveEtsGlobalObject(ani_env* env); + std::shared_ptr GetEtsGlobalObject(); private: ApplicationContextManager(); @@ -55,9 +52,8 @@ private: ~ApplicationContextManager(); std::unordered_map> applicationContextMap_; - std::unordered_map> etsApplicationContextMap_; + std::shared_ptr etsApplicationContextRef_; std::mutex applicationContextMutex_; - std::mutex etsApplicationContextMutex_; }; } // namespace AbilityRuntime } // namespace OHOS -- Gitee