功能簡介
應用孵化器,負責接受應用程序框架的命令孵化應用進程,設置其對應權限,并調用應用程序框架的入口。
基本概念
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文章
2963瀏覽量
45883
發布評論請先 登錄
相關推薦
熱點推薦
開源鴻蒙項目順利孵化畢業
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版本,并進行開源鴻蒙應用技術組件
2025開源鴻蒙開發者大會圓滿落幕
近日,開源鴻蒙開發者大會2025(OHDC.2025,簡稱“大會”)在深圳隆重開幕。大會正式發布了開源鴻蒙5.1 Release版本,舉行了開源鴻蒙應用技術
鴻蒙北向開發OpenHarmony5.0 DevEco Studio開發工具安裝與配置
本文介紹OpenHarmony5.0 DevEco Studio開發工具安裝與配置,鴻蒙北向開發入門必備!由觸覺智能Purple Pi OH鴻蒙開發
開源啦!!!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創
Hello;大家好,我是陳楊。好久沒更新了,首先是自己本職工作比較忙,基本沒時間寫作。其次就是學習技術,自學鴻蒙ArkTS語言已經接近半年了,也算半路出師了,這次將分享我封裝的組件庫,所以有啥講錯
發表于 03-15 15:21
鴻蒙開發學習:【appspawn應用孵化組件】
評論