鸿蒙南向开发实战:appspawn应用孵化组件

201 篇文章 1 订阅
126 篇文章 0 订阅

功能简介

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

基本概念

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
  • 应用沙盒

    应用独立运行于自身沙盒环境。应用沙盒中,只保留应用依赖的库或文件,同时,应用之间数据的也进行隔离。

接口说明

接口定义路径: “/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. 确认冷启动命令是否正确。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值