您的位置:首页 > 移动开发 > Android开发

android NDK 教程一(初识JNI--hello world)

2016-04-14 10:29 477 查看

      前言

               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 jni
LOGE("hello jni");
}

命令行编译JNI

         进入项目的jni目录,执行ndk-build,注意:如果没配置环境变量是不能这么使用的。编译成功后,会生成3个libhellojni.so





运行项目,检验成果







总结

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

源码下载:http://download.csdn.net/detail/u011138654/9490597
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android jni android ndk