在鸿蒙应用ArkTS开发中如何声明和使用JNI? 原创

HMOS_Professor
发布于 2025-3-31 16:16
1507浏览
0收藏

在鸿蒙应用 ArkTS 开发里,ArkTS 是一种新的开发语言,本身不直接支持传统意义上像 Java 那样的 JNI(Java Native Interface)。不过,可以借助 Native API 来实现类似功能,也就是在 ArkTS 里调用 C/C++ 编写的本地代码。以下是详细步骤:

  1. 环境准备
    确保已经安装好 DevEco Studio,并且配置好了 HarmonyOS SDK 和 NDK(Native Development Kit)。
    创建一个新的 ArkTS 项目或者打开已有的项目。

  2. 编写 C/C++ 本地代码
    在项目的entry/src/main/cpp目录下创建 C/C++ 源文件和头文件。例如,创建native-lib.cpp和native-lib.h。

native-lib.h

#ifndef NATIVE_LIB_H
#define NATIVE_LIB_H

extern "C" {
// 声明一个简单的本地函数
int add(int a, int b);
}

#endif //NATIVE_LIB_H
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

native-lib.cpp

#include "native-lib.h"

// 实现本地函数
extern "C" int add(int a, int b) {
    return a + b;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 配置 CMakeLists.txt
    在entry模块下找到CMakeLists.txt文件,对其进行配置以编译 C/C++ 代码。
cmake_minimum_required(VERSION 3.10.2)

# 设置项目名称
project("MyNativeApp")

# 添加本地源文件
add_library( # 库的名称
             native-lib
             # 库的类型,这里是共享库
             SHARED
             # 本地源文件的路径
             native-lib.cpp )

# 查找系统库
find_library( # 库的名称
              log-lib
              # 系统库的名称
              log )

# 链接库
target_link_libraries( # 目标库
                       native-lib
                       # 链接系统库
                       ${log-lib} )
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  1. 在 ArkTS 中声明和使用本地函数
    在 ArkTS 文件里,使用@ohos.ability.featureability模块中的NativeLibrary类来加载和调用本地库。
import { NativeLibrary } from '@ohos.ability.featureability';

// 加载本地库
const library = new NativeLibrary();
const libraryName = 'native-lib'; // 与CMakeLists.txt中设置的库名称一致
const result = library.load(libraryName);

if (result) {
    console.log('成功加载本地库');
    // 声明并调用本地函数
    const addFunction = library.getFunction('add', 'int', ['int', 'int']);
    if (addFunction) {
        const a = 3;
        const b = 5;
        const sum = addFunction(a, b);
        console.log(`3 + 5 的结果是: ${sum}`);
    } else {
        console.log('未找到本地函数');
    }
} else {
    console.log('加载本地库失败');
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  1. 注意事项
    函数签名:在调用getFunction方法时,要确保函数名和参数类型签名准确无误。
    错误处理:在加载库和调用函数时,要进行错误处理,避免应用崩溃。
    兼容性:要保证 C/C++ 代码和目标设备的 CPU 架构、操作系统版本兼容。

通过以上步骤,你就能在鸿蒙应用 ArkTS 开发中实现类似 JNI 的功能,调用 C/C++ 编写的本地代码了。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2025-3-31 16:20:50修改
收藏
回复
举报


回复
    相关推荐