功能简介
应用孵化器,负责接受应用程序框架的命令孵化应用进程,设置其对应权限,并调用应用程序框架的入口。
基本概念
appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地socket,接收来自客户端的请求消息。消息类型为AppParameter的结构体,定义路径为:“interfaces/innerkits/include/appspawn_msg.h“。
表 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:获取渲染终止状态。 |
约束与限制
仅限标准系统下使用
开发指导
场景介绍
安全控制
支持为app设置SELinux标签。
SELinux标签接口代码如下: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());冷启动
支持通过aa命令冷启动应用。param set startup.appspawn.cold.boot 1 // 打开冷启动开关 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应用沙盒
应用独立运行于自身沙盒环境。应用沙盒中,只保留应用依赖的库或文件,同时,应用之间数据的也进行隔离。
接口说明
接口定义路径: "/base/startup/appspawn/interfaces/innerkits/include/client_socket.h",接口说明参见表2。
表 2 接口说明
| 接口名 | 说明 |
|---|---|
| CreateClient | 创建client。 |
| CloseClient | 关闭client。 |
| ConnectSocket | 向appspawn服务发起连接请求。 |
| WriteSocketMessage | 发送消息到appspawn服务。 |
| ReadSocketMessage | 接收来自appspawn服务的消息。 |
开发步骤
沙盒配置说明:
{
"common" : [{ // 应用沙盒通用挂载项
"top-sandbox-switch": "ON", // 沙盒总开关 ON: 打开, OFF: 关闭
"app-base" : [{
"sandbox-root" : "/mnt/sandbox/< PackageName >", // 沙盒根路径
"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/< PackageName >", // 沙盒根路径
"mount-paths" : [{
"src-path" : "/storage/media/< currentUserId >",
"sandbox-path" : "/storage/media",
"sandbox-flags" : [ "bind", "rec" ],
"check-action-status": "false"
}
],
"symbol-links" : []
}]
}]
}
参考沙盒配置说明,修改配置文件。
- 进入设备下:/system/etc/sandbox/路径下,直接修改对应沙盒配置文件, 重新启动。
- 代码路径下:base/startup/appspawn_standard, 修改对应沙盒配置文件。
表 3 沙盒配置文件解释
| 沙盒配置文件 | 解释 |
|---|---|
| appdata-sandbox64.json | 64位系统的沙盒配置 |
| appdata-sandbox.json | 32位系统的沙盒配置 |
| product-sandbox.json | 应用沙盒的产品差异化配置 |
开发实例
以launcher应用新增独有配置应用为例:
"com.ohos.launcher" : [{
"sandbox-switch": "ON",
"sandbox-root" : "/mnt/sandbox/< PackageName >",
"mount-paths" : [{
"src-path" : "/data/app/el1/bundle/public/",
"sandbox-path" : "/data/bundles/",
"sandbox-flags" : [ "bind", "rec" ],
"check-action-status": "true"
}
],
"symbol-links" : []
}],
常见问题
冷启动应用失败
现象描述
通过命令冷启动应用, 应用拉起失败。
解决方法
需要设置 param set startup.appspawn.cold.boot 1生效。
确认冷启动命令是否正确。
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
鸿蒙
+关注
关注
60文章
3017浏览量
46170
发布评论请先 登录
相关推荐
热点推荐
开源鸿蒙项目顺利孵化毕业
2025年11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开放原子开源基金会(以下简称“基金会”)宣布开源鸿蒙项目达成开源孵化目标、顺利毕业,这是项目开源共建五年来最
开源鸿蒙项目达成开源孵化目标顺利毕业
11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开源鸿蒙项目达成开源孵化目标、顺利毕业,这是项目开源共建五年来最具意义的成果之一。
开源鸿蒙技术大会2025丨开源鸿蒙具身智能PMC(筹)启动孵化,AI驱动构筑具身智能新生态
9月27日,开源鸿蒙技术大会2025在长沙国际会议中心盛大举行。大会期间,开源鸿蒙具身智能 PMC(筹)正式启动孵化。这一举措是开源鸿蒙在智能终端操作系统领域深化技术布局的重要里程碑,
开源鸿蒙技术大会2025丨开源鸿蒙应用开发再提速,跨平台框架PMC(筹)正式启动孵化
9月27日,开源鸿蒙技术大会2025在长沙国际会议中心盛大举办。大会现场,开源鸿蒙跨平台框架PMC(筹)正式启动孵化,标志着开源鸿蒙在应用开发
鸿蒙非侵入式弹窗新解法,企查查正式开源“QuickDialog”弹窗组件库
近日,企查查将其自研的鸿蒙弹窗组件库“QuickDialog”开源,并上线至 OpenHarmony 三方库中心仓。这是鸿蒙生态首个支持“弹窗堆栈暂存能力”的非侵入式弹窗解决方案,凭借其灵活、高效
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财
飞书开源“RTV”富文本组件 重塑鸿蒙应用富文本渲染体验
更高效的富文本解决方案。 富文本作为内容展示和信息交互的重要形式,在内容创作、办公协作、教育学习、企业应用等多种复杂业务场景中扮演着重要角色。随着鸿蒙生态应用类型的不断丰富,富文本渲染成为各类应用开发过程中不可或缺的基础能力。
鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战
鸿蒙宝藏:Swiper组件性能优化实战,告别卡顿丢帧!
大家好!最近在鸿蒙开发时,偶然发现了官方文档里埋藏的 性能优化宝藏案例 ,尤其是<span class=\"
发表于 06-12 17:53
润和软件旗下润开鸿亮相开源鸿蒙开发者大会2025
近日,开源鸿蒙开发者大会2025(OHDC.2025)于深圳再启新篇,会上正式发布了开源鸿蒙5.1 Release版本,并进行开源鸿蒙应用技术组件
鸿蒙5开发宝藏案例分享---一多分栏开发实践
?【HarmonyOS开发者的宝藏指南】一次搞定多设备分栏布局,原来还能这么玩!
大家好呀!今天在鸿蒙社区挖到一个超实用的大宝藏——原来官方早就藏了一堆分栏布局的实战案例!作为被多端适配折磨
发表于 06-03 12:03
2025开源鸿蒙开发者大会圆满落幕
近日,开源鸿蒙开发者大会2025(OHDC.2025,简称“大会”)在深圳隆重开幕。大会正式发布了开源鸿蒙5.1 Release版本,举行了开源鸿蒙应用技术
开源鸿蒙开发新体验,开鸿Bot系列今日开启预售!
操作系统,实现从国产高性能芯片到操作系统的全栈自主化,构建起一站式的开源鸿蒙学习与开发平台。
融合开发与办公场景,打造开源鸿蒙生态的“第一
发表于 05-16 14:13
鸿蒙开发学习:【appspawn应用孵化组件】
评论