Android Studio下的NDK开发(二):参数传递
来源:互联网 发布:淘宝卖东西必须开店吗 编辑:程序博客网 时间:2024/06/05 10:59
1、接口的命名规则
在C中的命名方法,如图:
在java中与之对应的方法是
2、参数
由上面的代码可以看到,在C文件中,getStrng()函数有三个参数
JNIEnv:实际上代表了Java环境,可以通过它访问java中的变量和调用java中的方法;即可以通过它访问JniUntil类里面的内容;
jobject:如果native方法不是static的话,这个obj就代表这个native方法的类实例,如果native方法是static的话,这个obj就代表这个native方法的类的class对象实例;
jstring:对应getString()中的参数String str,在java中的String类型映射在C里是jstring。
3、java的类型在C/C++中的映射关系
Java类型 本地类型
boolean jboolean
byte jbyte
char jchar
short jshort
int jint
long jlong
float jfloat
double jdouble
void void
boolean jboolean
byte jbyte
char jchar
short jshort
int jint
long jlong
float jfloat
double jdouble
void void
4、使用参数
在java中定义一个参数实现加法功能,代码如下
public native int sum(int a,int b);
在C中定义接口,代码如下
JNIEXPORT jint JNICALL Java_com_jnidemo_JniUntil_sum (JNIEnv * env,jobject obj,jint a,jint b){ return a+b;}
编译好之后将.so文件拷贝到JniLibs中,在main中调用
TextView integer = (TextView) findViewById(R.id.int_text);until = new JniUntil();integer.setText(until.sum(5,7)+"");
运行结果如下:
4、参数传String对象
String在Java中常用的对象,但在C语言中并没有String这种数据类型,想要在C中使用String对象则需要使用到JNIEnv,在C中代码如下:
JNIEXPORT jstring JNICALL Java_com_jnidemo_JniUntil_getString (JNIEnv * env, jobject obj,jstring str){ //以UTF编码格式将jstrng对象转换成char型 char *a= (*env)->GetStringUTFChars(env, str, 0); //将char型转换回jstring返回给Java return (*env)->NewStringUTF(env,a);}
java中代码如下:
public native String getString(String str);
在Activity中调用:
TextView str = (TextView) findViewById(R.id.str_text);until = new JniUntil();str.setText(until.getString("心系一处守口如瓶"));
运行结果:
5、传数组参数
定义一个方法实现将整型数组的所有元素相加,在C中代码如下:
JNIEXPORT jint JNICALL Java_com_jnidemo_JniUntil_sumArray (JNIEnv *env,jobject obj,jintArray array){ int sum=0; //获取数组长度 jsize length=(*env)->GetArrayLength(env,array); //获取数组地址 jint *c_array=(*env)->GetIntArrayElements(env,array,0); for (int i=0;i<length;i++){ sum=sum+c_array[i]; } return sum;};
java中代码如下:
public native int sumArray(int array[]);
在Activity中调用:
TextView array = (TextView) findViewById(R.id.array_text);until = new JniUntil();int a[]=new int[]{1,2,3,4,5,6,7,8,9};array.setText(until.sumArray(a)+"");
运行结果:
6、源码链接
https://github.com/Hasagit/JniDemo_II.git
阅读全文
0 0
- Android Studio下的NDK开发(二):参数传递
- android studio下的NDK开发详解
- Android Studio下的ndk开发
- android studio下的ndk开发流程
- Android Studio下的ndk开发步骤
- android studio下的NDK开发详解
- Android Studio下的NDK开发
- Android NDK 开发(二)JNI 传递参数和返回值
- Android studio环境下的 NDK(jni)开发
- Android Studio下的NDK开发(一):环境配置
- android studio下ndk开发
- Android Studio下NDK开发
- android studio下ndk开发
- Android的NDK开发JNI传递参数和返回值
- Android Studio NDk-JNi开发(二)AS下开发流程
- Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发
- Android NDK开发 。Java层与Jni层的数组传递(二)
- android studio的ndk开发
- Calendar自然周
- JAVA 网络编程 基础
- Matlab cellfun函数
- java使 FileWriter FileReader 无编码格式,OutputStreamWriter InputStreamReader可设置编码格式
- Gradle错误(二)
- Android Studio下的NDK开发(二):参数传递
- 图像处理源代码
- IS-IS LSP分片扩展
- JavaScript中callee和caller的用法解读
- Ubuntu与Centos的Hadoop安装以及编译运行MapReduce,Hadoop集群安装配置教程
- SpringBoot 中文手册 --Part IV --30 使用NoSQL技术
- 简单代码实现TabLayout 条目的图文混排
- 基于 JAVA NIO 的socket通信
- Mac 常用命令行