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 __cplusplus
extern "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 := jniTest
LOCAL_SRC_FILES := jniTest.c
include $(BUILD_SHARED_LIBRARY)
6、使用NDK编译生成libjniTest.so
cygwin中cd到项目目录中(jni文件夹一级),调用NDK里的ndk-build,生成libjniTest.so。编译成功项目目录总会生成libs文件夹
7、运行项目即可