前言

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







更多相关文章

  1. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  2. Android平台上优秀的开源项目
  3. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  4. Android官方入门文档[1]创建一个Android项目
  5. GitHub 优秀的 Android(安卓)开源项目
  6. [android]编译时出现/usr/bin/ld: skipping incompatible /usr/l
  7. 编译android的linux内核
  8. Android(安卓)命令行编译、打包生成apk文件
  9. Ionic 运行报错No resource identifier found for attribute 'ap

随机推荐

  1. Android(安卓)Studio配置百度地图开发环
  2. Ubuntu编译ijkplayer支持https和更多视频
  3. Android(安卓)注解
  4. cocos2d-x android 添加新场景报错: unde
  5. ExpandableListView研究
  6. Android去除url参数中的特殊字符
  7. 安卓四大组件之——ContentProvider学习
  8. Android(安卓)事件总线EventBus——— 设
  9. Android(安卓)Material Design新UI控件使
  10. FlexboxLayout实现流式布局