利用JNI来实现android与SO文件的交互.doc

利用JNI来实现android与SO文件的交互.doc

ID:51794600

大小:28.82 KB

页数:13页

时间:2020-03-15

利用JNI来实现android与SO文件的交互.doc_第1页
利用JNI来实现android与SO文件的交互.doc_第2页
利用JNI来实现android与SO文件的交互.doc_第3页
利用JNI来实现android与SO文件的交互.doc_第4页
利用JNI来实现android与SO文件的交互.doc_第5页
资源描述:

《利用JNI来实现android与SO文件的交互.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、利用JNI来实现android与SO文件的交互。该文档主要演示了android中如何与so文件进行交互。即现在的问题需要硬件厂商重新开发动态库,并按照全网物联生成的.h文件进行开发动态库。1、总体步骤为A、写好native本地java类B、生成.h文件。C、硬件厂商按.h文件开发动态库soD、Android中采用system.loadLib(‘*.so’)。E、调用本地native方法。全网物联研发人员需要用Handler独立进程去调用,不然会有问题。F、驱动硬件。2、教程:JNI提供了一种扩展Android功能和移植已有软件的方式。本文将通过一个实

2、例来讲述如何建立JNI库以及JNI库如何与android的JVM交互。Java接口定义java类JNIExampleInterface,该类提供了调用Native库中本地函数的接口。本地函数和对应的Java函数具有相互匹配的签名式(即,参数的类型和个数,以及返回值的类型)。获取本地库中对应的函数签名式的最简单的方法就是,首先写出对应的Java原型,然后使用javah工具生成对应的本地JNI头文件。可以copy/paste到C++文件中来实现对应的函数。本地函数支撑的对应的Java函数按照正常方式去声明,但需要加上native。我们还想演示如何在nat

3、ive代码中调用Java代码,因此我们的接口类定义如下:packageorg.wooyd.android.JNIExample;importandroid.os.Handler;importandroid.os.Bundle;importandroid.os.Message;importorg.wooyd.android.JNIExample.Data;publicclassJNIExampleInterface{privateHandlerh;

4、callback>}为什么要定义Handler呢?当本地库需要通过callback传递信息给Java进程,如果这个callback是由本地线程调用的,并且想修改应用的用户界面,就会产生exception。这是因为Android仅仅允许主线程更改用户界面。为了避免这个问题,我们使用Handler提供的消息传递接口将callback接收到的数据传递给主线程,让主线程去更改界面。publicJNIExampleInterface(Handlerh){this.h=h;}为了阐述不同的参数传递技术,我们定义了三个na

5、tive函数:callVoid():没有参数并且没有返回值;getNewData():有两个参数,用来构造一个新的类的实例;getDataString():用对象作为参数,从对象中抽取值。publicnativevoidcallVoid();publicnativeDatagetNewData(inti,Strings);publicnativeStringgetDataString(Datad);callback接收一个string参数,并将其封装成Bundle后分发给Handler:

6、callback>publicstaticvoidcallBack(Strings){Bundleb=newBundle();b.putString("callback_string",s);Messagem=Message.obtain();m.setData(b);m.setTarget(h);m.sendToTarget();}另外我们定义一个Datadummy类Data.javapackageorg.wooyd.android.JNIExample;publicclassData{publicinti;publicStrings;public

7、Data(){}publicData(inti,Strings){this.i=i;this.s=s;}}编译Data.java和JNIExampleInterface.java$javacorg/wooyd/android/JNIExample/*.java生成JNI头文件,包含与Java对应的本地函数的原型$javah-classpath.org.wooyd.android.JNIExample.JNIExampleInterface本地库的实现,这个地方就需要全网物联把这个.H文件给硬件厂商了,硬件厂商需要按照这个文件开发动态库。函数名必须一致

8、。<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。