From da82763afb4d0f03be679607b664dd8ee16636a7 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Thu, 11 Sep 2025 19:58:30 +0800 Subject: [PATCH] add embedd Signed-off-by: zhangzezhong --- frameworks/ets/ani/BUILD.gn | 1 + .../embedded_ui_extension_ability/BUILD.gn | 82 +++++++++++++++++++ .../include/ets_embedded_ui_extension.h | 45 ++++++++++ .../ets_embedded_ui_extension_instance.h | 35 ++++++++ .../src/ets_embedded_ui_extension.cpp | 52 ++++++++++++ .../ets_embedded_ui_extension_instance.cpp | 54 ++++++++++++ ...app.ability.EmbeddedUIExtensionAbility.ets | 19 +++++ frameworks/ets/ets/BUILD.gn | 17 ++++ frameworks/native/ability/native/BUILD.gn | 2 + .../embedded_ui_extension.cpp | 3 + 10 files changed, 310 insertions(+) create mode 100644 frameworks/ets/ani/embedded_ui_extension_ability/BUILD.gn create mode 100644 frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension.h create mode 100644 frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension_instance.h create mode 100644 frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension.cpp create mode 100644 frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension_instance.cpp create mode 100644 frameworks/ets/ets/@ohos.app.ability.EmbeddedUIExtensionAbility.ets diff --git a/frameworks/ets/ani/BUILD.gn b/frameworks/ets/ani/BUILD.gn index 67d90a7327c..f4bcb26d02c 100644 --- a/frameworks/ets/ani/BUILD.gn +++ b/frameworks/ets/ani/BUILD.gn @@ -34,6 +34,7 @@ group("ani_packages") { "${ability_runtime_path}/frameworks/ets/ani/auto_fill_manager:ability_auto_fill_manager_ani_kit", "${ability_runtime_path}/frameworks/ets/ani/caller_complex:caller_complex_ani", "${ability_runtime_path}/frameworks/ets/ani/dialog_session:dialog_session_ani_kit", + "${ability_runtime_path}/frameworks/ets/ani/embedded_ui_extension_ability:embedded_ui_extension_ani", "${ability_runtime_path}/frameworks/ets/ani/featureAbility:featureability_ani", "${ability_runtime_path}/frameworks/ets/ani/insight_intent/insight_intent_driver:insight_intent_driver_ani_kit", "${ability_runtime_path}/frameworks/ets/ani/ui_extension_callback:ani_ui_extension_callback", diff --git a/frameworks/ets/ani/embedded_ui_extension_ability/BUILD.gn b/frameworks/ets/ani/embedded_ui_extension_ability/BUILD.gn new file mode 100644 index 00000000000..b64f1ae46e4 --- /dev/null +++ b/frameworks/ets/ani/embedded_ui_extension_ability/BUILD.gn @@ -0,0 +1,82 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/ets2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/ability/ability_runtime/ability_runtime.gni") + +ohos_shared_library("embedded_ui_extension_ani") { + + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + + branch_protector_ret = "pac_ret" + + include_dirs = [ + "${ability_runtime_path}/interfaces/kits/native/ability/native/ability_runtime", + "${ability_runtime_path}/interfaces/kits/native/ability/native/embedded_ui_extension_ability", + "${ability_runtime_path}/interfaces/kits/native/ability/native/ui_extension_base", + "${ability_runtime_path}/interfaces/kits/native/ability/ability_runtime", + "${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_path}/frameworks/ets/ani/ani_common/include", + "${ability_runtime_path}/frameworks/ets/ani/embedded_ui_extension_ability/include", + "${ability_runtime_path}/frameworks/ets/ani/ui_extension_base/include", + "${ability_runtime_path}/frameworks/ets/ani/ui_extension_ability/include", + ] + + configs = [] + + public_configs = [] + + sources = [ + "${ability_runtime_path}/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension.cpp", + ] + + deps = [ + "${ability_runtime_native_path}/ability/native:abilitykit_native", + "${ability_runtime_native_path}/ability/native:extensionkit_native", + "${ability_runtime_native_path}/ability/native:ui_extension", + "${ability_runtime_native_path}/ability/native:ui_extension_ani", + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", + "${ability_runtime_innerkits_path}/ability_manager:ability_start_options", + "${ability_runtime_innerkits_path}/runtime:runtime", + "${ability_runtime_path}/frameworks/ets/ani/ani_common:ani_common", + "${ability_runtime_native_path}/ability:ability_context_native", + "${ability_runtime_native_path}/ability/native:ability_business_error", + "${ability_runtime_native_path}/appkit:app_context", + ] + + external_deps = [ + "ability_base:want", + "c_utils:utils", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_napi", + "ipc:ipc_single", + "runtime_core:ani", + ] + + if (ability_runtime_graphics) { + external_deps += [ "window_manager:libwm" ] + } + + subsystem_name = "ability" + part_name = "ability_runtime" +} \ No newline at end of file diff --git a/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension.h b/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension.h new file mode 100644 index 00000000000..6104862669d --- /dev/null +++ b/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_H +#define OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_H + +#include "embedded_ui_extension.h" +#include "configuration.h" + +namespace OHOS { +namespace AbilityRuntime { +class EmbeddedUIExtension; +class EtsRuntime; +class EtsUIExtensionBase; +/** + * @brief Basic embedded UI extension components. + */ +class EtsEmbeddedUIExtension : public EmbeddedUIExtension, public std::enable_shared_from_this { +public: + explicit EtsEmbeddedUIExtension(const std::unique_ptr &runtime); + ~EtsEmbeddedUIExtension() override; + + /** + * @brief Create EtsEmbeddedUIExtension. + * + * @param runtime The runtime. + * @return The EtsEmbeddedUIExtension instance. + */ + static EtsEmbeddedUIExtension *Create(const std::unique_ptr &runtime); +}; +} // namespace AbilityRuntime +} // namespace OHOS +#endif // OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_H diff --git a/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension_instance.h b/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension_instance.h new file mode 100644 index 00000000000..6dd8ee1f0b1 --- /dev/null +++ b/frameworks/ets/ani/embedded_ui_extension_ability/include/ets_embedded_ui_extension_instance.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_INSTANCE_H +#define OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_INSTANCE_H + +#include "embedded_ui_extension.h" + +namespace OHOS { +namespace AbilityRuntime { +class EmbeddedUIExtension; +class Runtime; +/** + * @brief Create ETS EmbeddedUIExtension instance. + * + * @param runtime The runtime. + * @return The EmbeddedUIExtension instance. + */ +EmbeddedUIExtension *CreateETSEmbeddedUIExtension(const std::unique_ptr &runtime); +} // namespace AbilityRuntime +} // namespace OHOS + +#endif // OHOS_ABILITY_RUNTIME_ETS_EMBEDDED_UI_EXTENSION_INSTANCE_H \ No newline at end of file diff --git a/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension.cpp b/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension.cpp new file mode 100644 index 00000000000..88fe85eec1e --- /dev/null +++ b/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ets_embedded_ui_extension.h" + +#include "hilog_tag_wrapper.h" +#include "hitrace_meter.h" +#include "ets_ui_extension_base.h" + +#ifdef WINDOWS_PLATFORM +#define ETS_EXPORT __declspec(dllexport) +#else +#define ETS_EXPORT __attribute__((visibility("default"))) +#endif + +namespace OHOS { +namespace AbilityRuntime { +EtsEmbeddedUIExtension *EtsEmbeddedUIExtension::Create(const std::unique_ptr &runtime) +{ + return new EtsEmbeddedUIExtension(runtime); +} + +EtsEmbeddedUIExtension::EtsEmbeddedUIExtension(const std::unique_ptr &runtime) +{ + std::shared_ptr uiExtensionBaseImpl = std::make_shared(runtime); + SetUIExtensionBaseImpl(uiExtensionBaseImpl); +} + +EtsEmbeddedUIExtension::~EtsEmbeddedUIExtension() +{ + TAG_LOGD(AAFwkTag::EMBEDDED_EXT, "destructor"); +} +} // namespace AbilityRuntime +} // namespace OHOS + +ETS_EXPORT extern "C" OHOS::AbilityRuntime::EmbeddedUIExtension *OHOS_ETS_Embedded_Extension_Create( + const std::unique_ptr &runtime) +{ + return OHOS::AbilityRuntime::EtsEmbeddedUIExtension::Create(runtime); +} diff --git a/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension_instance.cpp b/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension_instance.cpp new file mode 100644 index 00000000000..7935d4a7f2e --- /dev/null +++ b/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension_instance.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ets_embedded_ui_extension_instance.h" + +#include +#include + +#include "hilog_tag_wrapper.h" +#include "hitrace_meter.h" +#include "string_wrapper.h" + +namespace OHOS { +namespace AbilityRuntime { +namespace { +const char *ETS_ANI_LIBNAME = "libembedded_ui_extension_ani.z.so"; +const char *ETS_ANI_Create_FUNC = "OHOS_ETS_Embedded_Extension_Create"; +using CreateETSEmbeddedUIExtensionFunc = EmbeddedUIExtension*(*)(const std::unique_ptr&); +CreateETSEmbeddedUIExtensionFunc g_etsCreateFunc = nullptr; +} + +EmbeddedUIExtension *CreateETSEmbeddedUIExtension(const std::unique_ptr &runtime) +{ + if (g_etsCreateFunc != nullptr) { + return g_etsCreateFunc(runtime); + } + auto handle = dlopen(ETS_ANI_LIBNAME, RTLD_LAZY); + if (handle == nullptr) { + TAG_LOGE(AAFwkTag::EMBEDDED_EXT, "dlopen failed %{public}s, %{public}s", ETS_ANI_LIBNAME, dlerror()); + return nullptr; + } + auto symbol = dlsym(handle, ETS_ANI_Create_FUNC); + if (symbol == nullptr) { + TAG_LOGE(AAFwkTag::EMBEDDED_EXT, "dlsym failed %{public}s, %{public}s", ETS_ANI_Create_FUNC, dlerror()); + dlclose(handle); + return nullptr; + } + g_etsCreateFunc = reinterpret_cast(symbol); + return g_etsCreateFunc(runtime); +} +} // namespace AbilityRuntime +} // namespace OHOS \ No newline at end of file diff --git a/frameworks/ets/ets/@ohos.app.ability.EmbeddedUIExtensionAbility.ets b/frameworks/ets/ets/@ohos.app.ability.EmbeddedUIExtensionAbility.ets new file mode 100644 index 00000000000..1ac162d1701 --- /dev/null +++ b/frameworks/ets/ets/@ohos.app.ability.EmbeddedUIExtensionAbility.ets @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"), + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import UIExtensionAbility from '@ohos.app.ability.UIExtensionAbility'; + +export default class EmbeddedUIExtensionAbility extends UIExtensionAbility { +} diff --git a/frameworks/ets/ets/BUILD.gn b/frameworks/ets/ets/BUILD.gn index 863d1201b36..b94fc0f0f60 100644 --- a/frameworks/ets/ets/BUILD.gn +++ b/frameworks/ets/ets/BUILD.gn @@ -1440,6 +1440,22 @@ ohos_prebuilt_etc("application_state_observer_abc_etc") { deps = [ ":application_state_observer_abc" ] } +generate_static_abc("ability_runtime_embedded_uiextension_ability_abc") { + base_url = "./" + files = [ "./@ohos.app.ability.EmbeddedUIExtensionAbility.ets" ] + + is_boot_abc = "True" + device_dst_file ="/system/framework/ability_runtime_embedded_uiextension_ability_abc.abc" +} + +ohos_prebuilt_etc("ability_runtime_embedded_uiextension_ability_abc_etc") { + source = "$target_out_dir/ability_runtime_embedded_uiextension_ability_abc.abc" + module_install_dir = "framework" + subsystem_name = "ability" + part_name = "ability_runtime" + deps = [ ":ability_runtime_embedded_uiextension_ability_abc" ] +} + generate_static_abc("ability_runtime_event_hub_abc") { base_url = "./" files = [ "./application/EventHub.ets" ] @@ -1618,5 +1634,6 @@ group("ets_packages") { ":appRecovery_abc_etc", ":ability_runtime_mission_snapshot_abc_etc", ":ability_runtime_mission_listener_abc_etc", + ":ability_runtime_embedded_uiextension_ability_abc_etc", ] } diff --git a/frameworks/native/ability/native/BUILD.gn b/frameworks/native/ability/native/BUILD.gn index f13556faf49..8ad1e3163f9 100644 --- a/frameworks/native/ability/native/BUILD.gn +++ b/frameworks/native/ability/native/BUILD.gn @@ -2704,6 +2704,7 @@ config("embedded_ui_extension_config") { "${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_path}/frameworks/ets/ani/embedded_ui_extension_ability/include", ] } @@ -2778,6 +2779,7 @@ ohos_shared_library("embedded_ui_extension") { sources = [ "${ability_runtime_native_path}/ability/native/embedded_ui_extension_ability/embedded_ui_extension.cpp", "${ability_runtime_native_path}/ability/native/embedded_ui_extension_ability/js_embedded_ui_extension.cpp", + "${ability_runtime_path}/frameworks/ets/ani/embedded_ui_extension_ability/src/ets_embedded_ui_extension_instance.cpp", ] deps = [ diff --git a/frameworks/native/ability/native/embedded_ui_extension_ability/embedded_ui_extension.cpp b/frameworks/native/ability/native/embedded_ui_extension_ability/embedded_ui_extension.cpp index a6d6d6d304d..aac74d9260b 100644 --- a/frameworks/native/ability/native/embedded_ui_extension_ability/embedded_ui_extension.cpp +++ b/frameworks/native/ability/native/embedded_ui_extension_ability/embedded_ui_extension.cpp @@ -15,6 +15,7 @@ #include "embedded_ui_extension.h" +#include "ets_embedded_ui_extension_instance.h" #include "hilog_tag_wrapper.h" #include "js_embedded_ui_extension.h" #include "cj_embedded_ui_extension_instance.h" @@ -34,6 +35,8 @@ EmbeddedUIExtension *EmbeddedUIExtension::Create(const std::unique_ptr return JsEmbeddedUIExtension::Create(runtime); case Runtime::Language::CJ: return CreateCJEmbeddedUIExtension(runtime); + case Runtime::Language::ETS: + return CreateETSEmbeddedUIExtension(runtime); default: return new (std::nothrow) EmbeddedUIExtension(); } -- Gitee