# Native Bundle Development
## When to Use
Use the native bundle APIs to obtain application information.
## Available APIs
| API | Description |
| :----------------------------------------------------------- | :--------------------------------------- |
| [OH_NativeBundle_GetCurrentApplicationInfo](../reference/apis-ability-kit/_bundle.md#oh_nativebundle_getcurrentapplicationinfo) | Obtains the information about the current application. |
| [OH_NativeBundle_GetAppId](../reference/apis-ability-kit/_bundle.md#oh_nativebundle_getappid) | Obtains the appId information about the current application.|
| [OH_NativeBundle_GetAppIdentifier](../reference/apis-ability-kit/_bundle.md#oh_nativebundle_getappidentifier) | Obtains the appIdentifier information about the current application.|
## How to Develop
1. **Create a project.**
2. **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**.
1. Open the **src/main/cpp/CMakeLists.txt** file, and add **libbundle_ndk.z.so** to **target_link_libraries**.
```c++
target_link_libraries(entry PUBLIC libace_napi.z.so libbundle_ndk.z.so)
```
2. Open the **src/main/cpp/hello.cpp** file, and add the header file.
```c++
#include "bundle/native_interface_bundle.h"
```
3. **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
```
1. Add the API to the **src/main/cpp/hello.cpp** file.
```c++
static napi_value GetCurrentApplicationInfo(napi_env env, napi_callback_info info)
```
2. 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.
```c++
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;
}
```
4. **Call APIs on the JavaScript side.**
1. Open the **src\main\ets\pages\index.ets** file, and import **libentry.so**.
2. Call the native API **getCurrentApplicationInfo()** to obtain application information. An example is as follows:
```js
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](../reference/apis-ability-kit/_bundle.md).