以下内容均使用AndroidStudio开发
一、ndk环境配置
ndk下载:
http://developer.android.com/tools/sdk/ndk/index.html
选择对应的版本,下载解压即可使用。
二、建立ndkdemo
创建工程
建立对应的类,并增加静态native方法,这里创建一个加法方法为例。
生成.h文件
使用命令行生成java类对应的头文件
注意类名没有.java后缀
javah -jni com.lib.ndk.MathUtil
在main目录下生成jni文件夹
把刚生成的.h文件拉到jni目录下,并实现相应的.cpp
.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lib_ndk_MathUtil */
#ifndef _Included_com_lib_ndk_MathUtil
#define _Included_com_lib_ndk_MathUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lib_ndk_MathUtil
* Method: sum
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_lib_ndk_MathUtil_sum
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
.cpp文件:
#include <com_lib_ndk_MathUtil.h>
JNIEXPORT jint JNICALL Java_com_lib_ndk_MathUtil_sum
(JNIEnv *env, jclass cls, jint a, jint b){
return a+b;
}
设置项目的build.gradle文件
设置jni名称为:JniDemo,并生成各个架构so
在module中的gradle.properties(如无则创建)添加:
android.useDeprecatedNdk=true
编译
Build->MakeProject
使用
把so拷贝至需要使用项目中的jniLibs目录下
在程序启动的同时调用
System.loadLibrary("JniDemo");//库名
一般使用静态自由块保证在装载的同时加载so库
static {
System.loadLibrary("JniDemo");//库名
}
在java层使用静态方法调用即可:
MathUtil.sum(1,2);