appspawn标准系统应用孵化组件
appspawn标准系统应用孵化组件
概述
appspawn被init启动后,等待接收进程间消息,根据消息内容启动应用服务并赋予其对应权限。
功能简介
安全控制
支持为app设置SELinux标签。应用进程控制
- 支持为app设置AccessToken。
- 支持重启前,appspawn停止后,可同时停止所有已孵化的app进程。
冷启动
支持通过aa命令冷启动应用。param set appspawn.cold.boot true // 打开冷启动开关 aa start -d 12345 -a $name -b $package -C 参考: aa start -d 12345 -a ohos.acts.startup.sysparam.function.MainAbility -b ohos.acts.startup.sysparam.function -C
1
2
3
4
5
基本概念
appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地socket,接收来自客户端的请求消息。消息类型为AppProperty的结构体,定义路径为:“base/startup/appspawn_standard/interfaces/innerkits/include/sclient_socket.h“。
表 1 字段说明
开发指导
接口定义路径: “base/startup/appspawn_standard/interfaces/innerkits/include/client_socket.h“,表 2为接口说明。
接口说明
表 2 接口说明
开发实例
接口使用参考:
std::shared_ptr<AppSpawn::ClientSocket> clientSocket = std::make_unique<AppSpawn::ClientSocket>("AppSpawn");
if (clientSocket == nullptr) {
return -1;
}
if (clientSocket->CreateClient() != ERR_OK) {
return -1;
}
if (clientSocket->ConnectSocket() != ERR_OK) {
return -1;;
}
// property 构造AppProperty
clientSocket->WriteSocketMessage((void *)&property, sizeof(AppSpawn::AppProperty));
// 读结果
int pid;
clientSocket->ReadSocketMessage((void *)&pid, sizeof(pid));
// 如果失败,返回pid小于等于0;否则返回应用的进程id
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
常见问题
冷启动应用失败
现象描述
通过命令冷启动应用失败。
解决方法
1. 确认是否打开冷启动设置。
2. 确认冷启动命令是否正确。