0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发学习:【appspawn应用孵化组件】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-03-18 22:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

功能简介

应用孵化器,负责接受应用程序框架的命令孵化应用进程,设置其对应权限,并调用应用程序框架的入口。

基本概念

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.json64位系统的沙盒配置
appdata-sandbox.json32位系统的沙盒配置
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" : []
}],

常见问题

冷启动应用失败

现象描述
通过命令冷启动应用, 应用拉起失败。

解决方法

  1. 需要设置 param set startup.appspawn.cold.boot 1生效。

  2. 确认冷启动命令是否正确。

    审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45346
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙项目顺利孵化毕业

    2025年11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开放原子开源基金会(以下简称“基金会”)宣布开源鸿蒙项目达成开源孵化目标、顺利毕业,这是项目开源共建五年来最
    的头像 发表于 11-27 14:36 293次阅读

    开源鸿蒙项目达成开源孵化目标顺利毕业

    11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开源鸿蒙项目达成开源孵化目标、顺利毕业,这是项目开源共建五年来最具意义的成果之一。
    的头像 发表于 11-25 17:36 876次阅读

    开源鸿蒙技术大会2025丨开源鸿蒙具身智能PMC(筹)启动孵化,AI驱动构筑具身智能新生态

    9月27日,开源鸿蒙技术大会2025在长沙国际会议中心盛大举行。大会期间,开源鸿蒙具身智能 PMC(筹)正式启动孵化。这一举措是开源鸿蒙在智能终端操作系统领域深化技术布局的重要里程碑,
    的头像 发表于 11-10 18:16 1169次阅读
    开源<b class='flag-5'>鸿蒙</b>技术大会2025丨开源<b class='flag-5'>鸿蒙</b>具身智能PMC(筹)启动<b class='flag-5'>孵化</b>,AI驱动构筑具身智能新生态

    开源鸿蒙技术大会2025丨开源鸿蒙应用开发再提速,跨平台框架PMC(筹)正式启动孵化

    9月27日,开源鸿蒙技术大会2025在长沙国际会议中心盛大举办。大会现场,开源鸿蒙跨平台框架PMC(筹)正式启动孵化,标志着开源鸿蒙在应用开发
    的头像 发表于 11-10 18:15 1081次阅读
    开源<b class='flag-5'>鸿蒙</b>技术大会2025丨开源<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>再提速,跨平台框架PMC(筹)正式启动<b class='flag-5'>孵化</b>

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财
    的头像 发表于 07-11 18:24 787次阅读

    【HarmonyOS 5】金融应用开发鸿蒙组件实践

    【HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:20 744次阅读
    【HarmonyOS 5】金融应用<b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b><b class='flag-5'>组件</b>实践

    飞书开源“RTV”富文本组件 重塑鸿蒙应用富文本渲染体验

    更高效的富文本解决方案。 富文本作为内容展示和信息交互的重要形式,在内容创作、办公协作、教育学习、企业应用等多种复杂业务场景中扮演着重要角色。随着鸿蒙生态应用类型的不断丰富,富文本渲染成为各类应用开发过程中不可或缺的基础能力。
    的头像 发表于 07-11 15:20 449次阅读
    飞书开源“RTV”富文本<b class='flag-5'>组件</b> 重塑<b class='flag-5'>鸿蒙</b>应用富文本渲染体验

    开鸿开发板深度体验:从开源鸿蒙开发到AI场景实践

    开鸿开发板KaihongBoard-3588S-SBCKaihongBoard-3576-SBC体验开源鸿蒙能力学习开源鸿蒙开发●●●搭载K
    的头像 发表于 07-03 17:03 1173次阅读
    开鸿<b class='flag-5'>开发</b>板深度体验:从开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>到AI场景实践

    鸿蒙北向开发OpenHarmony5.0 DevEco Studio开发工具安装与配置

    本文介绍OpenHarmony5.0 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!由触觉智能Purple Pi OH鸿蒙开发
    的头像 发表于 03-28 18:05 1333次阅读
    <b class='flag-5'>鸿蒙</b>北向<b class='flag-5'>开发</b>OpenHarmony5.0 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    开源啦!!!基于鸿蒙ArkTS封装的图表组件《McCharts》,大家快来一起共创

    Hello;大家好,我是陈杨。好久没更新了,首先是自己本职工作比较忙,基本没时间写作。其次就是学习技术,自学鸿蒙ArkTS语言已经接近半年了,也算半路出师了,这次将分享我封装的组件库,所以有啥讲错
    发表于 03-15 15:21

    【「极速探索HarmonyOS NEXT 」阅读体验】 初印象:一本纯血鸿蒙应用开发入门的好书

    非常有幸的于近日收到了电子发烧友寄来的《 极速探索HarmonyOS NEXT **** 纯血鸿蒙应用开发实践》这本由清华大学出版社出版的一本纯血鸿蒙应用开发
    发表于 03-04 12:41

    HarmonyOS 应用开发赋能套件:鸿蒙原生应用开发的 “神助攻”

    随着鸿蒙生态的快速发展,越来越多的开发者投身于鸿蒙原生应用的开发中。然而,在学习鸿蒙原生应用
    发表于 02-17 16:37

    AIGC入门及鸿蒙入门

    JDK、配置SDK等。 3. 开发实践: 学习鸿蒙系统的架构和API,了解其组件化、分布式等特性。 通过官方文档和社区资源,学习和掌握
    发表于 01-13 10:32

    OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

    开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐
    的头像 发表于 12-24 11:46 1082次阅读
    OpenHarmony怎么修改DPI密度值?触觉智能RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    鸿蒙原生开源库ViewPool在OpenHarmony社区正式上线

    近日,由伙伴参与共建的鸿蒙原生开源库“ViewPool”在OpenHarmony社区正式上线。这个开发库是基于OpenHarmony技术孵化的成果,充分发挥了平台的技术特性,同时融入了伙伴在应用
    的头像 发表于 12-20 14:44 840次阅读