簡介
在系統(tǒng)服務(wù)管理子系統(tǒng)中safwk組件定義OpenHarmony中SystemAbility的實(shí)現(xiàn)方法,并提供啟動、注冊等接口實(shí)現(xiàn)。
系統(tǒng)架構(gòu)
圖 1 系統(tǒng)服務(wù)框架圖
說明
接口說明
使用說明
SystemAbility實(shí)現(xiàn)一般采用XXX.cfg + profile.json + libXXX.z.so的方式由init進(jìn)程執(zhí)行對應(yīng)的XXX.cfg文件拉起相關(guān)SystemAbility進(jìn)程。
C++實(shí)現(xiàn)SystemAbility
示例代碼如下:
- 1. 定義IPC對外接口IXXX
定義該服務(wù)對外提供的能力集合函數(shù),統(tǒng)一繼承IPC接口類IRemoteBroker;同時實(shí)現(xiàn)該IPC對外接口唯一標(biāo)識符DECLARE_INTERFACE_DESCRIPTOR(XXX);該標(biāo)識符用于IPC通信的校驗(yàn)等目的。
namespace OHOS {
class IListenAbility : public IRemoteBroker {
public:
virtual int AddVolume(int volume) = 0;
public:
enum {
ADD_VOLUME = 1,
};
public:
DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.test.IListenAbility");
};
}
- 2. 定義客戶端通信代碼XXXProxy
namespace OHOS {
class ListenAbilityProxy : public IRemoteProxy< IListenAbility > {
public:
int AddVolume(int volume);
explicit ListenAbilityProxy(const sptr< IRemoteObject >& impl)
: IRemoteProxy< IListenAbility >(impl)
{
}
private:
static inline BrokerDelegator< ListenAbilityProxy > delegator_;
};
} // namespace OHOS
- 3. 定義服務(wù)端通信代碼XXXStub
namespace OHOS {
int32_t ListenAbilityStub::OnRemoteRequest(uint32_t code,
MessageParcel& data, MessageParcel &reply, MessageOption &option)
{
switch (code) {
case ADD_VOLUME: {
return reply.WriteInt32(AddVolume(data.ReadInt32()));
}
default:
return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
}
}
}
- 4. SystemAbility的實(shí)現(xiàn)類
namespace {
constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001800, "SA_TST"};
}
REGISTER_SYSTEM_ABILITY_BY_ID(ListenAbility, DISTRIBUTED_SCHED_TEST_LISTEN_ID, true);
ListenAbility::ListenAbility(int32_t saId, bool runOnCreate) : SystemAbility(saId, runOnCreate)
{
HiLog::Info(LABEL, ":%s called", __func__);
HiLog::Info(LABEL, "ListenAbility()");
}
ListenAbility::~ListenAbility()
{
HiLog::Info(LABEL, "~ListenAbility()");
}
int ListenAbility::AddVolume(int volume)
{
pid_t current = getpid();
HiLog::Info(LABEL, "ListenAbility::AddVolume volume = %d, pid = %d.", volume, current);
return (volume + 1);
}
void ListenAbility::OnDump()
{
}
void ListenAbility::OnStart()
{
HiLog::Info(LABEL, "ListenAbility::OnStart()");
HiLog::Info(LABEL, "ListenAbility:%s called:-----Publish------", __func__);
bool res = Publish(this);
if (res) {
HiLog::Error(LABEL, "ListenAbility: res == false");
}
HiLog::Info(LABEL, "ListenAbility:%s called:AddAbilityListener_OS_TST----beg-----", __func__);
AddSystemAbilityListener(DISTRIBUTED_SCHED_TEST_OS_ID);
HiLog::Info(LABEL, "ListenAbility:%s called:AddAbilityListener_OS_TST----end-----", __func__);
HiLog::Info(LABEL, "ListenAbility:%s called:StopAbility_OS_TST----beg-----", __func__);
StopAbility(DISTRIBUTED_SCHED_TEST_OS_ID);
HiLog::Info(LABEL, "ListenAbility:%s called:StopAbility_OS_TST----end-----", __func__);
return;
}
void ListenAbility::OnStop()
{
}
- 5. SystemAbility配置
以c++實(shí)現(xiàn)的SA必須配置相關(guān)System Ability的profile配置文件才會完成SA的加載注冊邏輯,否則沒有編寫profile配置的System Ability不會完成注冊。配置方法如下:
在子系統(tǒng)的根目錄新建一個以sa_profile為名的文件夾,然后在此文件夾中新建兩個文件:一個以serviceId為前綴的json文件,另外一個為BUILD.gn文件。
serviceid.json:
{
"process": "listen_test",
"systemability": [
{
"name": serviceid,
"libpath": "liblisten_test.z.so",
"run-on-create": true,
"distributed": true,
"dump_level": 1
}
]
}
BUILD.gn:
import("http://build/ohos/sa_profile/sa_profile.gni")
ohos_sa_profile("xxx_sa_profile") {
sources = [
"serviceid.json"
]
subsystem_name = "systemabilitymgr"
}
說明:
- 進(jìn)程名字即該SystemAbility要運(yùn)行的進(jìn)程空間,此字段是必填選項(xiàng)。
- 一個SystemAbility配置文件只能配置一個SystemAbility節(jié)點(diǎn),配置多個會導(dǎo)致編譯失敗。
- SystemAbility的name為對應(yīng)的serviceId必須與代碼中注冊的serviceId保持一致,必配項(xiàng)。
- libpath為SystemAbility的加載路徑,必配項(xiàng)。
- run-on-create:true表示進(jìn)程啟動后即向samgr組件注冊該SystemAbility;false表示按需啟動,即在其他模塊訪問到該SystemAbility時啟動,必配項(xiàng)。
- distributed:true表示該SystemAbility為分布式SystemAbility,支持跨設(shè)備訪問;false表示只有本地跨IPC訪問。
- bootphase:可不設(shè)置;可以設(shè)置的值有三種:BootStartPhase、CoreStartPhase、OtherStartPhase(默認(rèn)類型),三種優(yōu)先級依次降低,當(dāng)同一個進(jìn)程中,會優(yōu)先拉起注冊配置BootStartPhase的SystemAbility,然后是配置了CoreStartPhase的SystemAbility,最后是OtherStartPhase;當(dāng)高優(yōu)先級的SystemAbility全部啟動注冊完畢才會啟動下一級的SystemAbility的注冊啟動。
- dump-level:表示systemdumper支持的level等級,默認(rèn)配置1。
- BUILD.gn中subsystem_name為相應(yīng)部件名稱;sources表示當(dāng)前子系統(tǒng)需要配置的SystemAbility列表,可支持配置多個SystemAbility。
以上步驟完成后,全量編譯代碼后會在out路徑向生成一個以進(jìn)程名為前綴的json文件listen_test.json;路徑為:out...systemprofilelisten_test.json。
更多鴻蒙開發(fā)知識已更新[qr23.cn/AKFP8k
]可前往參考學(xué)習(xí)。
- 6. cfg配置文件
cfg配置文件為linux提供的native進(jìn)程拉起策略,開機(jī)啟動階段由init進(jìn)程解析配置的cfg文件進(jìn)行拉起。
{
"jobs" : [{
"name" : "post-fs-data",
"cmds" : [
"start listen_test"
]
}
],
"services" : [{
"name" : "listen_test",
"path" : ["/system/bin/sa_main", "/system/profile/listen_test.json"],
"uid" : "system",
"gid" : ["system", "shell"]
}
]
}
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2392瀏覽量
43058
發(fā)布評論請先 登錄
相關(guān)推薦
【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐
鴻蒙Flutter實(shí)戰(zhàn):14-現(xiàn)有Flutter 項(xiàng)目支持鴻蒙 II
HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))綜述
HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))事件推薦開發(fā)者測試
鴻蒙原生開發(fā)手記:01-元服務(wù)開發(fā)
HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))本地搜索方案概述
鴻蒙Flutter實(shí)戰(zhàn):08-如何調(diào)試代碼
鴻蒙Flutter實(shí)戰(zhàn):07混合開發(fā)
鴻蒙OS開發(fā)實(shí)例:【HarmonyHttpClient】網(wǎng)絡(luò)框架
![<b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實(shí)例:【HarmonyHttpClient】網(wǎng)絡(luò)<b class='flag-5'>框架</b>](https://file1.elecfans.com/web2/M00/C6/C5/wKgaomYCyYKAZp6HAAB4LWPdpdQ014.jpg)
鴻蒙實(shí)戰(zhàn)開發(fā):【國際化部件】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>開發(fā)</b>:【國際化<b class='flag-5'>部件</b>】](https://file1.elecfans.com/web2/M00/C5/58/wKgZomX8O8GAMloTAACd6kee9SM198.jpg)
鴻蒙開發(fā)實(shí)戰(zhàn):【Hdf Framework】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【Hdf Framework】](https://file1.elecfans.com/web2/M00/C5/54/wKgZomX8JR6AIKmGAAC1U9QHQQQ328.jpg)
鴻蒙開發(fā)實(shí)戰(zhàn):【系統(tǒng)服務(wù)管理部件】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務(wù)</b>管理<b class='flag-5'>部件</b>】](https://file1.elecfans.com/web2/M00/C5/E7/wKgaomX5QZCAfxw_AACzizMxEnU905.jpg)
鴻蒙開發(fā)實(shí)戰(zhàn):【系統(tǒng)服務(wù)管理部件】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務(wù)</b>管理<b class='flag-5'>部件</b>】](https://file1.elecfans.com/web2/M00/C5/E7/wKgaomX5QZCAfxw_AACzizMxEnU905.jpg)
鴻蒙開發(fā)實(shí)戰(zhàn):【電話服務(wù)子系統(tǒng)】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【電話<b class='flag-5'>服務(wù)</b>子<b class='flag-5'>系統(tǒng)</b>】](https://file1.elecfans.com/web2/M00/C4/6A/wKgZomXy7muANmxUAANPfe5Ll0U928.jpg)
評論