Android studio中如何使用jni,并加载so文件

1、创建库.so

1 创建一个java接口文件,定义相关的接口函数,使用关键字native
2 创建完成之后使用jdk的工具 javah,命令如下:
	javah -classpath . -jni com.aijiao.test.JNIDemo
	
3 之后会生成一个.h文件,将此.h文件拷贝的对应的库目录下。
	如果编译的是dll库,换需要映入其他的两个.h文件(JDK目录的include目录下有一个jni.h的文件,include的win32目录下有个jni_md.h文件)
	如果编译的是so库,则不需要这两个.h文件。
	
	之后书写自己的代码,完成编译出库即可
	
4 以编译so库为例,继续向下
	建一个目录,将之前第二步编译出来的.h文件拷贝到当前目录。
	书写cpp或者c文件。
	书写Android.mk
	将以上的文件全部拷贝到项目的jni文件夹中,之后启动cmd,执行ndk-build就会生成对应的库文件。
	
5 so文件编译出来之后就可以加入到对应的android项目中了。生成的库文件需要放在main文件夹下面的jnilibs文件夹中,如果没有就自己新建一个。

加载so可能会遇到的问题:
1、"nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64,
/vendor/lib64, /system/lib64]]] couldn’t find “libxxxx.so”

需要将.so文件放到对应main下面的jnilibs文件夹中,如果没有就自己新建一个。

2、JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0xad661534

此错误是因为我们java中
使用的String类型,而在转换生成jni的时候会将其转换为jstring,而在使用C++的时候直接使用的是String或者std::string类型,这两个类型都不是
jstring类型。因此我们需要进行转换,jstring callStr = env->NewStringUTF(“xxxxxx”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值