在Android Studio下载NDK,将NDK配置到环境变量,步骤如下:
下载NDK
File→Project Structure
如果是NDK没有配置则标注的地方是空的,这就是local.properties文件,空的时候回有download ndk,可以从这个地方直接下载,也可以从SDK Manager下载。
下载后配置环境变量:
在系统变量中新建变量名:NDK_ROOT 变量值就是NDK的路径,在PATH中变量值加上;%NDK_ROOT%
这样就可以在cmd或者Terminal中执行了
环境变量配置后需要重启下机器,在cmd中测试环境配置是否成功,成功后如下:
到现在NDK算是配置好了,创建一个Android工程
在MainAcitvity中添加一个native方法
private TextView tv_call; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_call=(TextView)findViewById(R.id.tv_call); tv_call.setOnClickListener(this); } public native String javaCallC();生成.h文件,在Terminal窗口中执行
首先切换到java目录下,在执行javah -jni 包名.类名
刷新下项目,看到在java目录下生成了一个新的.h文件
我们需要的是这个方法的头部,在app下创建一个jni文件夹,在jni下创建一个c文件
前面生成的.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_wdkj_test_jniproject_MainActivity */ #ifndef _Included_com_wdkj_test_jniproject_MainActivity #define _Included_com_wdkj_test_jniproject_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_wdkj_test_jniproject_MainActivity * Method: javaCallC * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_wdkj_test_jniproject_MainActivity_javaCallC (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
生成h文件就是为了要这个方法名,可以看出来就是Java_包名_类名_方法名,写得熟练了就不需要生成这个h文件了
JniTests.c
#include <jni.h> JNIEXPORT jstring JNICALL Java_com_wdkj_test_jniproject_MainActivity_javaCallC(JNIEnv *env, jobject object){ return (*env)->NewStringUTF(env, "JAVAcallC"); }
Android.mk名字必须是这个
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :=JniTests LOCAL_SRC_FILES :=JniTests.c include $(BUILD_SHARED_LIBRARY)LOCAL_MODULE是生成的so库的名称,其实生成后库名称之前加了lib,LOCAL_SRC_FILES是要使用的C的文件 接下来就要生成so文件了
切换到app目录下,执行ndk-build
生成的so库,如果想生成部分需要的so库,Android.mk的APP_ABI-:armeabi armeabi - v7a 就可以了
下一篇博客会介绍如何使用,谢谢。