std::unique_ptr<ShellCmdResult> AbilityDelegator::ExecuteShellCommand(const std::string &cmd, const int64_t timeoutSec)
{
HILOG_INFO("command : %{public}s, timeout : %{public}" PRId64, cmd.data(), timeoutSec);
if (cmd.empty()) {
HILOG_ERROR("Invalid cmd");
return {};
}
auto testObserver = iface_cast<ITestObserver>(observer_);
if (!testObserver) {
HILOG_WARN("Invalid testObserver");
return {};
}
auto result = testObserver->ExecuteShellCommand(cmd, timeoutSec);
return std::make_unique<ShellCmdResult>(result);
}
其中testObserver就是一个handler的作用去抛任务
===========>
AbilityDelegator本质上是执行了'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName,这个时候它一定是被赋值为true的
async onRun() {
hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run');
abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility'
let lMonitor = {
abilityName: testAbilityName,
onAbilityCreate: onAbilityCreateCallback,
};
abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback)
var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName
var debug = abilityDelegatorArguments.parameters['-D']
if (debug == 'true')
{
cmd += ' -D'
}
hilog.info(0x0000, 'testTag', 'cmd : %{public}s', cmd);
abilityDelegator.executeShellCommand(cmd,
(err: any, d: any) => {
hilog.info(0x0000, 'testTag', 'executeShellCommand : err : %{public}s', JSON.stringify(err) ?? '');
hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.stdResult ?? '');
hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.exitCode ?? '');
})
hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end');
}
AbilityDelegator能起来说明一定走了这里,有usertestinfo说明它是testProcess
void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, const Configuration &config)
{
auto usertestInfo = appLaunchData.GetUserTestInfo();
if (usertestInfo) {
if (!PrepareAbilityDelegator(usertestInfo, isStageBased, entryHapModuleInfo)) {
HILOG_ERROR("Failed to prepare ability delegator");
return;
}
}
}
走StartAbility流程,没问题
ErrCode AbilityDelegator::StartAbility(const AAFwk::Want &want)
{
HILOG_INFO("Enter");
auto realWant(want);
auto delegatorArgs = AbilityDelegatorRegistry::GetArguments();
if (delegatorArgs && delegatorArgs->FindDebugFlag()) {
HILOG_INFO("Set Debug to the want which used for starting the ability");
realWant.SetParam("debugApp", true);
}
realWant.SetParam(IS_DELEGATOR_CALL, true);
return AbilityManagerClient::GetInstance()->StartAbility(realWant);
}
但是最后获取的时候出了问题,可能是获取的时候有问题
https://gitee.com/openharmony/ability_ability_runtime/pulls/6930/files
[ohos] sa权限最小化时遇到的ability_delegator问题
最新推荐文章于 2024-07-10 22:49:54 发布