NDK的下载和安装

NDK的下载和安装

注意:这里只是针对ndk版本为 "Android NDK, Revision 8e"的介绍,操作系统为Windows。

下载

首先去官网android ndk下载Android ndk。如下图选择合适的包。

这里选择Windows版的。下载完之后解压缩到C盘,当然也可以解压到其他目录。
接下来需要安装cygwin。下载cygwin,版本必须是1.7以上。在cygwin选择所需要安装的包时如下图选择。

安装

接下来一直下一步直到完成安装。

!注意接下来这步不是必须的。

为了使用方便我们需要简单的配置一下cwygin。在cygwin的根目录下找到home文件夹并在里面找到以自己登录名命名的文件夹,进去之后找到**.bash_profile**(如果不存在的话新建一个)文件,用文本编辑器打开然后填入以下内容

1
2
ANDROID_NDK_ROOT=/cygdrive/c/android-ndk-r8e
export ANDROID_NDK_ROOT

这里的**c/android-ndk-r8e是指自己的ndk安装路径,我这里是C盘,所以这样写,前面的/cygdrive/**是cygwin访问本地磁盘目录必带前缀,我们可以把它看成是Windows的根目录。

构建

这样每次使用cygwin进行build的时候就方便一点了。如下在cygwin中输入

1
2
cd [你的工程所在路径] 例如 cd /cygdrive/d/workspace/Ndk_example
$ANDROID_NDK_ROOT/ndk-build

执行完上面的命令之后刷新工程就能看见新生成的.so文件,就是编译好的库文件。
接下来需要返回来编写Android工程。在eclipse中新建Android工程,和普通Android工程不同的是需要在根目录中添加jni目录。整个目录结构如下:

MainActivity.java内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.test);
tv.setText(say());//调用本地方法
}
static {
System.loadLibrary("hello");//加载本地库
}
public native String say();//待实现的本地方法
}

hello.c内容如下

1
2
3
4
5
6
#include <string.h>
#include <jni.h>
jstring Java_com_example_ndkexample_MainActivity_say(JNIEnv* env, jobject javaThis) {
return (*env)->NewStringUTF(env, "Hello from native code!");
}

c文件中对Java定义的本地方法的实现中,函数名必须对应起来,比如现在我的包名为
com.example.ndkexample 方法名为say,返回值为String,则对应的c中函数定义则为jstring Java_com_example_ndkexample_MainActivity_say函数中的两个参数是固定的,如果Java中的方法有参数,则对应的c函数中也会添加。一般Java中的基本类型在c中对应的类型为前面加j,比如String -> jstring

Android.mk内容如下

1
2
3
4
5
6
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)

接下来我们执行上面的提到的build命令就能生成对应的库文件了。

记得生成后刷新工程。