NAPI (Native API) — это набор встроенных сред разработки расширений модулей в системе OpenHarmony. Он разработан на основе спецификации Node.js N-API и предоставляет разработчикам возможность взаимодействовать друг с другом между модулями JavaScript и C/C++. . Как показано ниже:
Ценность этого механизма для развития системы Хунмэн имеет два аспекта:
В этой статье на примере Hello world будет продемонстрирован процесс разработки проекта NAPI в DevEco Studio.
В этом примере используется версия IDE DevEco Studio 3.0. Нам необходимо загрузить версию DevEco Studio 3.0 с официального сайта. Для установки и использования DevEco Studio обратитесь к Руководству пользователя DevEco Studio.
После загрузки и установки инструмента DevEco Studio нам необходимо загрузить OpenHarmony SDK. Конкретные шаги следующие (более подробную информацию см. в разделе Настройка среды разработки, используемой DevEco Studio):
После скачивания и настройки SDK можем приступить к созданию. проект. DevEco Studio уже поставляется с Native C++ Привет шаблон, нам нужно только создать новый проект этого шаблона.
После создания нового проекта исходный код hello.cpp, реализующий интерфейс napi, находится в каталоге вход/src/main/cpp проекта.
Сначала определите модуль, соответствующая структура — napi_module, укажите имя модуля, соответствующее текущему модулю NAPI, и функцию обработки для зарегистрированного внешнего интерфейса модуля. Конкретный расширенный интерфейс объявлен в этой функции и будет объяснен позже. После определения модуля вызовите функцию регистрации модуля napi_module_register(napi_module* mod), предоставляемую NAPI, чтобы зарегистрировать его в системе.
static napi_module demoModule = {
.nm_version =1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = Init,
.nm_modname = "hello",
.nm_priv = ((void*)0),
.reserved = { 0 },
};
extern "C" __attribute__((constructor)) void RegisterHelloModule(void)
{
napi_module_register(&demoModule);
}
Структура napi_property_descriptor объявляет соответствующий интерфейс в napi, как показано ниже. Add соответствует собственному интерфейсу C++, а его интерфейс на стороне приложения соответствует add. napi связывает два интерфейса в структуре napi_property_descriptor через интерфейс napi_define_properties и экспортирует их. через переменную экспорта, чтобы уровень приложения мог вызвать метод add.
static napi_value Init(napi_env env, napi_value exports)
{
napi_property_descriptor desc[] = {
{ "getHelloString", nullptr, getHelloString, nullptr, nullptr, nullptr,
napi_default, nullptr }
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
Ниже приведен код бизнес-реализации интерфейса getHelloString:
static napi_value getHelloString(napi_env env, napi_callback_info info) {
napi_value result;
std::string words = "Hello Napi";
if (napi_create_string_utf8(env, words.c_str(), words.length(), &result) != napi_ok) {
return nullptr;
}
return result;
}
На этом этапе мы экспортировали интерфейс Napi, который может вызываться со стороны приложения.
Во-первых, прежде чем вызывать napi, нам нужно импортировать библиотеку napi:
import testNapi from "libentry.so"
После импорта библиотеки мы можем напрямую вызвать соответствующий интерфейс Napi через импортированные переменные:
testNapi.getHelloString();
После создания проекта система по умолчанию генерирует текстовую область hello world в файле index.ets (в каталоге входа/src/main/ets/pages проекта), и, щелкнув текстовую область, napi getHelloString можно назвать Интерфейсом, код выглядит следующим образом:
import testNapi from "libentry.so"
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.message = testNapi.getHelloString()
console.log("Test NAPI get string : " + this.message);
})
}
.width('100%')
}
.height('100%')
}
}
В это время инструмент DevEco Studio сообщит, что интерфейс getHelloString не определен. Нам нужно добавить определение этого интерфейса в соответствующий файл index.d.ts (в записи/src/main/cpp/types/libentry). директория проекта):
export const getHelloString: () => string;
До сих пор,Реализация исходного код готов, можем пройти на Дев Эко. Встройте параметр «Сборка» в инструменте Studio. Удалось(а) скомпилировать.
Шаги по установке приложения на макетную плату с помощью инструмента DevEco Studio:
Подключите макетную плату к компьютеру, и инструмент автоматически распознает устройство, как показано ниже.
При первой установке приложения на устройство требуется настройка подписи, иначе его невозможно установить. Конкретные этапы подписания:
После настройки подписи мы можем напрямую нажать DevEco. Кнопка «Выполнить» в инструменте Studio для настройки и запуститьприменено
приложение Установите и После запуске, на доске мы видим Hello в центре экрана. Отображается мир, и мы нажимаем «Привет». Мир можно найти в DevEco Соответствующую информацию об отлаживании можно просмотреть в окне журнала инструмента Studio.
Потому что информация об отлаживании системы также отображается в окне журнала.,и большое количество информации,Нам неудобно проверять нашу отлаживать информацию,Таким образом, мы можем установить информацию о фильтре в окне журнала.,Пусть в окне будет отображаться только информация по отфильтрованным ключевым словам.
Если вы считаете, что этот контент вам очень полезен, я хотел бы предложить вам оказать мне три небольшие услуги.: