2016-02-16 19:58 by 指针空间, 5120 阅读, 0 评论, 收藏, 编辑
Android中使用JNI七个步骤:
1.创建一个android工程
2.JAVA代码中写声明native 方法 public native String helloFromJNI();
3.用javah工具生成头文件
4. 创建jni目录,引入头文件,根据头文件实现c代码
5.编写Android.mk文件
6.Ndk编译生成动态库
7.Java代码load 动态库.调用native代码
Java调用C进行数据传递
这里分别传递整形、字符串、数组在C中进行处理。
声明native 方法:
- public class DataProvider {
- // 两个java中的int 传递c 语言 , c语言处理这个相加的逻辑,把相加的结果返回给java
- public native int add(int x ,int y);
- //把一个java中的字符串传递给c语言, c 语言处理下字符串, 处理完毕返回给java
- public native String sayHelloInC(String s);
- //把一个java中int类型的数组传递给c语言, c语言里面把数组的每一个元素的值 都增加5,
- //然后在把处理完毕的数组,返回给java
- public native int[] intMethod(int[] iNum);
- }
下面是生成的头文件,参数: JENEnv* 代表的是java环境 , 通过这个环境可以调用java的方法,jobject 表示哪个对象调用了 这个c语言的方法, thiz就表示的是当前的对象
[cpp] view plain copy
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* Header for class cn_itcast_ndk3_DataProvider */
- #ifndef _Included_cn_itcast_ndk3_DataProvider
- #define _Included_cn_itcast_ndk3_DataProvider
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: cn_itcast_ndk3_DataProvider
- * Method: add
- * Signature: (II)I
- */
- JNIEXPORT jint JNICALL Java_cn_itcast_ndk3_DataProvider_add
- (JNIEnv *, jobject, jint, jint);
- /*
- * Class: cn_itcast_ndk3_DataProvider
- * Method: sayHelloInC
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_cn_itcast_ndk3_DataProvider_sayHelloInC
- (JNIEnv *, jobject, jstring);
- /*
- *