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之间的接口竟可能集中,最好能用一个对象来管理.
接下来就是进行参数传递的测试了,这是我想要的...
参考教程《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之间的接口竟可能集中,最好能用一个对象来管理.
接下来就是进行参数传递的测试了,这是我想要的...
相关文章推荐
- Cocos2d-x3.3RC0通过JNI调用Android的Java层代码,实现分享功能
- Android底层调用C代码(JNI实现)
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
- android调用本地C/C++代码,jni的实现
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- android的HAL第一种调用hal方法中的JNI代码的实现:
- Android Studio Jni开发(二)实现Native调用java方法和Native调用Android API
- Android开发 调用照相机实现代码和注意事项
- JNI开发第二篇通过反射实现C中调用java代码,并实现Log打印日志
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- vlc-android 中调用用libvlcjni.so实现流媒体播放
- Android JNI简单实例(Android java调用C/C++代码)
- Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用
- android j使用JNI实现ava语言调用C语言
- android 指纹识别调用实现方法及示例代码
- Android JNI简单实例(android 调用C/C++代码)
- Android App应用调用已安装市场,进行软件评分的功能代码实现
- android的HAL第一种调用hal方法中的APP层代码的实现:
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码