前面讲到了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");
- }
运行截图:
总结:JNI中传过来的java基本类型可以直接使用。
/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/