From 8584ae50f0411a34598073b9979843ca826f072e Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Sat, 23 Aug 2025 06:15:12 -0400 Subject: [PATCH] fixed runningMultilnstances Signed-off-by: zhangzezhong --- .../app_manager/src/ets_app_manager_utils.cpp | 36 +++++++++++++++++++ frameworks/ets/ets/BUILD.gn | 18 ++++++++++ .../application/RunningMultiInstanceInfo.ets | 6 +++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/frameworks/ets/ani/app_manager/src/ets_app_manager_utils.cpp b/frameworks/ets/ani/app_manager/src/ets_app_manager_utils.cpp index aeaea0a5381..5844ad4197b 100644 --- a/frameworks/ets/ani/app_manager/src/ets_app_manager_utils.cpp +++ b/frameworks/ets/ani/app_manager/src/ets_app_manager_utils.cpp @@ -486,6 +486,42 @@ bool SetRunningMultiInstanceInfo( TAG_LOGE(AAFwkTag::APPMGR, "failed status:%{public}d", status); return false; } + if ((status = env->Object_SetPropertyByName_Int(object, "uid", instanceInfo.uid)) != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "uid failed status:%{public}d", status); + return false; + } + ani_class arrayCls = nullptr; + status = env->FindClass(CLASSNAME_ARRAY, &arrayCls); + if (status != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "find class failed status : %{public}d", status); + return false; + } + ani_method arrayCtor; + status = env->Class_FindMethod(arrayCls, "", "I:V", &arrayCtor); + if (status != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "find ctor failed status : %{public}d", status); + return false; + } + ani_object arrayObj; + status = env->Object_New(arrayCls, arrayCtor, &arrayObj, instanceInfo.pids.size()); + if (status != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "Object_New array failed status : %{public}d", status); + return false; + } + ani_size index = 0; + for (auto &pid : instanceInfo.pids) { + ani_object aniPid = AppExecFwk::CreateInt(env, pid); + status = env->Object_CallMethodByName_Void(arrayObj, "$_set", "ILstd/core/Object;:V", index, aniPid); + if (status != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "set failed status : %{public}d", status); + return false; + } + index++; + } + if ((status = env->Object_SetPropertyByName_Ref(object, "pids", arrayObj)) != ANI_OK) { + TAG_LOGE(AAFwkTag::APPMGR, "pids failed status:%{public}d", status); + return false; + } return true; } diff --git a/frameworks/ets/ets/BUILD.gn b/frameworks/ets/ets/BUILD.gn index 128a246f4b8..29f357b193c 100644 --- a/frameworks/ets/ets/BUILD.gn +++ b/frameworks/ets/ets/BUILD.gn @@ -1262,6 +1262,23 @@ ohos_prebuilt_etc("ability_runtime_share_extension_ability_abc_etc") { deps = [ ":ability_runtime_share_extension_ability_abc" ] } +generate_static_abc("ability_runtime_running_multi_instance_info_abc") { + base_url = "./" + files = [ "./application/RunningMultiInstanceInfo.ets" ] + + is_boot_abc = "True" + device_dst_file = + "/system/framework/ability_runtime_running_multi_instance_info_abc.abc" +} + +ohos_prebuilt_etc("ability_runtime_running_multi_instance_info_abc_etc") { + source = "$target_out_dir/ability_runtime_running_multi_instance_info_abc.abc" + module_install_dir = "framework" + subsystem_name = "ability" + part_name = "ability_runtime" + deps = [ ":ability_runtime_running_multi_instance_info_abc" ] +} + group("ets_packages") { deps = [ ":ability_application_abc_etc", @@ -1327,6 +1344,7 @@ group("ets_packages") { ":ability_runtime_process_information_abc_etc", ":ability_runtime_running_app_clone_abc_etc", ":ability_runtime_running_multi_appinfo_abc_etc", + ":ability_runtime_running_multi_instance_info_abc_etc", ":ability_runtime_want_abc_etc", ":ability_runtime_want_agent_abc_etc", ":ability_runtime_want_agent_info_abc_etc", diff --git a/frameworks/ets/ets/application/RunningMultiInstanceInfo.ets b/frameworks/ets/ets/application/RunningMultiInstanceInfo.ets index 10ce3036172..0bc5a6e9c84 100644 --- a/frameworks/ets/ets/application/RunningMultiInstanceInfo.ets +++ b/frameworks/ets/ets/application/RunningMultiInstanceInfo.ets @@ -14,8 +14,12 @@ */ export interface RunningMultiInstanceInfo { instanceKey: string; + uid: int; + pids: Array; } -class RunningMultiInstanceInfoInner implements RunningMultiInstanceInfo { +export class RunningMultiInstanceInfoInner implements RunningMultiInstanceInfo { instanceKey: string = ''; + uid: int; + pids: Array = []; } \ No newline at end of file -- Gitee