使用JNI实现Java与C之间传递数据

本文详细介绍了在Android环境中如何使用JNI进行Java与C之间的数据传递,包括整型、字符串、数组的传递,并展示了C代码如何处理这些数据。通过七个步骤,从创建工程到调用C代码,讲解了完整的JNI实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

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 方法:

  1. public class DataProvider {  
  2.     // 两个java中的int 传递c 语言 ,  c语言处理这个相加的逻辑,把相加的结果返回给java  
  3.     public native int add(int x ,int y);  
  4.       
  5.     //把一个java中的字符串传递给c语言, c 语言处理下字符串, 处理完毕返回给java   
  6.     public native String sayHelloInC(String s);  
  7.   
  8.     //把一个java中int类型的数组传递给c语言, c语言里面把数组的每一个元素的值 都增加5,   
  9.     //然后在把处理完毕的数组,返回给java  
  10.     public native int[] intMethod(int[] iNum);   
  11. }  

下面是生成的头文件,参数: JENEnv* 代表的是java环境 , 通过这个环境可以调用java的方法,jobject 表示哪个对象调用了 这个c语言的方法, thiz就表示的是当前的对象

[cpp] view plain copy

 

  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class cn_itcast_ndk3_DataProvider */  
  4.   
  5. #ifndef _Included_cn_itcast_ndk3_DataProvider  
  6. #define _Included_cn_itcast_ndk3_DataProvider  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. /* 
  11.  * Class:     cn_itcast_ndk3_DataProvider 
  12.  * Method:    add 
  13.  * Signature: (II)I 
  14.  */  
  15. JNIEXPORT jint JNICALL Java_cn_itcast_ndk3_DataProvider_add  
  16.   (JNIEnv *, jobject, jint, jint);  
  17.   
  18. /* 
  19.  * Class:     cn_itcast_ndk3_DataProvider 
  20.  * Method:    sayHelloInC 
  21.  * Signature: (Ljava/lang/String;)Ljava/lang/String; 
  22.  */  
  23. JNIEXPORT jstring JNICALL Java_cn_itcast_ndk3_DataProvider_sayHelloInC  
  24.   (JNIEnv *, jobject, jstring);  
  25.   
  26. /* 
  27.  * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值