android NDK 教程一(初识JNI--hello world)
前言
android的知识太过庞杂了,自己如果学过了,但过一段时间不用了又会忘记。写android NDK系列的博客呢,其一是为了锻炼自己的写作水平,其二是为自己所学过所掌握的一些知识做一下梳理、记录,方便以后自己查阅。废话不多说,先写个hello world开始吧。
JDK安装和配置路径就不用说吧,为了能在命令行中使用ndk指令,需配置下系统环境,在系统变量path中添加ndk r10e的路径。我的是安装在:;D:\soft\android-ndk-r10e
JNI---hello world
创建android 工程hello world.

新建JniNative.java类作为jni的java层接口

通过javah指令生成.h头文件
在命令行,进入到--<项目路径>/bin/classes,执行如下指令:
javah-classpath . com.example.hellojni.JniNative
执行成功后,将在当前目录下生成com_example_hellojni_JniNative.h的头文件

在项目中新建jni目录(JNI工程)
将生成的com_example_hellojni_JniNative.h拷到jni目录下,创建Android.mk; AndroidAppliction.mk ; hellojni.c这三个文件。
Android.mk
LOCAL_PATH := $(call my-dir) MY_LOCAL_PATH := $(LOCAL_PATH) include $(CLEAR_VARS) #要编译的c文件 LOCAL_SRC_FILES := hellojni.c #日志库引用,相当于java中的import log日志类 LOCAL_LDLIBS += -llog #目标模组,要编译的so库名称 LOCAL_MODULE := hellojni #创建动态链接库 include $(BUILD_SHARED_LIBRARY)
AndroidAppliction.mk
#目标平台,即在libs目录下生产3个文件夹 APP_ABI := armeabi armeabi-v7a x86
hellojni.c
#include "string.h" #include#include #include "android/log.h" static const char *TAG="helloJNI"; //日志 #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, TAG, fmt, ##args) #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args) #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args) /** *C函数,函数名为com_example_hellojni_JniNative.h中生成的函数名 */ JNIEXPORT void JNICALL Java_com_example_hellojni_JniNative_testJni (JNIEnv *env, jobject thiz){ //打印hello jni LOGE("hello jni"); }
命令行编译JNI
进入项目的jni目录,执行ndk-build,注意:如果没配置环境变量是不能这么使用的。编译成功后,会生成3个libhellojni.so

运行项目,检验成果

总结
对于一些新接触NDK编程的初学者来说,最好还是先从hello world做起。至少这样能把整体的流程跑起来,知识是一点一点积累的。后续的章节将会更深入研究NDK,欢迎大家批评指正。