- 下载ndk 
 从官方网页 https://developer.android.com/tools/sdk/ndk/index.html 下载mac版本的ndk, 一般为- android-ndk-r10d-darwin-x86_64.bin, 然后解压缩
 - bash
 chmod a+x android-ndk-r10d-darwin-x86_64.bin
 ./android-ndk-r10d-darwin-x86_64.bin
 
 获得名为- android-ndk-r10d的目录, 放到想要的目录中即可, 我放在了- ~/Android_ndk中
- 项目设置 
 通过AS(=Android Studio)新建空Activity项目, 在AS的Project视图中切换到- Project模式, 建立需要的- jni目录和- jniLibs目录
  
 并且打开根目录的- local.properties, 添加如下内容, 目录指向你在上一步设置的ndk文件夹
 
 ndk.dir=/path/to/your/ndk/folder
 
- Hello World from jni 
 配置AS支持直接调用javah, 方便生成对应类的头文件
 AS选择Preferences->External Tools
 增加一个新的Tool, 如下配置
  
 - Program填写- /usr/bin/javah,- Parameters填写- -v -jni -d $ModuleFileDir$/src/main/jni $FileClass$,- Working directory填写- $SourcepathEntry$
 现在修改我们的- MainActivity, 申明我们需要的函数, 如- hello()
java
static{
        System.loadLibrary(“hello”);
    }
private TextView textView ;
public native String hello();
 @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
        textView = (TextView) findViewById(R.id.textview);
        textView.setText(hello());
    }
然后就可以使用这个工具方便的创建我们需要的头文件啦, 右键选择MainActivity, 选择javah工具, lib文件夹中就会生成package_name_class_name.h的头文件, 也就是我们的sh_rui_demo_project_opencv_MainActivity.h, 内容大致如下 
// sh_rui_demo_project_opencv_MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
 #include <jni.h>
/* Header for class com_android_hacks_ndkdemo_MyActivity */
 #ifndef _Included_sh_rui_demo_project_opencv_MainActivity
 #define _Included_sh_rui_demo_project_opencv_MainActivity
 #ifdef __cplusplus
extern “C” {
 #endif
/*
 * Class:     sh_rui_demo_project_opencv_MainActivity
 * Method:    hello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_sh_rui_demo_project_opencv_MainActivity_hello
  (JNIEnv *, jobject);
 #ifdef __cplusplus
}
 #endif
 #endif
然后在`jni`文件夹中创建`main.c`, 引用生成的头文件, 并且实现对应的函数`hello()`
// main.c
 #include “sh_rui_demo_project_opencv_MainActivity.h”
JNIEXPORT jstring JNICALL Java_sh_rui_demo_project_opencv_MainActivity_hello (JNIEnv * env, jobject obj){
        return (*env)->NewStringUTF(env, “Hello from JNI”);
}
最后在build.gradle中调用ndk即可
defaultConfig {
        applicationId “sh.rui.demo.project.opencv”
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 1
        versionName “1.0”
        ndk{
            moduleName “hello”
        }
    }
需要注意的是, moduleName需要和Activity中调用的库名一样, 如本文中的hello
最后效果如下
