From 9892aa229860084d4c82247fdf57af0aaa69c56e Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Mon, 26 May 2025 16:59:34 +0800 Subject: [PATCH] add ani uiability ondump Signed-off-by: zhangzezhong --- .../native/ability_runtime/sts_ui_ability.cpp | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/frameworks/native/ability/native/ability_runtime/sts_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/sts_ui_ability.cpp index 353237d9fe3..7c028130760 100644 --- a/frameworks/native/ability/native/ability_runtime/sts_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/sts_ui_ability.cpp @@ -1347,7 +1347,47 @@ std::shared_ptr StsUIAbility::CreateADe void StsUIAbility::Dump(const std::vector ¶ms, std::vector &info) { UIAbility::Dump(params, info); - TAG_LOGD(AAFwkTag::UIABILITY, "called"); + auto env = stsRuntime_.GetAniEnv(); + if (env == nullptr || stsAbilityObj_ == nullptr) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "null env or stsAbilityObj"); + return; + } + ani_object arrayObj = nullptr; + if (!AppExecFwk::WrapArrayString(env, arrayObj, params)) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "WrapArrayString failed"); + return; + } + if (!stsAbilityObj_->aniObj || !stsAbilityObj_->aniCls) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "null aniObj or aniCls"); + return; + } + ani_status status = ANI_ERROR; + ani_method method = nullptr; + if ((status = env->Class_FindMethod(stsAbilityObj_->aniCls, "onDump", nullptr, &method)) != ANI_OK) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "Class_FindMethod FAILED: %{public}d", status); + return; + } + if (!method) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "find method onDump failed"); + return; + } + ani_ref strArrayRef; + if ((status = env->Object_CallMethod_Ref(stsAbilityObj_->aniObj, method, &strArrayRef, arrayObj)) != ANI_OK) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "Object_CallMethod_Ref FAILED: %{public}d", status); + return; + } + if (!strArrayRef) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "null strArrayRef"); + return; + } + std::vector dumpInfoStrArray; + if (!AppExecFwk::UnwrapArrayString(env, reinterpret_cast(strArrayRef), dumpInfoStrArray)) { + TAG_LOGE(AAFwkTag::SERVICE_EXT, "UnwrapArrayString failed"); + return; + } + for (auto dumpInfoStr:dumpInfoStrArray) { + info.push_back(dumpInfoStr); + } TAG_LOGD(AAFwkTag::UIABILITY, "dump info size: %{public}zu", info.size()); } -- Gitee