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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题