功能簡(jiǎn)介
應(yīng)用孵化器,負(fù)責(zé)接受應(yīng)用程序框架的命令孵化應(yīng)用進(jìn)程,設(shè)置其對(duì)應(yīng)權(quán)限,并調(diào)用應(yīng)用程序框架的入口。
基本概念
appspawn注冊(cè)的服務(wù)名稱為“appspawn”。appspawn 通過監(jiān)聽本地socket,接收來(lái)自客戶端的請(qǐng)求消息。消息類型為AppParameter的結(jié)構(gòu)體,定義路徑為:“interfaces/innerkits/include/appspawn_msg.h“。
表 1 字段說(shuō)明
字段名 | 說(shuō)明 |
---|---|
processName | 即將啟動(dòng)的應(yīng)用服務(wù)進(jìn)程名,最大256字節(jié)。 |
bundleName | 即將啟動(dòng)的應(yīng)用程序包名,最大256字節(jié)。 |
soPath | 即應(yīng)用程序指定的動(dòng)態(tài)庫(kù)的路徑,最大256字節(jié)。 |
uid | 即將啟動(dòng)的應(yīng)用進(jìn)程的uid。 |
gid | 即將啟動(dòng)的應(yīng)用進(jìn)程的gid。 |
gidTable | 即將啟動(dòng)的應(yīng)用進(jìn)程組信息,長(zhǎng)度由gidCount指定,最大支持64個(gè)進(jìn)程組,必須為正值。 |
gidCount | 即將啟動(dòng)的應(yīng)用進(jìn)程組個(gè)數(shù)。 |
accessTokenId | 即應(yīng)用進(jìn)程權(quán)限控制的token id。 |
apl | 即應(yīng)用進(jìn)程權(quán)限控制的apl,最大32字節(jié). |
renderCmd | 即圖形圖像渲染命令, 最大1024字節(jié)。 |
flags | 即冷啟動(dòng)標(biāo)志位。 |
pid | 即渲染進(jìn)程pid,查詢渲染進(jìn)程退出狀態(tài)。 |
AppOperateType | 即App操作類型,0: 默認(rèn)狀態(tài); 1:獲取渲染終止?fàn)顟B(tài)。 |
約束與限制
僅限標(biāo)準(zhǔn)系統(tǒng)下使用
開發(fā)指導(dǎo)
場(chǎng)景介紹
安全控制
支持為app設(shè)置SELinux標(biāo)簽。
SELinux標(biāo)簽接口代碼如下: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); }
應(yīng)用進(jìn)程控制
- 支持為app設(shè)置AccessToken。
- 支持重啟前,appspawn停止后,可同時(shí)停止所有已孵化的app進(jìn)程。
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());
冷啟動(dòng)
支持通過aa命令冷啟動(dòng)應(yīng)用。param set startup.appspawn.cold.boot 1 // 打開冷啟動(dòng)開關(guān) 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
應(yīng)用沙盒
應(yīng)用獨(dú)立運(yùn)行于自身沙盒環(huán)境。應(yīng)用沙盒中,只保留應(yīng)用依賴的庫(kù)或文件,同時(shí),應(yīng)用之間數(shù)據(jù)的也進(jìn)行隔離。
接口說(shuō)明
接口定義路徑: "/base/startup/appspawn/interfaces/innerkits/include/client_socket.h",接口說(shuō)明參見表2。
表 2 接口說(shuō)明
接口名 | 說(shuō)明 |
---|---|
CreateClient | 創(chuàng)建client。 |
CloseClient | 關(guān)閉client。 |
ConnectSocket | 向appspawn服務(wù)發(fā)起連接請(qǐng)求。 |
WriteSocketMessage | 發(fā)送消息到appspawn服務(wù)。 |
ReadSocketMessage | 接收來(lái)自appspawn服務(wù)的消息。 |
開發(fā)步驟
沙盒配置說(shuō)明:
{
"common" : [{ // 應(yīng)用沙盒通用掛載項(xiàng)
"top-sandbox-switch": "ON", // 沙盒總開關(guān) ON: 打開, OFF: 關(guān)閉
"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 不檢查當(dāng)前項(xiàng)掛載結(jié)果, true: 檢查當(dāng)前項(xiàng)掛載結(jié)果
}
],
"symbol-links" : [{ // link 的目錄項(xiàng)
"target-name" : "/system/bin", // link 的源目錄
"link-name" : "/bin", // 鏈接名稱
"check-action-status": "false"
}
]
}],
// 應(yīng)用獨(dú)有配置參考
"individual" : [{ // 個(gè)別應(yīng)用單獨(dú)掛載項(xiàng)
"com.ohos.medialibrary.MediaLibraryDataA" : [{ // 應(yīng)用名
"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" : []
}]
}]
}
參考沙盒配置說(shuō)明,修改配置文件。
- 進(jìn)入設(shè)備下:/system/etc/sandbox/路徑下,直接修改對(duì)應(yīng)沙盒配置文件, 重新啟動(dòng)。
- 代碼路徑下:base/startup/appspawn_standard, 修改對(duì)應(yīng)沙盒配置文件。
表 3 沙盒配置文件解釋
沙盒配置文件 | 解釋 |
---|---|
appdata-sandbox64.json | 64位系統(tǒng)的沙盒配置 |
appdata-sandbox.json | 32位系統(tǒng)的沙盒配置 |
product-sandbox.json | 應(yīng)用沙盒的產(chǎn)品差異化配置 |
開發(fā)實(shí)例
以launcher應(yīng)用新增獨(dú)有配置應(yīng)用為例:
"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" : []
}],
常見問題
冷啟動(dòng)應(yīng)用失敗
現(xiàn)象描述
通過命令冷啟動(dòng)應(yīng)用, 應(yīng)用拉起失敗。
解決方法
需要設(shè)置 param set startup.appspawn.cold.boot 1生效。
確認(rèn)冷啟動(dòng)命令是否正確。
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2392瀏覽量
43058
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論