参考: 
http://blog.csdn.net/sbsujjbcy/article/details/48469569 
http://www.androiddevtools.cn/
Android Studio 从 1.3 版本开始加入了 NDK 支持(见 Android NDK Preview),所以需要使用 NDK 的话,需更新到 >=1.3 的版本,本文中使用的是 2.1 版(写此文时最新版)。
两种方法:
Android Studio 自带的 SDK 管理器下载 NDK ,现在虽然 谷歌被墙,但是感觉更新下载这些开发工具还算流畅。
 
图一
安装NDK,才会在下图中显示install,并在有更新时提示:
 
图二
1、可以单独下载(可在 这里 下载),然后解压就可以了 
2、在下面的位置填入NDK的路径:
 
图三
配置完后,会在local.properties出现如下代码:
ndk.dir=D\:\\Android\\android-ndk-r10手动下载的时候,NDK有zip和exe两种。我认为它们的区别是,下载zip,直接解压后使用,是没有在图二中显示install,并且不能提示更新。
参考: 
http://yanbober.github.io/2015/02/14/android_studio_jni_1/ 
http://blog.csdn.net/qiujuer/article/details/42040963
因为只有一个类,生成好jni文件,编译总是会出现下面的报错,不知为何(详情参见NDK在Windows的一个bug),两个类,生成号jni文件,就可以正常运行!
make.exe: *** No rule to make target `F:\StudioProjects\NDKTest2\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/JniDemo/F_\StudioProjects\NDKTest2\app\src\main\jni‘, needed by `F:\StudioProjects\NDKTest2\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/JniDemo/F_\StudioProjects\NDKTest2\app\src\main\jni\com_example_xue_ndktest2_MathKit.o‘.  Stop.
Error:Execution failed for task ‘:app:compileDebugNdk‘.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘D:\Android\android-ndk-r10\ndk-build.cmd‘‘ finished with non-zero exit value 2在 MathKit 中我们实现计算 INT 值的平方数。
public class MathKit {  
    public static native int square(int num);  
    static {  
        System.loadLibrary("JniDemo");  
    }  
} StringKit 这个类什么功能也没有,充数的:
public class StringKit {  
    public static native void setNull(String str);  
    static {  
        System.loadLibrary("JniDemo");  
    }  
} 有两种方式,建议掌握第一种即可:
第一种:
注意,一定要在项目工程的java目录,后面输入的完整包名net.qiujuer.ndkdemo.jni.MathKit(不一定要和这个包名一模一样)
有的朋友可能知道,java在编译文件时,会将包名转为路径,以为这里只要掌握好运行输入javah命令的路径和输入的包名就行。其实不然,请看下图(我自己重新建立项目,所以包名和上图不一样) 
第二种:
1、build ->make modules得到中间文件,我们关注的是.class文件。 
2、编译OK以后生成的class文件在AS工程的如下目录: \app\build\intermediates\classes\debug。
3、然后接下来的步骤就是根据生成的class文件,利用javah 生成对应的 .h头文件。 
4、点开AS的Terminal标签,默认进入到该项目的app文件夹下。我在windows平台下输入如下命令跳转到class中间文件生成路径:
xxxxx\app> cd build\intermediates\classes\debug5、然后执行如下javah命令生成h文件。
xxxxx\debug> javah -jni net.qiujuer.ndkdemo.jni.MathKit6、执行完之后你可以在文件夹\app\build\intermediates\classes\debug下看见生成的 .h头文件为:
net_qiujuer_ndkdemo_jni_MathKit.h
也可手动建立new->Directory,文件夹命名为jni即可。
1、拷贝第二步生成的.h文件到jni文件夹 
2、新建.cpp文件,操作如下图:
分别实现:
net_qiujuer_ndkdemo_jni_MathKit.cpp
#include <net_qiujuer_ndkdemo_jni_MathKit.h>  
JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square  
  (JNIEnv *env, jclass cls, jint num)  
  {  
        return num*num;  
  }  net_qiujuer_ndkdemo_jni_StringKit.cpp
#include <net_qiujuer_ndkdemo_jni_StringKit.h>  
JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull  
  (JNIEnv *env, jclass obj, jstring str)  
  {  
  }该设置是为了设置生成的Jni名称为:JniDemo
到此完美结束,可以看看运行结果: 
在平时的那些操作中我们不可避免的要建立: 
Android.mk
LOCAL_PATH      := $(call my-dir)  
include $(CLEAR_VARS)  
LOCAL_MODULE    := genius  
LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp  
LOCAL_LDLIBS    := -lm -llog -ljnigraphics  
include $(BUILD_SHARED_LIBRARY) Application.mk
APP_ABI     := all  
APP_PLATFORM:= android-19  
APP_OPTIM   := release  而这里这两个文件都没有建立,那么是怎么决定的呢?
我们可以在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:
这些就是全部能够设置的参数。分别对应:
ndk{  
    moduleName "JniDemo" // 设置生成的文件名  
    cFlags "-DANDROID_NDK -D_RELEASE" //这个对应的是生成模式  
    ldLibs "m", "log", "jnigraphics" //这个对应 LOCAL_LDLIBS 但是需要去掉前面的 “l”  
    abiFilters "all" //这个是对应的 APP_ABI  
    stl "stlport_shared" //这个对应的是 APP_STL   
}  本项目原作者的下载地址。
原文:http://blog.csdn.net/xx326664162/article/details/50998720