JNI中C和java传递数组
来源:互联网 发布:淘宝网支付方式 编辑:程序博客网 时间:2024/04/30 14:48
MainActivity
package com.example.arraydeliver;import android.app.Activity;import android.app.ActionBar;import android.app.Fragment;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import android.os.Build;public class MainActivity extends Activity {byte[] a=new byte[]{0x32,0x33,0x34,'\0'};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv= new TextView(this);tv.setText(stringFromJNI(a));setContentView(tv);}public native static String stringFromJNI(byte[] a);static {System.loadLibrary("hello-jni");}}Native.c
#include <string.h>#include <jni.h>#include <stdlib.h>typedef unsigned char byte;JNIEXPORT jstring JNICALL Java_com_example_arraydeliver_MainActivity_stringFromJNI( JNIEnv* env,jobject thiz ,jbyteArray j){jbyte *temp=(*env)->GetByteArrayElements(env,j,0);char *x=(char *)temp;return (*env)->NewStringUTF(env,x+sizeof(x));}
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := Native.cinclude $(BUILD_SHARED_LIBRARY)
注意:在Native.c中的GetByteArrayElements其实是获取java中的数组指针,所以在使用完后记得要释放(*env)->ReleaseByteArrayElements(env,j,temp,0)
注意2:C和C++中有些参数略有不同:C++中直接传入env->引用,C中则需要(×env)->,在C中jbyte *temp=(*env)->GetByteArrayElements(env,j,0);
而在C++中则jbyte *temp=env->GetByteArrayElements(j,0);
0 0
- JNI中C和java传递数组
- jni中c++给java传递数组
- JNI基础(五)java调C,并且传递数组
- Android JNI 把Java数组传递给C
- JAVA->JNI 传递字符串数组
- 通过JNI在JAVA与C程序中传递参数
- JNI中java传递各类型参数给C
- JNI学习2 C和Java参数传递
- JNI java和c之间对象的传递
- JNI:在java和c之间进行数据传递
- JNI:在java和c之间进行数据传递
- 在java和c之间进行数据传递 之 JNI
- jni数组使用及将C的char数组传递给Java
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- 大数据技术发展的两大方向和最新进展
- 处理eclipse导入svn后的错误: 找不到或无法加载主类
- 理解Ride是如何控制Robot Framework执行
- 黑马程序员——多线程
- 关于文件系统目录和分区等
- JNI中C和java传递数组
- LinuxRPM命令参数使用详解介绍和应用
- 流星语
- Java中 "abc" + '/'和"abc" + "/"的区别
- WebLogic和Tomcat浅谈
- 多核:操作系统3种处理模式(SMP+AMP+BMP)
- java 类加载器
- 使用unnest Hint优化SQL
- 保护模式下Intel 80x86 CPU 硬件中断过程