JNI学习笔记

一、新建一个android工程,建一个本地类

 

package com.changewei.imp;

publicclassJniClass {

/**

 * 测试两个方法

 * @return

 */

   publicstaticnative String sayHello();

   publicstaticnative String add(int x,int y);

}

工程图:

二、生成.h文件

三、(刷新在工程文件夹里有一个jni文件夹)复制一份.h文件,把文件名改为JniClass.c, .c文件代码为(相当于把两个方法结果返回,复制过来后,.c文件的代码已经修改过):

 

/* DO NOT EDIT THIS FILE - it ismachine generated */

#include"com_changewei_imp_JniClass.h"

/* Header for classcom_changewei_imp_JniClass */

 

/*

 * Class:    com_changewei_imp_JniClass

 * Method:   sayHello

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_changewei_imp_JniClass_sayHello

 (JNIEnv *env, jclass obj){

   /**

    * 返回字符串

    */

    return (*env)->NewStringUTF(env, "Welcometo JNI's World !");

 

}

 

/*

 * Class:    com_changewei_imp_JniClass

 * Method:   add

 * Signature: (II)Ljava/lang/String;

 */

JNIEXPORT jint JNICALL Java_com_changewei_imp_JniClass_add

 (JNIEnv *env, jclass obj, jint x, jint y){

   return x + y;

}

 

 

四、android.mk文件拷到与.h.c文件的文件夹下:代码如下:

 

LOCAL_PATH :=$(call my-dir)

 

include$(CLEAR_VARS)

 

LOCAL_MODULE    := my_jni

LOCAL_SRC_FILES := JniClass.c

include$(BUILD_SHARED_LIBRARY)

 

五、编译成.so文件:

 

 

六、在本地类里面添加类库,代码如下:

 

package com.changewei.imp;

 

publicclassJniClass {

/**

 * 测试两个方法

 * @return

 */

   publicstaticnative String sayHello();

   publicstaticnative String add(int x,int y);

   static{//引入库

      System.loadLibrary("my_jni");

   }

}

 

七、通过类名.方法名,就可以使用本地类调用.C的类库了

 

TextView sayHello = (TextView)findViewById(R.id.sayHellow);

      sayHello.setText(JniClass.sayHello()+ "/nstring value :" + "50 + 50 = " + JniClass.add(50,50) + "/nname:" + JniClass.getStudent("chenlin", 24));

   

你可能感兴趣的:(JNI学习笔记)