zoukankan      html  css  js  c++  java
  • 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;
      }
    
    /*
     * 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
    *
    */


     


     

     

  • 相关阅读:
    【数据结构】树的DFS序&欧拉序
    Codeforces 1335E2
    Codeforces 1335E1
    Codeforces 1338A/1339C
    【数据结构】ST算法
    Codeforces 1334C
    Codeforces 1333D
    Codeforces 1333C
    python中的socket编程实例与查看端口占用
    java中打印数组
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168145.html
Copyright © 2011-2022 走看看