利用AS创建第一个JNI工程
步骤:
1.下载AS。我安装的是AS 2.2.3.
下载方法很多,大家可自行下载。
2.下载NDK,配置环境变量。
1) 下载 AS内提供下载NDK的接口,File-->Settings--->Android SDK--->SDK Tools--->NDK 直接上图。
2)配置环境
A: 创建环境变量
变量名:NDK_ROOT(貌似大家都用这个)
变量值:C:\Users\h218072\android-sdks\ndk-bundle(你存放NDK的地方)
B:Path中添加NDK,可全局使用NDK的命令。
末尾添加%NDK_ROOT%;
C:验证NDK
在cmd中输入命令ndk-build。如果出现下图提示,说明环境配置成功。
3.下载JDK,配置环境变量。
1)下载JDK。下载方式很多,我用的是jdk1.7.0_17
2)JDK环境变量配置
A: 创建环境变量
变量名:JAVA_HOME(貌似大家都用这个)
变量值:C:\Program Files\Java\jdk1.7.0_17(你存放JDK的地方)
B:添加CLASSPATH。
CLASSPATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
C:Path中添加JDK,可全局使用JDK的命令。
末尾添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;;
D:验证JDK
在cmd中输入命令java -version。如果出现下图提示,说明环境配置成功。
4.配置AS下NDK环境
Android NDK location 如果你之前没有下载ndk,可点击download下载,如果你已经下载了NDK,可选择Select default NDK或者自行找到你保存的NDK
5.创建JNI文件,且编译生成.o文件
1)在MainActivity中添加如下代码,java中调用jni生成库文件。
public static native int calculate(int numa,int numb);
static {
System.loadLibrary("MyJni");
}
2)打开AS自带的Terminal,生成.h文件
cd到app\src\main\java,输入命令javah -jni com.main.myjniapp.MainActivity 生成如图所以的.h文件
app下面会多出来一个CPP,其实它的正确路径是这样的MyJniApp\app\src\main\jni
然后将上面生成.h move到jni文件夹下面。
4)创建.c文件
cpp右键--->new--->C/C++ source file--->选择.c或者.cpp,名字为了统一,我依然写的同.h的文件名
创建的.c中添加实现代码
#include <com_main_myjniapp_MainActivity.h>
JNIEXPORT jint JNICALL Java_com_main_myjniapp_MainActivity_calculate(JNIEnv *env, jclass cls, jint numa, jint numb) {
return numa * numb;
}
5)生成.o文件
创建Android.mk 添加如下代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyJni
LOCAL_SRC_FILES := com_main_myjniapp_MainActivith.c
include $(BUILD_SHARED_LIBRARY)
在AS自带的Terminal中cd到jni下面,运行ndk-build。完成后,在app\src\main\libs下面会找到libMyJni.so。
6.配置android工程调用NDK的环境。
1)添加显示调用jni计算结果的代码
private TextView Jni_text;
Jni_text= (TextView) findViewById(R.id.Jni_text);
Jni_text.setText("5*6="+calculate(5,6));
2)在gradle.properties中添加如下代码
Android.useDeprecatedNdk=true
3)在build.gradle中android()末尾添加如下代码
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
}
6.编译且验证。
点击build--->Make project。如果没有error说明编译完成。
然后点击Run--->run app.在模拟器中验证结果
到这里我相信大家已经对As创建简单调用jni的流程有了清晰的理解。