harmony 鸿蒙Native Bundle Development
Native Bundle Development
When to Use
Use the native bundle APIs to obtain application information.
Available APIs
API | Description |
---|---|
OH_NativeBundle_GetCurrentApplicationInfo | Obtains the information about the current application. |
OH_NativeBundle_GetAppId | Obtains the appId information about the current application. |
OH_NativeBundle_GetAppIdentifier | Obtains the appIdentifier information about the current application. |
How to Develop
- Create a project.

- Add dependencies.
After the project is created, the cpp directory is created in the project directory. The directory contains files such as libentry/index.d.ts, hello.cpp, and CMakeLists.txt.
Open the src/main/cpp/CMakeLists.txt file, and add libbundle_ndk.z.so to target_link_libraries.
target_link_libraries(entry PUBLIC libace_napi.z.so libbundle_ndk.z.so)
Open the src/main/cpp/hello.cpp file, and add the header file.
#include "bundle/native_interface_bundle.h"
Modify the source file.
When the src/main/cpp/hello.cpp file is opened, Init is called to initialize the API, which is getCurrentApplicationInfo.
```c++
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
napi_property_descriptor desc[] = {
{ "getCurrentApplicationInfo", nullptr, GetCurrentApplicationInfo, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END
```
Add the API to the src/main/cpp/hello.cpp file.
static napi_value GetCurrentApplicationInfo(napi_env env, napi_callback_info info)
Obtain the native bundle information object from the hello.cpp file and convert it to a JavaScript bundle information object. In this way, you can obtain the application information on the JavaScript side.
static napi_value GetCurrentApplicationInfo(napi_env env, napi_callback_info info) { // Call the native API to obtain the application information. OH_NativeBundle_ApplicationInfo nativeApplicationInfo = OH_NativeBundle_GetCurrentApplicationInfo(); napi_value result = nullptr; napi_create_object(env, &result); // Convert the bundle name obtained by calling the native API to the bundleName attribute in the JavaScript object. napi_value bundleName; napi_create_string_utf8(env, nativeApplicationInfo.bundleName, NAPI_AUTO_LENGTH, &bundleName); napi_set_named_property(env, result, "bundleName", bundleName); // Convert the fingerprint information obtained by calling the native API to the fingerprint attribute in the JavaScript object. napi_value fingerprint; napi_create_string_utf8(env, nativeApplicationInfo.fingerprint, NAPI_AUTO_LENGTH, &fingerprint); napi_set_named_property(env, result, "fingerprint", fingerprint); char* appId = OH_NativeBundle_GetAppId(); // Convert the application ID obtained by calling the native API to the appId attribute in the JavaScript object. napi_value napi_appId; napi_create_string_utf8(env, appId, NAPI_AUTO_LENGTH, &napi_appId); napi_set_named_property(env, result, "appId", napi_appId); char* appIdentifier = OH_NativeBundle_GetAppIdentifier(); // Convert the application identifier obtained by calling the native API to the appIdentifier attribute in the JavaScript object. napi_value napi_appIdentifier; napi_create_string_utf8(env, appIdentifier, NAPI_AUTO_LENGTH, &napi_appIdentifier); napi_set_named_property(env, result, "appIdentifier", napi_appIdentifier); // To prevent memory leak, manually release the memory. free(nativeApplicationInfo.bundleName); free(nativeApplicationInfo.fingerprint); free(appId); free(appIdentifier); return result; }
Call APIs on the JavaScript side.
Open the src\main\ets\pages\index.ets file, and import libentry.so.
Call the native API getCurrentApplicationInfo() to obtain application information. An example is as follows:
import hilog from '@ohos.hilog'; 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) Button(){ Text("GetCurrentApplicationInfo").fontSize(30) }.type(ButtonType.Capsule) .margin({ top: 20 }) .backgroundColor('#0D9FFB') .width('70%') .height('5%') .onClick(()=>{ try { let data = testNapi.getCurrentApplicationInfo(); console.info("getCurrentApplicationInfo success, data is " + JSON.stringify(data)); } catch (error) { console.error("getCurrentApplicationInfo failed"); this.message = "getCurrentApplicationInfo failed"; } }) } .width('100%') } .height('100%') } }
For details about the APIs, see Bundle.
你可能感兴趣的鸿蒙文章
harmony 鸿蒙Building an NDK Project with CMake
harmony 鸿蒙Building an NDK Project with the DevEco Studio Template
harmony 鸿蒙NDK Project Building Overview
harmony 鸿蒙Building an NDK Project with Prebuilt Libraries
harmony 鸿蒙C/C++ Library Mechanisms
harmony 鸿蒙Creating an NDK Project
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦