牛骨文教育服务平台(让学习变的简单)

前面讲到了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)+"
"+
        		"返回byte:"+method.getByte((byte) 0)+"
"+
        		"返回char:"+method.getChar("c")+"
"+
        		"返回short:"+method.getShort((short) 1)+"
"+
        		"返回int:"+method.getInt(1)+"
"+
        		"返回long:"+method.getLong(9)+"
"+
        		"返回float:"+method.getFloat((float) 1.0)+"
"+
        		"返回double:"+method.getDouble(2.0)+"
");
    }

运行截图:

总结:JNI中传过来的java基本类型可以直接使用。