天天看點

Android JNI入門第五篇——基本資料類型使用

前面講到了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;  

  }  

 * Method:    getByte  

 * Signature: (B)B  

JNIEXPORT jbyte JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getByte  

  (JNIEnv *e, jobject thiz, jbyte by){  

     return by;  

 * Method:    getChar  

 * Signature: (C)C  

JNIEXPORT jchar JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getChar  

  (JNIEnv *e, jobject thiz, jchar c){  

   return c;  

 * Method:    getShort  

 * Signature: (S)S  

JNIEXPORT jshort JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getShort  

  (JNIEnv *e, jobject thiz, jshort s){  

     return s;  

 * Method:    getInt  

 * Signature: (I)I  

JNIEXPORT jint JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getInt  

  (JNIEnv *e, jobject thiz, jint i){  

        return i;  

 * Method:    getLong  

 * Signature: (J)J  

JNIEXPORT jlong JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getLong  

  (JNIEnv *e, jobject thiz, jlong l){  

         return l;  

 * Method:    getFloat  

 * Signature: (F)F  

JNIEXPORT jfloat JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getFloat  

  (JNIEnv *e, jobject thiz, jfloat f){  

        return f;  

 * 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");  

   } 

運作截圖:

<a href="http://blog.51cto.com/attachment/201203/112952282.gif" target="_blank"></a>

總結:JNI中傳過來的java基本類型可以直接使用。

     本文轉自xyz_lmn51CTO部落格,原文連結:http://blog.51cto.com/xyzlmn/817170,如需轉載請自行聯系原作者

繼續閱讀