1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-systemabilitymgr_safwk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

safwk

Введение

Компонент System Ability Framework (safwk) определяет, как реализовывать системные возможности в OpenHarmony, и предоставляет API для запуска и регистрации системных возможностей.

Архитектура системы

Рисунок 1 Архитектура safwk

Структура директорий

/foundation/systemabilitymgr
│── safwk                # Директория safwk
│  ├── bundle.json      # Описание и файл сборки safwk
│  ├── etc              # Конфигурационные файлы
│  ├── interfaces       # API, выставленные наружу
│  ├── services         # Реализация сервисов
│  ├── test             # Тестовые случаи

Использование

Доступные API

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C++ и 3 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/openharmony-systemabilitymgr_safwk.git
git@api.gitlife.ru:oschina-mirror/openharmony-systemabilitymgr_safwk.git
oschina-mirror
openharmony-systemabilitymgr_safwk
openharmony-systemabilitymgr_safwk
master