diff --git a/frameworks/extension/BUILD.gn b/frameworks/extension/BUILD.gn index a1fa17aae709d201e47af86dafc6f66829ceb14f..c7369aed1ee1507cbb81ad289bdf6432923710e7 100644 --- a/frameworks/extension/BUILD.gn +++ b/frameworks/extension/BUILD.gn @@ -87,9 +87,6 @@ ohos_shared_library("static_subscriber_extension") { ] sources = [ - "${ces_extension_path}/src/ani_common_event_utils.cpp", - "${ces_extension_path}/src/ani_static_subscriber_extension.cpp", - "${ces_extension_path}/src/ani_static_subscriber_extension_context.cpp", "${ces_extension_path}/src/js_static_subscriber_extension.cpp", "${ces_extension_path}/src/js_static_subscriber_extension_context.cpp", "${ces_extension_path}/src/static_subscriber_extension.cpp", @@ -105,6 +102,67 @@ ohos_shared_library("static_subscriber_extension") { "${ces_native_path}:cesfwk_innerkits", ] + external_deps = [ + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:ani_common", + "ability_runtime:app_context", + "ability_runtime:extensionkit_native", + "ability_runtime:napi_common", + "ability_runtime:runtime", + "access_token:libaccesstoken_sdk", + "access_token:libtokenid_sdk", + "c_utils:utils", + "eventhandler:libeventhandler", + "hilog:libhilog", + "ipc:ipc_core", + "napi:ace_napi", + ] + + subsystem_name = "notification" + part_name = "common_event_service" +} + +config("static_subscriber_extension_ani_public_config") { + visibility = [ ":*" ] + + include_dirs = [ + "${ces_extension_path}/include", + "${ces_extension_path}/include/ani", + ] +} + +ohos_shared_library("static_subscriber_extension_ani") { + sanitize = { + integer_overflow = true + ubsan = true + boundary_sanitize = true + cfi = true + cfi_cross_dso = true + debug = false + } + branch_protector_ret = "pac_ret" + + include_dirs = [] + + sources = [ + "${ces_extension_path}/src/ani/ani_common_event_utils.cpp", + "${ces_extension_path}/src/ani/ani_static_subscriber_extension.cpp", + "${ces_extension_path}/src/ani/ani_static_subscriber_extension_context.cpp", + "${ces_extension_path}/src/static_subscriber_extension.cpp", + "${ces_extension_path}/src/static_subscriber_extension_context.cpp", + "${ces_extension_path}/src/static_subscriber_stub_impl.cpp", + ] + + configs = [] + public_configs = [ ":static_subscriber_extension_ani_public_config" ] + + deps = [ + ":static_subscriber_ipc", + "${ces_native_path}:cesfwk_innerkits" + ] + external_deps = [ "ability_base:want", "ability_runtime:ability_context_native", @@ -145,13 +203,7 @@ ohos_shared_library("static_subscriber_extension_module") { } branch_protector_ret = "pac_ret" - include_dirs = [ - "${ability_runtime_path}/interfaces/kits/native/ability/native", - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime", - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", - "${ability_runtime_services_path}/common/include", - "${ces_core_path}/include", - ] + include_dirs = [ "${ces_core_path}/include" ] sources = [ "${ces_extension_path}/src/loader/static_subscriber_extension_module_loader.cpp" ] @@ -182,6 +234,7 @@ ohos_shared_library("static_subscriber_extension_module") { group("cesfwk_extension") { deps = [ ":static_subscriber_extension", + ":static_subscriber_extension_ani", ":static_subscriber_extension_module", ":static_subscriber_ipc", ] diff --git a/frameworks/extension/include/ani_common_event_utils.h b/frameworks/extension/include/ani/ani_common_event_utils.h similarity index 100% rename from frameworks/extension/include/ani_common_event_utils.h rename to frameworks/extension/include/ani/ani_common_event_utils.h diff --git a/frameworks/extension/include/ani_static_subscriber_extension.h b/frameworks/extension/include/ani/ani_static_subscriber_extension.h similarity index 100% rename from frameworks/extension/include/ani_static_subscriber_extension.h rename to frameworks/extension/include/ani/ani_static_subscriber_extension.h diff --git a/frameworks/extension/include/ani_static_subscriber_extension_context.h b/frameworks/extension/include/ani/ani_static_subscriber_extension_context.h similarity index 100% rename from frameworks/extension/include/ani_static_subscriber_extension_context.h rename to frameworks/extension/include/ani/ani_static_subscriber_extension_context.h diff --git a/frameworks/extension/src/ani_common_event_utils.cpp b/frameworks/extension/src/ani/ani_common_event_utils.cpp similarity index 100% rename from frameworks/extension/src/ani_common_event_utils.cpp rename to frameworks/extension/src/ani/ani_common_event_utils.cpp diff --git a/frameworks/extension/src/ani_static_subscriber_extension.cpp b/frameworks/extension/src/ani/ani_static_subscriber_extension.cpp similarity index 96% rename from frameworks/extension/src/ani_static_subscriber_extension.cpp rename to frameworks/extension/src/ani/ani_static_subscriber_extension.cpp index 08ed4b1706e012f0c4f3187b93b61c21fa199e78..f0059baa7d22b8ee2b22fea3e03bb72701a9f96b 100644 --- a/frameworks/extension/src/ani_static_subscriber_extension.cpp +++ b/frameworks/extension/src/ani/ani_static_subscriber_extension.cpp @@ -28,6 +28,10 @@ #include "sts_runtime.h" #include "static_subscriber_stub_impl.h" +#ifndef SYMBOL_EXPORT +#define SYMBOL_EXPORT __attribute__ ((visibility("default"))) +#endif + namespace OHOS { namespace EventManagerFwkAni { using namespace OHOS::AppExecFwk; @@ -35,6 +39,12 @@ using namespace OHOS::AbilityRuntime; using namespace OHOS::EventFwk; using namespace OHOS::EventManagerFwkAni; +extern "C" SYMBOL_EXPORT StsStaticSubscriberExtension* OHOS_STS_StaticSubscriberExtension_Creation( + const std::unique_ptr& runtime) +{ + return StsStaticSubscriberExtension::Create(runtime); +} + StsStaticSubscriberExtension* StsStaticSubscriberExtension::Create(const std::unique_ptr& runtime) { return new StsStaticSubscriberExtension(static_cast(*runtime)); diff --git a/frameworks/extension/src/ani_static_subscriber_extension_context.cpp b/frameworks/extension/src/ani/ani_static_subscriber_extension_context.cpp similarity index 99% rename from frameworks/extension/src/ani_static_subscriber_extension_context.cpp rename to frameworks/extension/src/ani/ani_static_subscriber_extension_context.cpp index c57df632d2b355a35b3e236e1cbb7cdfc4c14493..7f40a3a628a69eab1dbda7cce847cbc1789081c3 100644 --- a/frameworks/extension/src/ani_static_subscriber_extension_context.cpp +++ b/frameworks/extension/src/ani/ani_static_subscriber_extension_context.cpp @@ -15,7 +15,6 @@ #include "ani_static_subscriber_extension_context.h" #include "ability_manager_client.h" -#include "ani_common_event_throw_error.h" #include "ani_common_want.h" #include "ani_common_start_options.h" #include "ets_extension_context.h" diff --git a/frameworks/extension/src/loader/static_subscriber_extension_module_loader.cpp b/frameworks/extension/src/loader/static_subscriber_extension_module_loader.cpp index e3174a91f431f83080490e5214d705bbe93bfdec..948811cc70ec6c7cc0a7ed764a9849d9a319e864 100644 --- a/frameworks/extension/src/loader/static_subscriber_extension_module_loader.cpp +++ b/frameworks/extension/src/loader/static_subscriber_extension_module_loader.cpp @@ -17,9 +17,46 @@ #include "event_log_wrapper.h" #include "static_subscriber_extension.h" +#include "js_static_subscriber_extension.h" + +#include + +constexpr char STS_STATIC_SUBSCRIBER_EXT_LIB_NAME[] = "libstatic_subscriber_extension_ani.z.so"; +static constexpr char STS_STATIC_SUBSCRIBER_EXT_CREATE_FUNC[] = "OHOS_STS_StaticSubscriberExtension_Creation"; namespace OHOS { namespace EventFwk { + +typedef StaticSubscriberExtension* (*CREATE_FUNC)(const std::unique_ptr& runtime); + +__attribute__((no_sanitize("cfi"))) StaticSubscriberExtension* CreateStsExtension( + const std::unique_ptr& runtime) +{ + void *handle = dlopen(STS_STATIC_SUBSCRIBER_EXT_LIB_NAME, RTLD_LAZY); + if (handle == nullptr) { + EVENT_LOGE("open sts_static_subscriber_extension library %{public}s failed, reason: %{public}sn", + STS_STATIC_SUBSCRIBER_EXT_LIB_NAME, dlerror()); + return new (std::nothrow) StaticSubscriberExtension(); + } + + auto func = reinterpret_cast(dlsym(handle, STS_STATIC_SUBSCRIBER_EXT_CREATE_FUNC)); + if (func == nullptr) { + dlclose(handle); + EVENT_LOGE("get sts_static_subscriber_extension symbol %{public}s in %{public}s failed", + STS_STATIC_SUBSCRIBER_EXT_CREATE_FUNC, STS_STATIC_SUBSCRIBER_EXT_LIB_NAME); + return new (std::nothrow) StaticSubscriberExtension(); + } + + auto instance = func(runtime); + if (instance == nullptr) { + dlclose(handle); + EVENT_LOGE("get sts_static_subscriber_extension instance in %{public}s failed", + STS_STATIC_SUBSCRIBER_EXT_CREATE_FUNC); + return new (std::nothrow) StaticSubscriberExtension(); + } + return instance; +} + StaticSubscriberExtensionModuleLoader::StaticSubscriberExtensionModuleLoader() = default; StaticSubscriberExtensionModuleLoader::~StaticSubscriberExtensionModuleLoader() = default; @@ -27,7 +64,19 @@ AbilityRuntime::Extension* StaticSubscriberExtensionModuleLoader::Create( const std::unique_ptr& runtime) const { EVENT_LOGD("Create module loader."); - return StaticSubscriberExtension::Create(runtime); + if (!runtime) { + return StaticSubscriberExtension::Create(runtime); + } + + EVENT_LOGI("Create runtime"); + switch (runtime->GetLanguage()) { + case AbilityRuntime::Runtime::Language::JS: + return JsStaticSubscriberExtension::Create(runtime); + case AbilityRuntime::Runtime::Language::STS: + return CreateStsExtension(runtime); + default: + return StaticSubscriberExtension::Create(runtime); + } } std::map StaticSubscriberExtensionModuleLoader::GetParams() diff --git a/frameworks/extension/src/static_subscriber_extension.cpp b/frameworks/extension/src/static_subscriber_extension.cpp index fb8fb7b5bddc0123d189f3a03adb89bb1ef36c17..edfce6e6b1fe73aea633723c7da785a5b7b6aef4 100644 --- a/frameworks/extension/src/static_subscriber_extension.cpp +++ b/frameworks/extension/src/static_subscriber_extension.cpp @@ -15,7 +15,6 @@ #include "static_subscriber_extension.h" -#include "ani_static_subscriber_extension.h" #include "event_log_wrapper.h" #include "js_static_subscriber_extension.h" #include "runtime.h" @@ -26,19 +25,7 @@ namespace EventFwk { using namespace OHOS::AppExecFwk; StaticSubscriberExtension* StaticSubscriberExtension::Create(const std::unique_ptr& runtime) { - if (!runtime) { - return new (std::nothrow) StaticSubscriberExtension(); - } - - EVENT_LOGI("Create runtime"); - switch (runtime->GetLanguage()) { - case AbilityRuntime::Runtime::Language::JS: - return JsStaticSubscriberExtension::Create(runtime); - case AbilityRuntime::Runtime::Language::STS: - return EventManagerFwkAni::StsStaticSubscriberExtension::Create(runtime); - default: - return new (std::nothrow) StaticSubscriberExtension(); - } + return new (std::nothrow) StaticSubscriberExtension(); } void StaticSubscriberExtension::Init(const std::shared_ptr& record,