鸿蒙HarmonyOS应用开发之NativeBundle开发指导

news2025/4/19 9:06:24

场景介绍

开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native Bundle接口获取应用自身相关信息。

接口说明

开发步骤

1. 创建工程

2. 添加依赖

创建完成后,IDE会在工程生成cpp目录,目录有libentry/index.d.ts、hello.cpp、CMakeLists.txt等文件。

  1. 打开src/main/cpp/CMakeLists.txt,在target_link_libraries依赖中添加包管理的libbundle_ndk.z.so。
target_link_libraries(entry PUBLIC libace_napi.z.so libbundle_ndk.z.so)
  1. 打开src/main/cpp/hello.cpp文件,添加头文件。
#include "bundle/native_interface_bundle.h"

3. 修改源文件

  1. 打开src/main/cpp/hello.cpp文件,文件Init会对当前方法进行初始化映射,这里定义对外接口为getCurrentApplicationInfo。
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. 把src/main/cpp/hello.cpp文件中,增加对应的方法,如下所示:
static napi_value GetCurrentApplicationInfo(napi_env env, napi_callback_info info)
  1. 在hello.cpp文件中获取Native的包信息对象,并转为js的包信息对象,即可在js测获取应用的信息:
static napi_value GetCurrentApplicationInfo(napi_env env, napi_callback_info info)
{
    // 调用Native接口获取应用信息
    OH_NativeBundle_ApplicationInfo nativeApplicationInfo = OH_NativeBundle_GetCurrentApplicationInfo();
    napi_value result = nullptr;
    napi_create_object(env, &result);
    // Native接口获取的应用包名转为js对象里的bundleName属性
    napi_value bundleName;
    napi_create_string_utf8(env, nativeApplicationInfo.bundleName, NAPI_AUTO_LENGTH, &bundleName);
    napi_set_named_property(env, result, "bundleName", bundleName);
    // Native接口获取的指纹信息转为js对象里的fingerprint属性
    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();
    // Native接口获取的appId转为js对象里的appId属性
    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();
    // Native接口获取的appIdentifier转为js对象里的appIdentifier属性
    napi_value napi_appIdentifier;
    napi_create_string_utf8(env, appIdentifier, NAPI_AUTO_LENGTH, &napi_appIdentifier);
    napi_set_named_property(env, result, "appIdentifier", napi_appIdentifier);
    // 最后为了防止内存泄漏,手动释放
    free(nativeApplicationInfo.bundleName);
    free(nativeApplicationInfo.fingerprint);
    free(appId);
    free(appIdentifier);
    return result;
}

4. js侧调用

  1. 打开src\main\ets\pages\index.ets, 导入"libentry.so"。

  2. 调用Native接口getCurrentApplicationInfo即可获取应用信息。示例如下:

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%')
    }
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1565520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能,看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 做过isp的同学都知道,图像处理里面有一个3A,即自动曝光、自动白平衡和自动对焦。其中自动对焦这个,就需要用输入…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看自己网站上的文章时,看到了曾经开发的电商系统。那是在2020年,来到小米两年后,我已经对各个业务线,各种专业知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己的技术。…

【数论】莫比乌斯反演(欧拉反演)进阶-杜教筛

文章目录 前言 回忆 题集12 杜教筛例题 前言 这里需要对莫反有一些基础。 不会的可以点这里 回忆 f ( n ) ∑ d ∣ n g ( d ) → g ( n ) ∑ d ∣ n f ( d ) μ ( n d ) f(n)\sum_{d|n}g(d)\rightarrow g(n)\sum_{d|n}f(d)\mu(\frac{n}{d}) f(n)∑d∣n​g(d)→g(n)∑d∣n​…

vue3+eachrts饼图轮流切换显示高亮数据

<template><div class"charts-box"><div class"charts-instance" ref"chartRef"></div>// 自定义legend 样式<div class"charts-note"><span v-for"(items, index) in data.dataList" cla…

unity之 “Allow ‘unsafe‘ code“ 在哪里。

导入unity中的代码&#xff0c;出现如下错误&#xff0c;该如何解决&#xff1f; Unsafe code may only appear if compiling with /unsafe. Enable "Allow unsafe code" in Player Settings to fix this error 解决这个问题&#xff0c;只需要设置就可以。 设置的地…

【苍穹外卖】log爆红

使用了Slf4j注解&#xff0c;用于自动生成一个log对象&#xff0c;相当于private final Logger log LoggerFactory.getLogger(当前类名.class); 这个注解需要安装Lombok插件才能使用。 IDEA file—settings–plugins&#xff0c;搜索lombok–install。安装完后自动重启IDEA后…

【WEEK6】 【DAY2】DQL Data Querying - Part Two 【English Version】

2024.4.2 Tuesday Following the previous article 【WEEK6】 【DAY1】DQL Data Query - Part One【English Version】 Contents 4.4. Join Queries4.4.1. JOIN Comparison4.4.2. Seven Types of JOINs4.4.3. Examples4.4.3.1. In this example, the results of INNER JOIN and…

DLL导出API注意事项

文章目录 问题原则示例一解决方案 示例二解决方法 参考 问题 在 windows 平台下&#xff0c;如果在动态库的接口中使用 std::string 或其它 std 容器&#xff0c;会导致崩溃或其它内存问题&#xff0c;所以一般要求动态库的接口必须是 C 语言实现。 原则 一个原则&#xff1a;…

LabVIEW专栏二、调用子VI

该节目标是创建带子vi&#xff0c;修改vi属性&#xff0c;测试可重入和不可重入的区别 一 、设置子VI 把VI封装成为子VI&#xff0c;可以帮助模块化程序&#xff0c;简化代码结构。 任何VI本身都可以成为别的VI的子VI。 1.1、设置输入输出端子 1、在前面板空白处&#xff0…

JavaScript中什么叫深拷贝?

在 JavaScript 中&#xff0c;深拷贝指的是创建一个新的对象&#xff0c;这个新的对象与原始对象完全独立&#xff0c;没有任何共享的属性或者数据&#xff0c;它们不共享同一块内存地址。深拷贝会复制原始对象的所有属性和嵌套对象的所有属性&#xff0c;包括嵌套对象中的属性…

Mybatis——查询数据

查询操作 根据用户id查询单条记录&#xff0c;在映射器接口(UserMapper)中定义如下方法&#xff1a; package org.example.mapper;import org.example.demo.User;import java.util.List;public interface UserMapper {//根据id查询UserUser selectUserById(Integer userId); …

使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

在物联网&#xff08;IoT&#xff09;背景下&#xff0c;处理实时数据会遇到一些特定的障碍&#xff0c;如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战&#xff0c;需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理…

【升降自如】OLED升降透明屏,智能调节,打造个性化观影体验

OLED升降透明屏&#xff0c;作为科技领域的创新之作&#xff0c;以其升降自如、智能调节的特点&#xff0c;为用户带来了前所未有的个性化观影体验。 这款透明屏采用先进的OLED显示技术&#xff0c;不仅色彩鲜艳、对比度高&#xff0c;而且具备出色的透明性能。更值得一提的是&…

3D人脸扫描技术与数字人深度定制服务:赋能打造超写实3D数字分身

在数字时代&#xff0c;3D数字分身有着广泛的应用场景&#xff0c;在动画视频、广告宣传片、大型活动主持人、AI交互数字人等领域&#xff0c;发挥着重要的商业价值。其中&#xff0c;3D人脸扫描技术&#xff0c;推动了超写实3D数字分身的诞生。 公司案例 2023海心沙元宇宙音乐…

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…

[中级]软考_软件设计_计算机组成与体系结构_06_ 流水线技术

流水线技术 前言相关考试考点一&#xff1a;流水线执行时间概念流水线步骤解析参数计算案例解析&#xff1a;流水线计算第一问第二问 考点二&#xff1a;流水线吞吐率 前言 第一章比较重要的一种计算题型&#xff0c;经常考到&#xff0c;一般考试1 ~ 2分。 相关考试 流水线…

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;FA Hashim等人受到自然界中蜜獾狩猎行为启发&#xff0c;提出了蜜獾算法&#xff08;(Honey Badger Algorithm&#xff0c;HBA&#xff09;。 2.算法原理 2.1算法思想 蜜獾以其…

文献速递:深度学习胰腺癌诊断--深度学习算法用于从疾病轨迹预测胰腺癌风险

文献速递&#xff1a;深度学习胰腺癌诊断--深度学习算法用于从疾病轨迹预测胰腺癌风险 麦田医学 美好事物中转站 2024-04-02 14:36 Title 题目 A deep learning algorithm to predict risk of pancreatic cancer from disease trajectories 深度学习算法用于从疾病轨迹预测…

WPF-基础及进阶扩展合集(持续更新)

目录 一、基础 1、GridSplitter分割线 2、x:static访问资源文件 3、wpf触发器 4、添加xaml资源文件 5、Convert转换器 6、多路绑定与多路转换器 二、进阶扩展 1、HierarchicalDataTemplate 2、XmlDataProvider从外部文件获取源 3、TextBox在CellTemplate中的焦点问题…