diff --git a/cli_tool_framework/etc/profile/aimgr.cfg b/cli_tool_framework/etc/profile/aimgr.cfg index 1579236447..dec2fe99c3 100644 --- a/cli_tool_framework/etc/profile/aimgr.cfg +++ b/cli_tool_framework/etc/profile/aimgr.cfg @@ -26,7 +26,8 @@ "ohos.permission.RUNNING_STATE_OBSERVER", "ohos.permission.MANAGE_SKILL_PRIVILEGE", "ohos.permission.PARENT_CONTROL_UI", - "ohos.permission.START_ABILITIES_FROM_BACKGROUND" + "ohos.permission.START_ABILITIES_FROM_BACKGROUND", + "ohos.permission.ABILITY_BACKGROUND_COMMUNICATION" ], "permission_acls" : [ "ohos.permission.MANAGE_TOOL_TOKENID" diff --git a/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h b/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h index 9a0d0ebac8..391396fe06 100644 --- a/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h +++ b/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h @@ -146,6 +146,8 @@ private: int32_t SetupAndStartSession(const ExecToolParam ¶m, const std::string &eventId, const ToolInfo &toolInfo, const std::string &sandboxConfig, const std::string &bundleName); + int32_t TryDispatchSkillSession(const ExecToolParam ¶m, + const std::string &eventId, const ToolInfo &toolInfo, bool &dispatched); int32_t SetupAndStartSkillSession(const ExecToolParam ¶m, const std::string &eventId, const ToolInfo &toolInfo); int32_t ValidateSkillTypeFromParam(const ExecToolParam ¶m, int32_t &skillType); diff --git a/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp b/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp index a5c2ba443f..5a5a368d39 100644 --- a/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp +++ b/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp @@ -48,7 +48,6 @@ constexpr int32_t QUERY_DB_ERROR = 2; constexpr int32_t MAX_QUERY_CMDS_SIZE = 100; constexpr int32_t ACTIVE_TIME = 30 * 1000; // 30s constexpr int32_t SKILL_TYPE_INDEPENDENT = -1; -sptr adaptor_; } // namespace std::mutex g_mutex; @@ -552,45 +551,63 @@ void CliToolManagerService::HandleBackgroundSessionReply( EventDispatcher::GetInstance().DispatchExecToolReplyEvent(record->callerPid, eventId, ERR_OK, session); } +int32_t CliToolManagerService::TryDispatchSkillSession(const ExecToolParam ¶m, + const std::string &eventId, const ToolInfo &toolInfo, bool &dispatched) +{ + dispatched = false; + if (!ToolUtil::IsSkillTool(param.toolName)) { + return ERR_OK; + } + + int32_t skillType = 0; + auto skillRet = ValidateSkillTypeFromParam(param, skillType); + if (skillRet != ERR_OK) { + return skillRet; + } + if (skillType == SKILL_TYPE_INDEPENDENT) { + TAG_LOGI(AAFwkTag::CLI_TOOL, + "Independent skill, fallback to CLI path, toolName=%{public}s", param.toolName.c_str()); + return ERR_OK; + } + + TAG_LOGI(AAFwkTag::CLI_TOOL, + "Dispatch to skill path, toolName=%{public}s eventId=%{public}s", + param.toolName.c_str(), eventId.c_str()); + dispatched = true; + int32_t ret = SetupAndStartSkillSession(param, eventId, toolInfo); + if (ret != ERR_OK) { + TAG_LOGE(AAFwkTag::CLI_TOOL, + "Skill dispatch failed, toolName=%{public}s ret=%{public}d", param.toolName.c_str(), ret); + } + return ret; +} + int32_t CliToolManagerService::ExecTool(const ExecToolParam ¶m, const std::string &eventId) { InterfaceCallCounter counter(interfaceCalledCount_); TAG_LOGI(AAFwkTag::CLI_TOOL, "ExecTool called: toolName=%{public}s, subcommand=%{public}s", param.toolName.c_str(), param.subcommand.c_str()); - ToolInfo toolInfo; - if (ToolUtil::IsSkillTool(param.toolName)) { - int32_t skillType = 0; - auto skillRet = ValidateSkillTypeFromParam(param, skillType); - if (skillRet == ERR_OK && skillType != SKILL_TYPE_INDEPENDENT) { - TAG_LOGI(AAFwkTag::CLI_TOOL, - "Dispatch to skill path, toolName=%{public}s eventId=%{public}s", - param.toolName.c_str(), eventId.c_str()); - int32_t ret = SetupAndStartSkillSession(param, eventId, toolInfo); - if (ret != ERR_OK) { - TAG_LOGE(AAFwkTag::CLI_TOOL, - "Skill dispatch failed, toolName=%{public}s ret=%{public}d", param.toolName.c_str(), ret); - } - return ret; - } - if (skillRet != ERR_OK) { - return skillRet; - } - TAG_LOGI(AAFwkTag::CLI_TOOL, - "Independent skill, fallback to CLI path, toolName=%{public}s", param.toolName.c_str()); - } - if (auto ret = ValidateExecToolPermissions(); ret != ERR_OK) { return ret; } + + ToolInfo toolInfo; + bool dispatched = false; + auto skillRet = TryDispatchSkillSession(param, eventId, toolInfo, dispatched); + if (skillRet != ERR_OK) { + return skillRet; + } + if (dispatched) { + return ERR_OK; + } + if (auto ret = ValidateSessionLimit(); ret != ERR_OK) { return ret; } auto tokenId = IPCSkeleton::GetCallingTokenID(); - std::string sandboxConfig; std::string bundleName; - if (auto ret = ValidateAndPrepareTool(param, tokenId, toolInfo, sandboxConfig, bundleName); ret != ERR_OK) { return ret; } @@ -1030,7 +1047,7 @@ int32_t CliToolManagerService::SetupAndStartSkillSession(const ExecToolParam &pa AddSessionRecord(record); auto callerTokenId = IPCSkeleton::GetCallingTokenID(); - adaptor_ = sptr::MakeSptr( + auto adaptor = sptr::MakeSptr( record->sessionId, record->callerPid, eventId); AppExecFwk::SkillExecuteRequest skillRequest; @@ -1044,7 +1061,7 @@ int32_t CliToolManagerService::SetupAndStartSkillSession(const ExecToolParam &pa TAG_LOGD(AAFwkTag::CLI_TOOL, "execSkill before ExecuteInAppSkillWithTokenId"); int32_t ret = AAFwk::AbilityManagerClient::GetInstance()->ExecuteInAppSkillWithTokenId( - skillRequest, adaptor_); + skillRequest, adaptor); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::CLI_TOOL, "ExecuteInAppSkillWithTokenId failed:%{public}d", ret); RemoveSessionRecord(record->sessionId); diff --git a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp index f3c36665b6..07614b7c93 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp @@ -2515,32 +2515,70 @@ void JsUIAbility::NotifyWindowDestroy() } } +namespace { +std::string ExtractBaseName(const std::string &path) +{ + auto slashPos = path.rfind('/'); + auto dotPos = path.rfind('.'); + if (slashPos == std::string::npos) { + slashPos = 0; + } else { + slashPos++; + } + if (dotPos == std::string::npos || dotPos <= slashPos) { + return path.substr(slashPos); + } + return path.substr(slashPos, dotPos - slashPos); +} +} // namespace + napi_value JsUIAbility::LoadSkillFunction( const std::shared_ptr ¶m, napi_value &outJsObj) { napi_env env = jsRuntime_.GetNapiEnv(); - std::unique_ptr moduleRef = nullptr; napi_value method = nullptr; - for (const auto &srcEntry : param->srcEntries_) { + + auto TryLoadEntry = [&](const std::string &srcEntry) -> bool { std::string srcPath(param->moduleName_ + "/" + srcEntry); auto pos = srcPath.rfind('.'); if (pos == std::string::npos) { TAG_LOGW(AAFwkTag::UIABILITY, "skip srcEntry, no extension:%{public}s", srcEntry.c_str()); - continue; + return false; } srcPath.erase(pos); srcPath.append(".abc"); - moduleRef = jsRuntime_.LoadModule(param->moduleName_, srcPath, param->hapPath_, true); - if (moduleRef == nullptr) { + skillModuleRef_ = jsRuntime_.LoadModule(param->moduleName_, srcPath, param->hapPath_, true); + if (skillModuleRef_ == nullptr) { TAG_LOGW(AAFwkTag::UIABILITY, "LoadModule failed, path:%{public}s", srcPath.c_str()); - continue; + return false; } - outJsObj = moduleRef->GetNapiValue(); + outJsObj = skillModuleRef_->GetNapiValue(); method = AppExecFwk::GetPropertyValueByPropertyName( env, outJsObj, param->functionName_.c_str(), napi_valuetype::napi_function); - if (method != nullptr) { + return method != nullptr; + }; + + if (!param->scriptPath_.empty()) { + auto scriptBase = ExtractBaseName(param->scriptPath_); + for (const auto &srcEntry : param->srcEntries_) { + if (ExtractBaseName(srcEntry) != scriptBase) { + continue; + } + if (TryLoadEntry(srcEntry)) { + TAG_LOGI(AAFwkTag::UIABILITY, + "func found via scriptPath match, srcEntry:%{public}s", srcEntry.c_str()); + return method; + } + } + TAG_LOGW(AAFwkTag::UIABILITY, + "scriptPath match failed, fallback to full scan, scriptPath:%{public}s", + param->scriptPath_.c_str()); + } + + for (const auto &srcEntry : param->srcEntries_) { + if (TryLoadEntry(srcEntry)) { TAG_LOGI(AAFwkTag::UIABILITY, "func found in srcEntry:%{public}s", srcEntry.c_str()); - break; + return method; } TAG_LOGW(AAFwkTag::UIABILITY, "func not found:%{public}s in srcEntry:%{public}s", param->functionName_.c_str(), srcEntry.c_str()); @@ -2567,6 +2605,10 @@ std::vector JsUIAbility::BuildSkillCallArgs(napi_env env, if (param->skillArgs_ != nullptr && !param->skillArgs_->GetParams().empty()) { napi_value wrappedObj = AppExecFwk::WrapWantParams(env, *param->skillArgs_); for (const auto &[key, value] : param->skillArgs_->GetParams()) { + auto typeId = AppExecFwk::WantParams::GetDataType(value); + auto valStr = AppExecFwk::WantParams::GetStringByType(value, typeId); + TAG_LOGI(AAFwkTag::UIABILITY, "skillArg key:%{public}s value:%{public}s", + key.c_str(), valStr.c_str()); napi_value val = nullptr; napi_get_named_property(env, wrappedObj, key.c_str(), &val); args.push_back(val); diff --git a/frameworks/native/ability/native/js_service_extension.cpp b/frameworks/native/ability/native/js_service_extension.cpp index da66c15b11..fa4df23f5c 100644 --- a/frameworks/native/ability/native/js_service_extension.cpp +++ b/frameworks/native/ability/native/js_service_extension.cpp @@ -579,32 +579,70 @@ bool JsServiceExtension::HandleExecuteSkill(const AAFwk::Want &want) return true; } +namespace { +std::string ExtractBaseName(const std::string &path) +{ + auto slashPos = path.rfind('/'); + auto dotPos = path.rfind('.'); + if (slashPos == std::string::npos) { + slashPos = 0; + } else { + slashPos++; + } + if (dotPos == std::string::npos || dotPos <= slashPos) { + return path.substr(slashPos); + } + return path.substr(slashPos, dotPos - slashPos); +} +} // namespace + napi_value JsServiceExtension::LoadSkillFunction( const std::shared_ptr ¶m, napi_value &outJsObj) { napi_env env = jsRuntime_.GetNapiEnv(); - std::unique_ptr moduleRef = nullptr; napi_value method = nullptr; - for (const auto &srcEntry : param->srcEntries_) { + + auto TryLoadEntry = [&](const std::string &srcEntry) -> bool { std::string srcPath(param->moduleName_ + "/" + srcEntry); auto pos = srcPath.rfind('.'); if (pos == std::string::npos) { TAG_LOGW(AAFwkTag::SERVICE_EXT, "skip srcEntry, no extension:%{public}s", srcEntry.c_str()); - continue; + return false; } srcPath.erase(pos); srcPath.append(".abc"); - moduleRef = jsRuntime_.LoadModule(param->moduleName_, srcPath, param->hapPath_, true); - if (moduleRef == nullptr) { + skillModuleRef_ = jsRuntime_.LoadModule(param->moduleName_, srcPath, param->hapPath_, true); + if (skillModuleRef_ == nullptr) { TAG_LOGW(AAFwkTag::SERVICE_EXT, "LoadModule failed, path:%{public}s", srcPath.c_str()); - continue; + return false; } - outJsObj = moduleRef->GetNapiValue(); + outJsObj = skillModuleRef_->GetNapiValue(); method = AppExecFwk::GetPropertyValueByPropertyName( env, outJsObj, param->functionName_.c_str(), napi_valuetype::napi_function); - if (method != nullptr) { + return method != nullptr; + }; + + if (!param->scriptPath_.empty()) { + auto scriptBase = ExtractBaseName(param->scriptPath_); + for (const auto &srcEntry : param->srcEntries_) { + if (ExtractBaseName(srcEntry) != scriptBase) { + continue; + } + if (TryLoadEntry(srcEntry)) { + TAG_LOGI(AAFwkTag::SERVICE_EXT, + "func found via scriptPath match, srcEntry:%{public}s", srcEntry.c_str()); + return method; + } + } + TAG_LOGW(AAFwkTag::SERVICE_EXT, + "scriptPath match failed, fallback to full scan, scriptPath:%{public}s", + param->scriptPath_.c_str()); + } + + for (const auto &srcEntry : param->srcEntries_) { + if (TryLoadEntry(srcEntry)) { TAG_LOGI(AAFwkTag::SERVICE_EXT, "func found in srcEntry:%{public}s", srcEntry.c_str()); - break; + return method; } TAG_LOGW(AAFwkTag::SERVICE_EXT, "func not found:%{public}s in srcEntry:%{public}s", param->functionName_.c_str(), srcEntry.c_str()); @@ -615,7 +653,6 @@ napi_value JsServiceExtension::LoadSkillFunction( std::vector JsServiceExtension::BuildSkillCallArgs(napi_env env, const std::shared_ptr ¶m) { - TAG_LOGI(AAFwkTag::SERVICE_EXT, "execSkill CallFunc inputArgs:%{public}s", param->skillArgs_->ToString().c_str()); napi_value info = nullptr; napi_create_object(env, &info); napi_value requestCodeVal = nullptr; @@ -632,6 +669,10 @@ std::vector JsServiceExtension::BuildSkillCallArgs(napi_env env, if (param->skillArgs_ != nullptr && !param->skillArgs_->GetParams().empty()) { napi_value wrappedObj = AppExecFwk::WrapWantParams(env, *param->skillArgs_); for (const auto &[key, value] : param->skillArgs_->GetParams()) { + auto typeId = AppExecFwk::WantParams::GetDataType(value); + auto valStr = AppExecFwk::WantParams::GetStringByType(value, typeId); + TAG_LOGI(AAFwkTag::SERVICE_EXT, "skillArg key:%{public}s value:%{public}s", + key.c_str(), valStr.c_str()); napi_value val = nullptr; napi_get_named_property(env, wrappedObj, key.c_str(), &val); args.push_back(val); diff --git a/interfaces/kits/native/ability/native/ability_runtime/js_ui_ability.h b/interfaces/kits/native/ability/native/ability_runtime/js_ui_ability.h index 8f682f50aa..bd1cd1fd9e 100644 --- a/interfaces/kits/native/ability/native/ability_runtime/js_ui_ability.h +++ b/interfaces/kits/native/ability/native/ability_runtime/js_ui_ability.h @@ -462,6 +462,7 @@ private: JsRuntime &jsRuntime_; std::shared_ptr shellContextRef_; std::shared_ptr jsAbilityObj_; + std::unique_ptr skillModuleRef_; sptr remoteCallee_; bool reusingWindow_ = false; bool isGamePreLaunch_ = false; diff --git a/interfaces/kits/native/ability/native/js_service_extension.h b/interfaces/kits/native/ability/native/js_service_extension.h index d0cf123671..3469c054f0 100644 --- a/interfaces/kits/native/ability/native/js_service_extension.h +++ b/interfaces/kits/native/ability/native/js_service_extension.h @@ -200,6 +200,7 @@ private: std::unique_ptr jsObj_; std::shared_ptr shellContextRef_ = nullptr; std::shared_ptr handler_ = nullptr; + std::unique_ptr skillModuleRef_; #ifdef SUPPORT_GRAPHICS protected: diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 17e5a7dcbf..dfdce378cd 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -8377,7 +8377,7 @@ int32_t AbilityManagerProxy::ExecuteSkillDone(const sptr &token, return INNER_ERR; } MessageParcel reply; - MessageOption option(MessageOption::TF_ASYNC); + MessageOption option; auto ret = SendRequest(AbilityManagerInterfaceCode::EXECUTE_SKILL_DONE_WITH_TOKEN, data, reply, option); if (ret != NO_ERROR) { TAG_LOGE(AAFwkTag::ABILITYMGR, "request fail:%{public}d", ret); diff --git a/services/abilitymgr/src/skill/skill_execute_manager.cpp b/services/abilitymgr/src/skill/skill_execute_manager.cpp index 047769210b..de4a7c5413 100644 --- a/services/abilitymgr/src/skill/skill_execute_manager.cpp +++ b/services/abilitymgr/src/skill/skill_execute_manager.cpp @@ -180,7 +180,7 @@ int32_t SkillExecuteManager::ExecuteSkillDone(const std::string &requestCode, in auto it = records_.find(requestCode); if (it == records_.end()) { TAG_LOGE(AAFwkTag::ABILITYMGR, "record not found, requestCode:%{public}s", requestCode.c_str()); - return ERR_INVALID_VALUE; + return ERR_CODE_INVALID_ID; } auto record = it->second; diff --git a/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp b/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp index b3bd060bb3..a93fa210d5 100644 --- a/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp +++ b/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp @@ -1528,5 +1528,95 @@ HWTEST_F(AbilityManagerClientBranchThirdTest, QuerySkillType_0200, TestSize.Leve auto ret = client_->QuerySkillType("bundle", "module", "skill", skillType); EXPECT_EQ(ret, ERR_OK); } + +/** + * @tc.name: ExecuteInAppSkillWithTokenId_0100 + * @tc.desc: Test ExecuteInAppSkillWithTokenId with proxy not connected + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, ExecuteInAppSkillWithTokenId_0100, TestSize.Level1) +{ + client_->proxy_ = nullptr; + EXPECT_CALL(Rosen::SceneBoardJudgement::GetInstance(), MockIsSceneBoardEnabled()) + .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*mockSystemAbility_, GetSystemAbility(testing::_)).WillRepeatedly(Return(nullptr)); + SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = mockSystemAbility_; + + AppExecFwk::SkillExecuteRequest request; + auto ret = client_->ExecuteInAppSkillWithTokenId(request, nullptr); + EXPECT_EQ(ret, ABILITY_SERVICE_NOT_CONNECTED); +} + +/** + * @tc.name: ExecuteInAppSkillWithTokenId_0200 + * @tc.desc: Test ExecuteInAppSkillWithTokenId with proxy connected and success + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, ExecuteInAppSkillWithTokenId_0200, TestSize.Level1) +{ + client_->proxy_ = mock_; + AppExecFwk::SkillExecuteRequest request; + sptr callback = nullptr; + EXPECT_CALL(*mock_, ExecuteInAppSkillWithTokenId(_, _)) + .Times(1) + .WillOnce(Return(ERR_OK)); + auto ret = client_->ExecuteInAppSkillWithTokenId(request, callback); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.name: ExecuteInAppSkillWithTokenId_0300 + * @tc.desc: Test ExecuteInAppSkillWithTokenId with proxy returns error + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, ExecuteInAppSkillWithTokenId_0300, TestSize.Level1) +{ + client_->proxy_ = mock_; + AppExecFwk::SkillExecuteRequest request; + sptr callback = nullptr; + EXPECT_CALL(*mock_, ExecuteInAppSkillWithTokenId(_, _)) + .Times(1) + .WillOnce(Return(ERR_CODE_INVALID_ID)); + auto ret = client_->ExecuteInAppSkillWithTokenId(request, callback); + EXPECT_EQ(ret, ERR_CODE_INVALID_ID); +} + +/** + * @tc.name: ExecuteIntentWithResult_0100 + * @tc.desc: Test ExecuteIntentWithResult with proxy not connected + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, ExecuteIntentWithResult_0100, TestSize.Level1) +{ + client_->proxy_ = nullptr; + EXPECT_CALL(Rosen::SceneBoardJudgement::GetInstance(), MockIsSceneBoardEnabled()) + .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*mockSystemAbility_, GetSystemAbility(testing::_)).WillRepeatedly(Return(nullptr)); + SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = mockSystemAbility_; + + InsightIntentExecuteParam param; + InsightIntentExecuteResult result; + auto ret = client_->ExecuteIntentWithResult(param, result, 1000); + EXPECT_EQ(ret, ABILITY_SERVICE_NOT_CONNECTED); +} + +/** + * @tc.name: ExecuteIntentWithResult_0200 + * @tc.desc: Test ExecuteIntentWithResult with ExecuteIntent returning error + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, ExecuteIntentWithResult_0200, TestSize.Level1) +{ + client_->proxy_ = mock_; + EXPECT_CALL(*mock_, ExecuteIntent(_, _, _)) + .Times(1) + .WillOnce(Return(ERR_INVALID_VALUE)); + + InsightIntentExecuteParam param; + InsightIntentExecuteResult result; + auto ret = client_->ExecuteIntentWithResult(param, result, 1000); + EXPECT_EQ(ret, ERR_INVALID_VALUE); +} + } // namespace AAFwk } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h b/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h index 4c509dcaa4..3add3ef449 100644 --- a/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h +++ b/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h @@ -440,6 +440,8 @@ public: int32_t, const AppExecFwk::SkillExecuteResult &)); MOCK_METHOD4(QuerySkillType, int32_t(const std::string &, const std::string &, const std::string &, int32_t &)); + MOCK_METHOD2(ExecuteInAppSkillWithTokenId, int32_t(const AppExecFwk::SkillExecuteRequest &, + const sptr &)); }; // namespace AAFwk } // namespace OHOS }