一.NDK开发环境搭建
1、 下载Linux平台的NDK包,以android-ndk-r6b-linux-x86.tar.bz为例,下载地址为http://dl.google.com/android/ndk/android-ndk-r6b-linux-x86.tar.bz2。
2、 将压缩包解压到HOME目录中,将解压后的路径加入到环境变量中,如在.bashrc文件末尾加入如下两行:
export ANDROID_NDK_ROOT=~/android-ndk-r6b
export PATH=${PATH}:${ANDROID_NDK_ROOT};执行命令:
source .bashrc
3.验证是否完成
$cd android-ndk-r6b/samples/hello-jni/jni $ndk-build
显示如下,表示成功
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
二.NDK开发步骤
先列个步骤,再一步步实现
1、java建立函数接口 native
2、javac编译生成class
3、javah生成对应头文件
4、新建一个c文件实现接口函数
5、编辑mk文件,进行编译产生.so
6、在android项目中调用函数
1.建立你要实现的函数声明native,不要实现
package cn.buct.yangbo.helloworld;
public class JniTest {
public native int add(int x,int y);
}
2.javac产生个class
3.在src目录下javah cn.buct.yangbo.helloworld.JniTest
4.在项目的根目录下建一个文件夹jni,把生成的.h文件放进去,新建一个c,随便起个名字,我的叫mylib.c 实现如下
#include <jni.h>
#include "cn_buct_yangbo_helloworld_JniTest.h"
JNIEXPORT jint JNICALL Java_cn_buct_yangbo_helloworld_JniTest_add (JNIEnv *env, jobject obj, jint x, jint y) {
return x+y;}
5.建立一个mk文件,如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := mylib.c
include $(BUILD_SHARED_LIBRARY)
在jni目录下ndk-build,会生成.so文件
6.在android项目中调用
package cn.buct.yangbo.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.tv);
JniTest jniTest = new JniTest();
int x = 200;
int y = 200;
tv.setText(x + "+"+ y + "=" + jniTest.add(x, y));
}
static {
System.loadLibrary("mylib");
}
}
在屏幕上显示200+200=400