鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用) (2)

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

比较简单,大家可以参考案例1的工程创建流程(此处就不再重复截图了)

3、创建Harmony os Library Module

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

大家直接下一步就好(此处就不再截图了)。

4、修改entry deviceType类型(改成phone)

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

5、拷贝文件

将entry下的.cxx目录和cpp目录拖拽到 libnative module中的相同位置:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

将entry下的build.gradle中 native 编译脚本拷贝至 libnative module中相同位置:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

6、新建类定义native方法

为了加深大家理解,此处不再使用默认的hello.cpp了,咱们实现一个简单的JNI开发:
新建TestNative类,定义native方法,如下图:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

通过DevEco-Studio的命令工具Terminal,进入java目录,创建头文件:

执行命令: 进入module目录: cd libnative/src/main/java/ 根据native方法生成头文件:javah -jni xxxx(包名).类名

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

将头文件拷贝到cpp目录下,然后,右键cpp目录,创建头文件对应的实现类:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

7、修改CmakeList.txt # the minimum version of CMake. cmake_minimum_required(VERSION 3.4.1) project(TestNative) add_library(native SHARED testnative.cpp) target_link_libraries(native) 8、生成so库

此时,我们libnative module库的功能已经实现了,可以生成so库给其他工程使用了。

我们需要先让libnative被entry依赖,这样运行app时,才会自动加载libnative,从而执行其build.gradle中的native build配置,生成so库。

entry依赖libnative,我们可以在entry的build.gradle中进行配置:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

运行app后,查看libnative module下,生成了so库:

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

9、生成的so库,怎么提供给其他工程使用呢?

也很简单,JNI主要包含了两部分内容:定义的native方法的Java类(Java代码中调用so库的入口)、native方法的实现类,我们只需要将这两部分提供给他们就可以了:

1、定义的native方法的Java类:提供libnative的har包即可(给第三方时,一般不提供源码) 2、native方法的实现类:提供so库文件即可

测试:
我们简单点,直接把so库、har提供给我们工程的entry进行测试即可,不再新建工程了(因为,我比较懒,哈哈):
首先,我们先取消entry build.gradle中依赖libnative的配置(防止重复依赖,因为:har已包含了libnative的Java代码):

鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

我们将libnative中的so库、har拷贝到entry的libs目录下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjzsf.html