讨论广场 问答详情
请问下aa命令拉起应用的流程
Tiimmi丶 2024-11-21 11:32:36
23 评论 分享

如题,通过hdc执行aa命令拉起应用,代码的执行流程都是怎样的呢?

有没有文档介绍?

测试acts时遇到了测试套执行了aa命令,应用却拉不起来,想分析下是不是拉起流程卡住了。

问题指路:ActsGetgroupdirTest用例无法执行

23 评论 分享
写回答
全部评论(2)

aa start 相关实现

ErrCode AbilityToolCommand::RunAsStartAbility()
{
    Want want;
    StartOptions startoptions;

    ErrCode result = ParseStartAbilityArgsFromCmd(want, startoptions);
    if (result != OHOS::ERR_OK) {
        resultReceiver_.append(ABILITY_TOOL_HELP_MSG_START);
        return result;
    }

    result = AbilityManagerClient::GetInstance()->StartAbility(want, startoptions, nullptr);
    if (result != OHOS::ERR_OK) {
        HILOG_ERROR("%{public}s result = %{public}d", STRING_START_ABILITY_NG.c_str(), result);
        if (result != START_ABILITY_WAITING) {
            resultReceiver_ = STRING_START_ABILITY_NG + "\n";
        }
        resultReceiver_.append(GetMessageFromCode(result));
        return result;
    }

    HILOG_INFO("%{public}s", STRING_START_ABILITY_OK.c_str());
    resultReceiver_ = STRING_START_ABILITY_OK + "\n";
    return OHOS::ERR_OK;
}

调用流程图:

  1. 命令解析

    • 使用 getopt_long 解析命令行参数。
    • 提取 --device--ability--bundle--options--flags-C-D 等参数。
  2. 参数验证

    • 检查 --ability 和 --bundle 是否存在。
    • 验证 windowMode 是否为有效值(如 102)。
  3. 构建 Want 对象

    • 创建 ElementName 对象,包含设备 ID、包名和能力名。
    • 将 ElementName 设置到 Want 对象中。
    • 添加 coldStart 和 debugApp 参数到 Want 的参数列表中。
    • 设置 flags 到 Want 中。
  4. 构建 StartOptions 对象

    • 如果指定了 windowMode,设置 StartOptions 的窗口模式。
  5. 调用 StartAbility 方法

    • 通过 AbilityManagerClient 调用 StartAbility 方法,传递 Want 和 StartOptions 对象。
    • 处理返回结果,记录日志并返回相应的错误码或成功信息。

 
源码地址:tools/aa/include/ability_command.h · OpenHarmony/ability_ability_runtime - 码云 - 开源中国

2024-11-21 14:49:21
2024-11-21 15:13:50
感谢感谢
2024-11-21 15:13:50