嵌入式 Android 本地化接口(JNI)的使用

前言:之所以会发这篇博客是因为我现在刚好在学JNI,但是我使用的IDE是eclipse[我的电脑AS(Android Studio)使用起来不方便],遇到了许多问题都没有什么办法,还是百度了很久才有了点进展,所以想汇总一下,我遇到的问题,还是一样,有什么不对的地方可以直接邮箱找我,也可以在下面评论,我会去看的,有则改之无则加勉嘛。。。

之所以我要学习JNI是因为,我们的嵌入式安卓要控制板上的外设时,要使用C语言的代码作为控制代码,我们的JAVA可没有这么厉害可以直接去控制GPIO端口,所以只能在JAVA代码中使用JNI(JAVA Native Interface 本地化接口)来调用C语言代码,从而实现Android控制外设。PS. 这里的控制外设除了控制外设之外还有读数据的效果

开发环境:

eclipse:Oxygen          JDK:  JDK1.8           NDK:NDKr10            ADT:ADT24.1

一、开发环境的搭建

1.NDK的下载与使用

我的NDK(Native Develop Kit 本地化开发工具集)是直接在http://tools.android-studio.org/这个网址上下载的,因为eclipse最高只能支持NDKr10,所以就直接下了。但是我在其他一些博客上也有看到可以用更高级的NDK(可以直接在百度找就有啦),只是要做一些操作,我觉得太麻烦了就没弄了。想弄的话具体方法如下(我没试过不保证可以用):

首先将NDK解压出来,如果在解压后的首界面中找不到ndk-build(没有后缀名)时,说明你这个ndk是不能被eclipse识别的,就只能直接新建一个ndk-build不要后缀名的新文件,我觉得很不靠谱,所以就没用这个方法了,直接去下来低版本。

然后打开eclipse ,点击Window->Preference,然后如下图所示

嵌入式 Android 本地化接口(JNI)的使用_第1张图片

嵌入式 Android 本地化接口(JNI)的使用_第2张图片嵌入式 Android 本地化接口(JNI)的使用_第3张图片

点击Finish即可在你的项目中添加一个JNI文件夹。

然后点击Project->Properties进入界面

嵌入式 Android 本地化接口(JNI)的使用_第4张图片

然后在多出一个C的透视图,没有可以右击手动添加。点击后,就可以对你的项目进行Build和clean了。


二、在JNI开发时遇到的问题及解决方案

目前我也才刚开始学,就把我遇到的问题,写出来吧,我有空在过来补。

1.编译后生成的*.so文件没有加载到APK中

FATAL EXCEPTION: main java.lang.UnsatisfiedLinkError: Couldn't load hyphenate_av from loader dalvik.system.PathClassLoader[dexPath=/data/app/easemobim.test.com.easemobim-1.apk,libraryPath=/data/app-lib/easemobim.test.com.easemobim-1]: findLibrary returned null

大概是报这样的错误,我遇到的时候,找到的都是AS的解决方法,然后我觉得可能与so添加进的安卓系统版本有关,但是其他博客上说的添加一个新的文件,在将*.so复制进去就好了。我按照这样去做了,eclipse编译时把这个文件夹又清空了,没什么用,然后就去找了其他的方法,最后还是看到了下面这个,目前我写的时候还没看到(可能我找到不够多)能解决我这个问题的,所以我也不确定是不是这样弄,反正可以用就行。我的解决方法如下:

嵌入式 Android 本地化接口(JNI)的使用_第5张图片嵌入式 Android 本地化接口(JNI)的使用_第6张图片嵌入式 Android 本地化接口(JNI)的使用_第7张图片

然后在编译后就会产生这四个文件夹,里面都有*.so,之后就可以正常运行了。

2.在JAVA中引用的代码库名没写对

Caused by: java.lang.UnsatisfiedLinkError: Library Hell0 not found

把名字改过来就好了。

3.在C的代码中函数名字与Java中的对应不上

Caused by: java.lang.UnsatisfiedLinkError: hello_from_c

还是一样是名字的问题,改过来就好了。


最后:

我的邮箱就在copyright那里,有什么问题我们都可以讨论一下,相互学习嘛,后面如果我又遇到了新的问题,又被我解决的话,我会继续更新这里,希望我在这里写的东西能帮到我们。
 

你可能感兴趣的:(嵌入式)