Android jni

来源:互联网 发布:mac怎么升级os x10.11 编辑:程序博客网 时间:2024/06/06 17:23


1、配置环境变量,这样才能正常使用javah

JAVA_HOME设置为:
C:\Program Files\Java\jdk1.6.0_30

classpath设置为:
.;%JAVA_HOME%\lib;


Path设置为:
%JAVA_HOME%\bin;

 

2、新建Android Project, 项目中有2个类,一个是activity,另一个是我们调用jni的类.同时创建名为jni的文件夹

package com.rydiy.jniTest;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class JNITest extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        TextView text = (TextView)findViewById(R.id.text);                int a = 1;        int b = 2;                CallJni jni = new CallJni();        int c = jni.add(a, b);                text.setText(String.valueOf(c));    }}


 

 

package com.rydiy.jniTest;public class CallJni {static {System.load("jniTest");}public native int add(int a, int b);}


3、生成.h头文件

cd 要项目目录,执行

javah   -classpath  bin\classes -d jni  com.rydiy.jniTest.CallJni

生成:  com_rydiy_jniTest_CallJni.h    rename: jniTest.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_rydiy_jniTest_CallJni */#ifndef _Included_com_rydiy_jniTest_CallJni#define _Included_com_rydiy_jniTest_CallJni#ifdef __cplusplusextern "C" {#endif/* * Class:     com_rydiy_jniTest_CallJni * Method:    add * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_rydiy_jniTest_CallJni_add  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif

 

4、在jni文件夹里新建jniTest.c

#include <jniTest.h>jint JNICALL Java_com_rydiy_jniTest_CallJni_add  (JNIEnv *e, jobject obj, jint a, jint b) {return (a+b);}


5、在jni文件夹中新建Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := jniTestLOCAL_SRC_FILES := jniTest.cinclude $(BUILD_SHARED_LIBRARY)


 

6、使用NDK编译生成libjniTest.so

cygwin中cd到项目目录中(jni文件夹一级),调用NDK里的ndk-build,生成libjniTest.so。编译成功项目目录总会生成libs文件夹

 

7、运行项目即可