Android程序如何调用C下写的函数
我现在要实现的功能是,在VS平台下用C写基于OpenCV的图像处理函数,在Eclipse下的Android程序中调用,譬如通过点击程序的一个按钮,然后把原图处理成加了某滤...
我现在要实现的功能是,在VS平台下用C写基于OpenCV的图像处理函数,在Eclipse下的Android程序中调用,譬如通过点击程序的一个按钮,然后把原图处理成加了某滤镜的,我知道opencv在android上直接有提供接口,但我不是要这个,我是要通过JNI实现,希望各位能提供一个完整的思路,需要用到什么工具,怎样做,主要的一个问题是Android下图像如Bitmap类,怎样可以让它能转变成OpenCV下,如IplImage结构体能兼容的类型???没有便捷的方法吗? 要转换成流的方式吗??对图像方面的只是也很陌生,希望也指点一下。。。
希望能给一个详细点的思路。现在思路很糊涂。。万分感谢。
分数不是重点,希望大家指点指点~谢谢 展开
希望能给一个详细点的思路。现在思路很糊涂。。万分感谢。
分数不是重点,希望大家指点指点~谢谢 展开
3个回答
2012-08-30
展开全部
用 jni。JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
http://blog.csdn.net/zhouyuanjing/article/details/7553706
http://blog.csdn.net/zhouyuanjing/article/details/7553706
追问
可否提供一个Windows下NDK的环境配置和Eclipse下配合使用NDK的文章,我找到的都配不好啊~还有,有关JNI的复杂一点的函数的参数处理问题的文章,麻烦也推荐一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用。
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在 Java 虚拟机 (VM)内部运行的 Java代码能够与用其它编程语言(如 C、C++和汇编语言)编写的应用程序和库进行交互操作。
由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。在执行Java类的过程中,如果Java类需要与C组件沟通时,VM就会去载入C组件,然后让Java的函数顺利地调用到C组件的函数。此时,VM扮演着桥梁的角色,让Java与C组件能通过标准的JNI介面而相互沟通。
在实际应用中这两者之间的调用关系可以归纳为以下四种方式:
1. 在应用的JAVA代码中调用NDK中C/C++实现的函数。
2. 在NDK开发中的C/C++代码调用应用中JAVA类的静态函数。
3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。
4. 在NDK开发中的C/C++代码调用应用中JAVA类新建实例的函数。
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在 Java 虚拟机 (VM)内部运行的 Java代码能够与用其它编程语言(如 C、C++和汇编语言)编写的应用程序和库进行交互操作。
由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。在执行Java类的过程中,如果Java类需要与C组件沟通时,VM就会去载入C组件,然后让Java的函数顺利地调用到C组件的函数。此时,VM扮演着桥梁的角色,让Java与C组件能通过标准的JNI介面而相互沟通。
在实际应用中这两者之间的调用关系可以归纳为以下四种方式:
1. 在应用的JAVA代码中调用NDK中C/C++实现的函数。
2. 在NDK开发中的C/C++代码调用应用中JAVA类的静态函数。
3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。
4. 在NDK开发中的C/C++代码调用应用中JAVA类新建实例的函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询