JNI开发小经验

Jni开发在android开发中至关重要,下的linux上到android的java,他的角色至关重要。但开发入门级别的菜鸟就可能遇到好多问题。

下面我将给大家分享一些我在开发jni过程中的一些小经验,让大家可以快速解决一下实际开发中遇到问题。

1、针对java文件方法生成相应jni的.h头文件,

按照网上说的javac 然后javah 。。等命令发现有些问题,我的做法是

2、首先在Eclipse中新建相应java文件的过程,写好相应的方法,编译运行(会报错不过没关系,只要生成相应bin即可)

然后进入bin目录,执行调用:javah -classpath . -jni 包名.类名

我发现也只有这方法才可以正常生成h文件,其他网上方法都是会报错的


3、jni中编译.c和编译.cpp是不同的,.c下有一些函数完全可以编译过,但是在.cpp中就不一定可以编译过,

例如:.c下

让java层的string转换成c层的char*:const char *path = (*env)->GetStringUTFChars(env, string, 0);即可

但是在c++下是编译不过的:又必须写成const char *path = env->GetStringUTFChars(string, 0);

还有一些struct类型也必须在cpp下进行强制类型转换

4、针对apk加载jni生成的so会报/AndroidRuntime( 3179): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load。。。。的错,

下面我给出apk对so的一个加载过程:

在代码里,使用
System.loadLibrary("xxx");
就可以加载这个动态库了。
这里要注意,参数只写xxx就可以了,不需要写libxxx,也不需要写libxxx.so。
还有一点要说明,System.loadLibrary这个函数会在如下路径搜索libxxx.so文件:
/system/lib
/data/data/you apk package/lib

所以必须要保证你的so在这2个目录之一,记住不要将so集成到jar包里面,那样也会报出找不到的错,而你还一直认为已经集成了


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值