1.Eclipse新建一个Android工程,右键Properties->Builder->New Builder(Program),弹出Builder的对话框。
2.Bulder的名字可以随意,Location为ndk-build.cmd的路径,Working Directory为当前工程,可在Browse中选择也可填写项目绝对路径。
3.切换到TAB,如下
4.切换至Builde Option,
ok,环境配置完成了。
剩下的就是代码喽。
-----------------------------------------------------------------------------分割线-------------------------------------------------------
1.在Eclipse下建立JniClient类
public class JniClient {
public static native String hello(String str);
public static native int hello(int x);
}
2.进入命令行,这里因为是在Eclispse中的工程,所以会在/classes下生成JniClient.class文件。命令行至classes目录,执行javah /pacagename/JniClient,成功的话会在classes文件夹下生成一个.h文件,名字由你的包名及类名决定。
3.在工程目录下创建Jni目录,将.h文件拷贝至此,并编写Android.mk文件及.c或.cpp文件。
#include "com_leeks_jnitest_JniClient.h"
using namespace std;
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_leeks_jnitest_JniClient
* Method: hello
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_leeks_jnitest_JniClient_hello__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring){
jstring str = env->NewStringUTF(env, "Hello from JNI");
return str;
}
/*
* Class: com_leeks_jnitest_JniClient
* Method: hello
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_leeks_jnitest_JniClient_hello__I
(JNIEnv *env, jclass, jint a, jint b){
return a + b;
}
#ifdef __cplusplus
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniTest
LOCAL_SRC_FILES := com_leeks_jnitest_jniClient.cpp
include $(BUILD_SHARED_LIBRARY)
如果需要可以在此目录新建Application.mk文件。
剩下 的就是调用了。。。
TextView tvHello;
static{
System.loadLibrary("JniTest");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHello = (TextView) findViewById(R.id.tv_hello);
tvHello.setOnClickListener(onClickListener);
}
OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, JniClient.hello(" ") + JniClient.sum(1, 2), Toast.LENGTH_SHORT).show();
}
};