1在java中创建本地方法;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 按钮点击事件
* @param v
*/
public void click(View v) {
}
/**
* 本地方法
* @return
*/
public native String sayHello();
}
2.在eclipse中配置ndk路径:window->preferences->andorid->ndk,配置ndk的根目录.
3.给android工程添加本地支持:右键工程->android tools->add native support..:
会在工程根目录下生成jni文件夹,里面有mk和c文件.(改名.c,和mk文件里面的引用)
4.在dos窗口中切换到工程src的目录下,执行javah 类的全名,生成头文件: E:\
5.把生成的头文件拖到jni目录下,会报错
6.在工程中引入ndk的头文件(这头文件中定义了一些类型和变量,在我们的c文件中使用到了这些类型和变量,所以需引入):
右键工程->propertes->C/C++ General->paths and symbols->includes->add-file System,在里面添加:
D:\develops\android-ndk-r9d\platforms\android-9\arch-arm\usr\include
7把头文件中的方法拷贝到c文件中,添加三个头文件在这个方法中传递参数,实现方法体;
#include <stdio.h>
#include <stdlib.h>
#include "com_itheimajavatoc_MainActivity.h"
JNIEXPORT jstring JNICALL Java_com_itheimajavatoc_MainActivity_sayHello(
JNIEnv * env, jobject obj) {
char* text = "I'm from C world!!!!";
jstring result = (*env)->NewStringUTF(env, text);
return result;
}
8 jni文件加入Application.mk文件
APP_ABI := all
9.选中工程,点击上面的小锤子,生成动态库.
10.在java中加载动态库,调用本地方法.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.loadLibrary("JavaToC");
}
/**
* 按钮点击事件
* @param v
*/
public void click(View v) {
String result = sayHello();
Toast.makeText(getApplicationContext(), result, 0).show();
}
/**
* 本地方法
* @return
*/
public native String sayHello();
}