android NDK 教程一(初识JNI--hello world)
前言
android的知识太过庞杂了,自己如果学过了,但过一段时间不用了又会忘记。写android NDK系列的博客呢,其一是为了锻炼自己的写作水平,其二是为自己所学过所掌握的一些知识做一下梳理、记录,方便以后自己查阅。废话不多说,先写个hello world开始吧。
前期准备
开发工具:EclipseBundle ADT + android NDK r10e
下载链接:http://www.androiddevtools.cn/
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 <stdio.h>#include <jni.h>#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 jniLOGE("hello jni");}
命令行编译JNI
进入项目的jni目录,执行ndk-build,注意:如果没配置环境变量是不能这么使用的。编译成功后,会生成3个libhellojni.so
运行项目,检验成果
总结
对于一些新接触NDK编程的初学者来说,最好还是先从hello world做起。至少这样能把整体的流程跑起来,知识是一点一点积累的。后续的章节将会更深入研究NDK,欢迎大家批评指正。
源码下载:http://download.csdn.net/detail/u011138654/9490597
更多相关文章
- 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
- Android平台上优秀的开源项目
- android ndk编译x264开源(用于android的ffmpeg中进行软编码)
- Android官方入门文档[1]创建一个Android项目
- GitHub 优秀的 Android(安卓)开源项目
- [android]编译时出现/usr/bin/ld: skipping incompatible /usr/l
- 编译android的linux内核
- Android(安卓)命令行编译、打包生成apk文件
- Ionic 运行报错No resource identifier found for attribute 'ap