diff --git a/zh-cn/device-dev/subsystems/Readme-CN.md b/zh-cn/device-dev/subsystems/Readme-CN.md
index 3b3aa42e9da22e017b01026e9173c3cf6ef6e636..8d551b413db9c2e802086313237791348b352084 100755
--- a/zh-cn/device-dev/subsystems/Readme-CN.md
+++ b/zh-cn/device-dev/subsystems/Readme-CN.md
@@ -76,7 +76,6 @@
- [启动恢复子系统概述](subsys-boot-overview.md)
- [init启动引导组件](subsys-boot-init.md)
- [appspawn应用孵化组件](subsys-boot-appspawn.md)
- - [appspawn标准系统应用孵化组件](subsys-boot-appspawn-standard.md)
- [bootstrap服务启动组件](subsys-boot-bootstrap.md)
- [syspara系统属性组件](subsys-boot-syspara.md)
- [常见问题](subsys-boot-faqs.md)
diff --git a/zh-cn/device-dev/subsystems/subsys-boot-appspawn-standard.md b/zh-cn/device-dev/subsystems/subsys-boot-appspawn-standard.md
deleted file mode 100644
index 8627bbf296b63d1bf48bca8df4d796eb168cd2cb..0000000000000000000000000000000000000000
--- a/zh-cn/device-dev/subsystems/subsys-boot-appspawn-standard.md
+++ /dev/null
@@ -1,158 +0,0 @@
-# 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
-
-### 基本概念
-
-appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地socket,接收来自客户端的请求消息。消息类型为AppProperty的结构体,定义路径为:“base/startup/appspawn_standard/interfaces/innerkits/include/sclient_socket.h“。
-
-**表 1** 字段说明
-
-
字段名
- |
-说明
- |
-
-
-processName
- |
-即将启动的应用服务进程名,最大256字节。
- |
-
-bundleName
- |
-即将启动的应用程序包名,最大256字节。
- |
-
-soPath
- |
-应用程序指定的动态库的路径,最大256字节。
- |
-
-uid
- |
-即将启动的应用进程的uid,必须为正值。
- |
-
-gid
- |
-即将启动的应用进程的gid,必须为正值。
- |
-
-gidTable
- |
-即将启动的应用进程组信息,长度由gidCount指定,最大支持64个进程组,必须为正值。
- |
-
-gidCount
- |
-即将启动的应用进程组个数。
- |
-
-accessTokenId
- |
-应用进程权限控制的token id。
- |
-
-apl
- |
-应用进程权限控制的apl,最大32字节。
- |
-
-
-
-
-## 开发指导
-
- 接口定义路径: “base/startup/appspawn_standard/interfaces/innerkits/include/client_socket.h“,表 2为接口说明。
-
-### 接口说明
-
-**表 2** 接口说明
-接口名
- |
-说明
- |
-
-
-CreateClient
- |
-创建client。
- |
-
-CloseClient
- |
-关闭client。
- |
-
-ConnectSocket
- |
-向appspawn服务发起连接请求。
- |
-
-WriteSocketMessage
- |
-发送消息到appspawn服务。
- |
-
-ReadSocketMessage
- |
-接收来自appspawn服务的消息。
- |
-
-
-
-
-### 开发实例
-
-
接口使用参考:
-```
- std::shared_ptr clientSocket = std::make_unique("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
-```
-
-## 常见问题
-
-### 冷启动应用失败
-
- **现象描述**
-
通过命令冷启动应用失败。
-
- **解决方法**
-
1. 确认是否打开冷启动设置。
-
2. 确认冷启动命令是否正确。
\ No newline at end of file
diff --git a/zh-cn/device-dev/subsystems/subsys-boot-appspawn.md b/zh-cn/device-dev/subsystems/subsys-boot-appspawn.md
old mode 100755
new mode 100644
index 0ac9b5c98ceab59faee82e1cad7b9d41af04cf08..af4475084178f129cbce95daf5822d9e2b281db7
--- a/zh-cn/device-dev/subsystems/subsys-boot-appspawn.md
+++ b/zh-cn/device-dev/subsystems/subsys-boot-appspawn.md
@@ -1,102 +1,173 @@
-# appspawn应用孵化组件
-
+# appspawn应用孵化组件
## 概述
-appspawn被init启动后,等待接收进程间消息,根据消息内容启动应用服务并赋予其对应权限。
+### 功能简介
+ 应用孵化器,负责接受应用程序框架的命令孵化应用进程,设置其对应权限,并调用应用程序框架的入口。
-## 功能简介
+### 基本概念
-- 安全控制
支持为app设置SELinux标签。
+ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地socket,接收来自客户端的请求消息。消息类型为AppParameter的结构体,定义路径为:“interfaces/innerkits/include/appspawn_msg.h“。
-- 应用进程控制
- - 支持为app设置AccessToken。
- - 支持重启前,appspawn停止后,可同时停止所有已孵化的app进程。
+ **表 1** 字段说明
+ | 字段名 | 说明 |
+ | -------- | -------- |
+ | processName | 即将启动的应用服务进程名,最大256字节。 |
+ | bundleName | 即将启动的应用程序包名,最大256字节。 |
+ | soPath | 即应用程序指定的动态库的路径,最大256字节。 |
+ | uid | 即将启动的应用进程的uid。 |
+ | gid | 即将启动的应用进程的gid。 |
+ | gidTable | 即将启动的应用进程组信息,长度由gidCount指定,最大支持64个进程组,必须为正值。 |
+ | gidCount | 即将启动的应用进程组个数。 |
+ | accessTokenId | 即应用进程权限控制的token id。 |
+ | apl | 即应用进程权限控制的apl,最大32字节. |
+ | renderCmd | 即图形图像渲染命令, 最大1024字节。 |
+ | flags | 即冷启动标志位。 |
+ | pid | 即渲染进程pid,查询渲染进程退出状态。 |
+ | AppOperateType | 即App操作类型,0: 默认状态; 1:获取渲染终止状态。 |
-- 冷启动
支持应用通过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
- ```
+### 约束与限制
+仅限标准系统下使用
+## 开发指导
-## 基本概念
+### 场景介绍
-appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地socket,接收来自客户端的请求消息。消息类型为AppProperty的结构体,定义路径为:“base/startup/appspawn_standard/interfaces/innerkits/include/sclient_socket.h”。
+- 安全控制
- **表1** 字段说明
+ 支持为app设置SELinux标签。
-| 字段名 | 说明 |
-| -------- | -------- |
-| processName | 即将启动的应用服务进程名,最大256字节。 |
-| bundleName | 即将启动的应用程序包名,最大256字节。 |
-| soPath | 应用程序指定的动态库的路径,最大256字节。 |
-| uid | 即将启动的应用进程的uid,必须为正值。 |
-| gid | 即将启动的应用进程的gid,必须为正值。 |
-| gidTable | 即将启动的应用进程组信息,长度由gidCount指定,最大支持64个进程组,必须为正值。 |
-| gidCount | 即将启动的应用进程组个数。 |
-| accessTokenId | 应用进程权限控制的token id。 |
-| apl | 应用进程权限控制的apl,最大32字节。 |
+ SELinux标签接口代码如下:
+ ```c++
+ AppSpawnClientExt *appProperty = (AppSpawnClientExt *)client;
+ HapContext hapContext;
+ ret = hapContext.HapDomainSetcontext(appProperty->property.apl, appProperty->property.processName);
+ if (ret != 0) {
+ APPSPAWN_LOGE("AppSpawnServer::Failed to hap domain set context, errno = %d %s",
+ errno, appProperty->property.apl);
+ } else {
+ APPSPAWN_LOGI("AppSpawnServer::Success to hap domain set context, ret = %d", ret);
+ }
+ ```
+- 应用进程控制
+ - 支持为app设置AccessToken。
+ - 支持重启前,appspawn停止后,可同时停止所有已孵化的app进程。
-## 开发指导
+ AccessToken接口代码如下:
+ ```
+ AppSpawnClientExt *appProperty = (AppSpawnClientExt *)client;
+ int32_t ret = SetSelfTokenID(appProperty->property.accessTokenId);
+ APPSPAWN_LOGI("AppSpawnServer::set access token id = %d, ret = %d %d", appProperty->property.accessTokenId, ret, getuid());
+ ```
-接口定义路径: “base/startup/appspawn_standard/interfaces/innerkits/include/client_socket.h”,表 2为接口说明。
+- 冷启动
+ 支持通过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
+ ```
-### 接口说明
+- 应用沙盒
- **表2** 接口说明
+ 应用独立运行于自身沙盒环境。应用沙盒中,只保留应用依赖的库或文件,同时,应用之间数据的也进行隔离。
-| 接口名 | 说明 |
-| -------- | -------- |
-| CreateClient | 创建client。 |
-| CloseClient | 关闭client。 |
-| ConnectSocket | 向appspawn服务发起连接请求。 |
-| WriteSocketMessage | 发送消息到appspawn服务。 |
-| ReadSocketMessage | 接收来自appspawn服务的消息。 |
+### 接口说明
+ 接口定义路径: “/interfaces/innerkits/include/client_socket.h“,接口说明参见表2。
-## 开发实例
+ **表 2** 接口说明
+ | 接口名 | 说明 |
+ | -------- | -------- |
+ | CreateClient | 创建client。 |
+ | CloseClient | 关闭client。 |
+ | ConnectSocket | 向appspawn服务发起连接请求。 |
+ | WriteSocketMessage | 发送消息到appspawn服务。 |
+ | ReadSocketMessage | 接收来自appspawn服务的消息。 |
-接口使用参考:
+### 开发步骤
-
-```
-std::shared_ptr clientSocket = std::make_unique("AppSpawn");
- if (clientSocket == nullptr) {
- return -1;
- }
- if (clientSocket->CreateClient() != ERR_OK) {
- return -1;
- }
- if (clientSocket->ConnectSocket() != ERR_OK) {
- return -1;;
+ 沙盒配置说明:
+
+ ```
+ {
+ "common" : [{ // 应用沙盒通用挂载项
+ "top-sandbox-switch": "ON", // 沙盒总开关 ON: 打开, OFF: 关闭
+ "app-base" : [{
+ "sandbox-root" : "/mnt/sandbox/", // 沙盒根路径
+ "mount-paths" : [{
+ "src-path" : "/config", // mount的源目录
+ "sandbox-path" : "/config", // 沙盒挂载路径
+ "sandbox-flags" : [ "bind", "rec" ], // 挂载方式
+ "check-action-status": "false" // false 不检查当前项挂载结果, true: 检查当前项挂载结果
+ }
+ ],
+ "symbol-links" : [{ // link 的目录项
+ "target-name" : "/system/bin", // link 的源目录
+ "link-name" : "/bin", // 链接名称
+ "check-action-status": "false"
+ }
+ ]
+ }],
+ // 应用独有配置参考
+ "individual" : [{ // 个别应用单独挂载项
+ "com.ohos.medialibrary.MediaLibraryDataA" : [{ // 应用名
+ "sandbox-switch": "ON", // ON: 挂载沙盒路径, OFF: 挂载根路径
+ "sandbox-root" : "/mnt/sandbox/", // 沙盒根路径
+ "mount-paths" : [{
+ "src-path" : "/storage/media/",
+ "sandbox-path" : "/storage/media",
+ "sandbox-flags" : [ "bind", "rec" ],
+ "check-action-status": "false"
+ }
+ ],
+ "symbol-links" : []
+ }]
+ }]
}
- // property 构造AppProperty
- clientSocket->WriteSocketMessage((void *)&property, sizeof(AppSpawn::AppProperty));
- // 读结果
- int pid;
- clientSocket->ReadSocketMessage((void *)&pid, sizeof(pid));
- // 如果失败,返回pid小于等于0;否则返回应用的进程id
-```
+ ```
+ 参考沙盒配置说明,修改配置文件。
+
+ - 进入设备下:/system/etc/sandbox/路径下,直接修改对应沙盒配置文件, 重新启动。
+ - 代码路径下:base/startup/appspawn_standard, 修改对应沙盒配置文件。
+
+ **表 3** 沙盒配置文件解释
+
+ | 沙盒配置文件 | 解释 |
+ | -------- | -------- |
+ | appdata-sandbox64.json | 64位系统的沙盒配置 |
+ | appdata-sandbox.json | 32位系统的沙盒配置 |
+ | product-sandbox.json | 应用沙盒的产品差异化配置 |
+
+### 开发实例
+以launcher应用新增独有配置应用为例:
+ ```c++
+ "com.ohos.launcher" : [{
+ "sandbox-switch": "ON",
+ "sandbox-root" : "/mnt/sandbox/",
+ "mount-paths" : [{
+ "src-path" : "/data/app/el1/bundle/public/",
+ "sandbox-path" : "/data/bundles/",
+ "sandbox-flags" : [ "bind", "rec" ],
+ "check-action-status": "true"
+ }
+ ],
+ "symbol-links" : []
+ }],
+ ```
## 常见问题
-
### 冷启动应用失败
-**现象描述**
-
-通过命令冷启动应用失败。
-
-**解决方法**
-
-1. 确认是否打开冷启动设置。
+ **现象描述**
+
通过命令冷启动应用, 应用拉起失败。
-2. 确认冷启动命令是否正确。
+ **解决方法**
+
1. 需要设置 param set appspawn.cold.boot true生效。
+
2. 确认冷启动命令是否正确。
\ No newline at end of file