前面讲到了java和native数据类型,这里就开始做一下使用:
**第一步:新建工程**
**第二部:书写 java方法:**
~~~
public class NativeMethod {
static {
System.loadLibrary("com_nedu_jni_jnidemo5-jni");
}
public native boolean getBoolean(boolean b);
public native byte getByte(byte b);
public native char getChar(char c);
public native short getShort(short s);
public native int getInt(int i);
public native long getLong(long l);
public native float getFloat(float f);
public native double getDouble(double d);
}
~~~
**第三部:调用javac、javah命令生成h文件。**
**第四部:补充native方法,如下:**
~~~
#include<stdio.h>
#include <stdlib.h>
#include "com_nedu_jni_jnidemo5_NativeMethod.h"
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getBoolean
* Signature: (Z)Z
*/
JNIEXPORT jboolean JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getBoolean
(JNIEnv *e, jobject thiz, jboolean b){
return b;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getByte
* Signature: (B)B
*/
JNIEXPORT jbyte JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getByte
(JNIEnv *e, jobject thiz, jbyte by){
return by;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getChar
* Signature: (C)C
*/
JNIEXPORT jchar JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getChar
(JNIEnv *e, jobject thiz, jchar c){
return c;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getShort
* Signature: (S)S
*/
JNIEXPORT jshort JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getShort
(JNIEnv *e, jobject thiz, jshort s){
return s;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getInt
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getInt
(JNIEnv *e, jobject thiz, jint i){
return i;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getLong
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getLong
(JNIEnv *e, jobject thiz, jlong l){
return l;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getFloat
* Signature: (F)F
*/
JNIEXPORT jfloat JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getFloat
(JNIEnv *e, jobject thiz, jfloat f){
return f;
}
/*
* Class: com_nedu_jni_jnidemo5_NativeMethod
* Method: getDouble
* Signature: (D)D
*/
JNIEXPORT jdouble JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getDouble
(JNIEnv *e, jobject thiz, jdouble d){
return d;
}
~~~
**第五步:制作mk文件**
~~~
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com_nedu_jni_jnidemo5-jni
LOCAL_SRC_FILES :=NativeMethod.c
include $(BUILD_SHARED_LIBRARY)
~~~
**第六步:调用native方法**
~~~
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text=(TextView)findViewById(R.id.text);
NativeMethod method=new NativeMethod();
text.setText("返回boolean:"+method.getBoolean(true)+"\n"+
"返回byte:"+method.getByte((byte) 0)+"\n"+
"返回char:"+method.getChar('c')+"\n"+
"返回short:"+method.getShort((short) 1)+"\n"+
"返回int:"+method.getInt(1)+"\n"+
"返回long:"+method.getLong(9)+"\n"+
"返回float:"+method.getFloat((float) 1.0)+"\n"+
"返回double:"+method.getDouble(2.0)+"\n");
}
~~~
运行截图:
![](https://box.kancloud.cn/2016-01-14_56971f3fa96ae.gif)
总结:JNI中传过来的java基本类型可以直接使用。