比较简单,大家可以参考案例1的工程创建流程(此处就不再重复截图了)
3、创建Harmony os Library Module大家直接下一步就好(此处就不再截图了)。
4、修改entry deviceType类型(改成phone)将entry下的.cxx目录和cpp目录拖拽到 libnative module中的相同位置:
将entry下的build.gradle中 native 编译脚本拷贝至 libnative module中相同位置:
为了加深大家理解,此处不再使用默认的hello.cpp了,咱们实现一个简单的JNI开发:
新建TestNative类,定义native方法,如下图:
通过DevEco-Studio的命令工具Terminal,进入java目录,创建头文件:
执行命令: 进入module目录: cd libnative/src/main/java/ 根据native方法生成头文件:javah -jni xxxx(包名).类名将头文件拷贝到cpp目录下,然后,右键cpp目录,创建头文件对应的实现类:
此时,我们libnative module库的功能已经实现了,可以生成so库给其他工程使用了。
我们需要先让libnative被entry依赖,这样运行app时,才会自动加载libnative,从而执行其build.gradle中的native build配置,生成so库。
entry依赖libnative,我们可以在entry的build.gradle中进行配置:
运行app后,查看libnative module下,生成了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代码):
我们将libnative中的so库、har拷贝到entry的libs目录下: