第一步:在Java代码中写一个本地方法,这个本地方法既可以单独写在一个Java类中,也可以写在MainActivity中,本次demo写在一个单独的java类中;如下
package com.example.jnidemo2;
public class JNITest {
public native int hello();
}
第二步:在dos窗口下使用javah命令生成头文件;首先进入到项目的src目录下,然后用"javah 本地方法的全路径",这样就生成了本地方法的头文件;
第三步:在eclipse中指定ndk路径
window->preferences->Android->NDK->NDK Locations添加你电脑上下载好的ndk文件
第四步:给工程添加jni的本地支持;
右键工程->android tools->add native support...,设置动态库的名称。这一步可以自动在工程目录下生成jni目录及其目录下的mk文件和c文件;
第五步:把jni的cpp文件改成c文件,并将mk文件中的.cpp改成.c;
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNIDemo2 //这个动态库的名称就是第四步添加jni本地支持时设置的名称
LOCAL_SRC_FILES := JNIDemo2.c
include $(BUILD_SHARED_LIBRARY)
第六步:把头文件拖到jni目录下;
第七步:设置jni头文件的路径
右键工程->properties->c/c++ General->Paths and Symbols->includes->add->选择你的ndk文件夹下的platforms\android-8\arch -arm\usr\inclde;其中paltforms下的android版本可以随意选;
第八步:把头文件(上面第二步生成的头文件)引入到c文件中,把头文件中的方法拷贝到c文件中,实现这个方法;如下
#include "com_example_jnidemo2_JNITest.h"
#include <stdio.h>
#include <stdlib.h>
JNIEXPORT jint JNICALL Java_com_example_jnidemo2_JNITest_hello
(JNIEnv * env, jobject obj){
return 6;
}
第九步:选中工程,点击eclipse上面的小锤子生成动态库;
第十步:在Java代码中调用本地方法,实现在MainActivity中的按钮点击事件中调用本地方法,实现如下
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private Button callMethod;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callMethod = (Button) findViewById(R.id.btu_call_method_from_c);
callMethod.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1,加载动态库
System.loadLibrary("JNIDemo2");
//2,调用本地方法
JNITest jniTest = new JNITest();
int result = jniTest.hello();
Log.e(TAG, "result==="+result);
}
});
}
}