您的位置:首页 > 移动开发 > Android开发

android JNI 实现C代码调用

2013-08-28 10:59 183 查看
由于android项目中要使用C写的代码,因此也就需要用到JNI,首先想到就是用NDK方式显现。

参考教程《Android应用开发揭秘》,这是我的入门教程,觉得不错。不过今天还是要鄙视下,2011版但有些内容却太旧了。

首先参考教程搭建NDK环境

Eclipse 早已完成

Cygwin 说是window下需要的

NDK

NDK方便,官网下个解压就OK了,Cygwin就头大了,一对功能选项不知道该选什么,搞多次不成功,后来还是群里朋友提醒新NDK已经不用Cygwin了,一查果然自NDK-r7以来就不用了,而我下的是NDK-r9。下了8G的垃圾Cygwin,不管了直接baidu个 NDK-build.cmd 有不少介绍如何针对NDK-r7以上如何进行配置(不在重复)。

配置完后把NDK下jni文件夹下的两个文件拷贝到自己的工程的jni文件夹中,编译生成:libhello-jni.so文件

运行错误

- 找不到libhello-jin库文件

baidu下原因,原来如果使用system.loadLibrary("xxx");参数中不能有lib

如果用system.load加载需要用绝对路径(没有测试),立马去掉参数中的lib,库正常载入。感觉优点弱智

- 找不到函数

继续baidu看他人用例,感觉是接口命名问题,接口命名如下:

java_com_example_hellojni_mytest_stringFromJNI(JNIEnv* env, jobject thiz )

java:头 固定不变

com_example_hellojin:包名

mytest:类名

调用是时可以通过对象调用如:mytest test = new mytest();

test.stringFromJNI()

也可以直接调用如:stringFromJNI

有什么区别????未知

这样看来感觉库加载后并不属于整个工程,而只属于某一个对象,而其他对象如果也想使用该接口时必须自己去加载,这也就要求java与C之间的接口竟可能集中,最好能用一个对象来管理.

接下来就是进行参数传递的测试了,这是我想要的...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: