Компонент System Ability Framework (safwk) определяет, как реализовывать системные возможности в OpenHarmony, и предоставляет API для запуска и регистрации системных возможностей.
Рисунок 1 Архитектура safwk
/foundation/systemabilitymgr
│── safwk # Директория safwk
│ ├── bundle.json # Описание и файл сборки safwk
│ ├── etc # Конфигурационные файлы
│ ├── interfaces # API, выставленные наружу
│ ├── services # Реализация сервисов
│ ├── test # Тестовые случаи
API | Описание |
---|---|
sptr GetSystemAbility(int32_t systemAbilityId); | Получает объект удаленного вызова процедур (RPC) системной возможности. |
bool Publish(sptr systemAbility); | Публикует системную возможность. |
virtual void DoStartSAProcess(const std::string& profilePath) = 0; | Запускает системную возможность на основе её профиля. |
Системная возможность реализуется с помощью XXX.cfg, profile.json и libXXX.z.so. Процесс инициализации запускает процесс SystemAbility, выполняя соответствующий файл XXX.cfg.
Реализация системной возможности на C++
Пример кода приведен ниже:
1. Определение класса IXКласс IXXX используется для определения функций, которые система предоставляет для конкретных возможностей. Для определения этого класса наследуйте от класса IRemoteBroker, предоставленного OpenHarmony для межпроцессного взаимодействия (IPC), и реализуйте DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.test.IListenAbility"), который уникально идентифицирует этот класс. Идентификатор используется для проверки IPC.
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. Определите класс 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. Реализуйте системное умение.
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()");
}
`````````markdown
5. Настройка системного умения.
Настройте профиль системного умения таким образом, чтобы оно могло быть загружено и зарегистрировано. Процедура настройки следующая:
Создайте папку с именем sa_profile в корневом каталоге подсистемы. Затем создайте два файла в этой папке, включая файл 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:
# Пример файла BUILD.gn
``````gn
import("//build/ohos/sa_profile/sa_profile.gni")
ohos_sa_profile("xxx_sa_profile") {
sources = [
"serviceid.json"
]
subsystem_name = "systemabilitymgr"
}
>1. Установите **process** в имя процесса, где будет выполняться система. Этот параметр обязательный.
>2. Файл *serviceid*.json может содержать только один **systemability** узел. Несколько **systemability** узлов приведут к ошибке сборки.
>3. Установите **name** в идентификатор службы, зарегистрированный в коде для системы. Этот параметр обязательный.
>4. Установите **libpath** в путь для загрузки системы. Этот параметр обязательный.
>5. Установите **run-on-create** в **true**, если вы хотите зарегистрировать эту систему сразу после запуска процесса. Установите его в **false**, если вы хотите, чтобы система запускалась только при доступе к ней. Этот параметр обязательный.
>6. Установите **distributed** в **true**, если эта система позволяет доступ между устройствами. Установите его в **false**, если она поддерживает только IPC на локальном устройстве.
>7. **bootphase** указывает приоритет запуска системы. Значение может быть **BootStartPhase** (наивысший), **CoreStartPhase**, или **OtherStartPhase** (наименьший). В одном и том же процессе системы с более низким приоритетом могут быть запущены и зарегистрированы только после того, как все системы с более высоким приоритетом будут запущены и зарегистрированы. Этот параметр необязательный. Значение по умолчанию — **OtherStartPhase**.
>8.```**dump-level** указывает уровень, поддерживаемый системой дампа. Значение по умолчанию — **1**.
>9. В файле **BUILD.gn** установите **subsystem_name** в имя подсистемы, и добавьте список систем для настройки подсистемы в **sources**. Множество систем может быть настроено. После завершения предыдущих шагов будет сгенерирован JSON-файл, названный процессом, в **out**, например, **out\...\system\profile\listen_test.json**.**6. Настройте файл .cfg.**
Файл .cfg содержит политику запуска встроенных процессов, предоставленную Linux. В процессе запуска системы, процесс init парсит файл .cfg для запуска встроенных процессов.
{ "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"] } ] }
>**ЗАМЕЧАНИЕ**
>
>Для получения подробной информации о реализации listen_ability обратитесь к **test/services/safwk/unittest/common/listen_ability**.
## Вовлечённые репозитории
Samgr
[**systemabilitymgr_safwk**](https://gitee.com/openharmony/systemabilitymgr_safwk)
[systemabilitymgr_samgr](https://gitee.com/openharmony/systemabilitymgr_samgr)
[systemabilitymgr_safwk_lite](https://gitee.com/openharmony/systemabilitymgr_safwk_lite)
[systemabilitymgr_samgr_lite](https://gitee.com/openharmony/systemabilitymgr_samgr_lite)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )