最近在做视频处理这块儿,今天把原来整理的android ndk环境设置以及相关的android make文件的说明整理成如下文章。

现在做的内容涉及到了视频服务器端、手机android端的视频的采集与播放,后面会陆续将自己学习心得记录下来(坚持写博客是一种好习惯)

一、android ndk简介

The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++.【ndk是一套允许你使用c或c++语言去实现你应用的一部分的工具集。】

百度百科是这么解释的:

NDK全称:Native Development Kit。
NDK是一系列工具的集合。

* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。[1]

* NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

NDK提供了一份稳定、功能有限的API头文件声明。
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

二、NDK环境搭建

1、android ndk需要必备软件

1) JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

2) Eclipse

3) ADT、CDT

4) Android SDK (android sdk包中自带了集成了adt的eclipse)http://developer.android.com/sdk/index.html

5) Android NDK 开发包 http://developer.android.com/tools/sdk/ndk/index.html

6)cygwin http://www.cygwin.com

2、android ndk环境配置

开发ndk需要的包为:autoconf、automake、binutils、gcc-core、gcc-g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make

在安装完ndk的必备软件后,则需要对ndk环境进行配置了

由于cygwin在启动的时候会自动加载windows的环境变量,所以设置windows环境变量值就行。设置如下图:


打开cygwin,输入echo $path即可查看到相关的值


三、使用NDK

1.在cygwin下,编译程序,如下图:


2.使用eclipse编译

需要在eclipse中设置上ndk的位置


1)方式一

第一步:新建builder,如下图(新建ffmpegHavlenaptr_Builder)



如上图所示:location填写cygwin下面的bash.exe的位置,working directory填写cygwin的bin目录的位置,arguments参照图中修改即可

arguments是bash.exe的参数,表示进入要编译的程序,然后运行ndk_build。

接着点击refresh,选择 the selected resource 即可


在Build Options进行如下图选择:



2)方式二

上面的方式一,需要每次在编译不同的ndk源码时,修改builder,这个方式挺麻烦的。下面这个方式可以给现有的工程自动使用CDT编译工具编译。步骤如下图

右键选择需要编译的工程,选择NEW->Other,如下图:


选中convert to c/c++选项,如图


选择 makefile project,然后选择 android gcc,如下图:


四、android mk文件说明

android ndk自带例子hello-jni里面的make文件内容如下:

LOCAL_PATH := $(call my-dir)    #将当前路径保存到LOCAL_PATH中include $(CLEAR_VARS)#继承Android.mk中的变量LOCAL_MODULE    := hello-jni#编译生成的so文件名LOCAL_SRC_FILES := hello-jni.c  #设置需要编译的文件include $(BUILD_SHARED_LIBRARY)#指定最后编译成的库类型$(BUILD_SHARED_LIBRARY)编译成动态链接库$(BUILD_STATIC_LIBRARY)编译成静态链接库

下面这部分是从博客 http://hi.baidu.com/joec3/item/0e4fca153eb0e3dcbf904211中摘录下来的,对应学习编译不同类型的库总结的很不错

情况一:编译静态库文件Android.mk:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_STATIC_LIBRARY)文件Application.mk:APP_MODULES:=hello-jni情况二:编译动态库文件Android.mk:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)情况三:编译动态库+静态库文件Android.mk:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := mylib_staticLOCAL_SRC_FILES := src.cinclude $(BUILD_STATIC_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE    := mylib_sharedLOCAL_SRC_FILES := src2.cLOCAL_STATIC_LIBRARIES:= mylib_staticinclude $(BUILD_SHARED_LIBRARY)情况四:已有第三方静态库(动态库),编译静态库(动态库)文件Android.mk:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := thirdlib1      # name it whateverLOCAL_SRC_FILES :=$(TARGET_ARCH_ABI)/libthird1.a     # or $(so_path)/libthird1.so#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_STATIC_LIBRARY)    #or PREBUILT_SHARED_LIBRARYinclude $(CLEAR_VARS)LOCAL_MODULE    := mylib_use_thirdlibLOCAL_SRC_FILES := src.cLOCAL_STATIC_LIBRARIES:= thirdlib1       #or LOCAL_SHARED_LIBRARY include $(BUILD_SHARED_LIBRARY)   #如果编译静态库,需要Application.mk

hello-gl2文件夹下的mk文件

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := libgl2jniLOCAL_CFLAGS    := -WerrorLOCAL_SRC_FILES := gl_code.cppLOCAL_LDLIBS    := -llog -lGLESv2#标识加载/system/lib文件夹下的 liblog.so libGLESv2.so文件include $(BUILD_SHARED_LIBRARY)

更多详细的mk文件说明,请看: http://blog.csdn.net/fengshuiyue/article/details/17136139

更多相关文章

  1. Android中调用jni报错
  2. android的崩溃报告(crash dump)
  3. 【Android(安卓)Developers Training】 36. 设置文件共享
  4. Android(安卓)Studio 开发问题记录
  5. Android(安卓)JNI之动态创建native
  6. android动态加载外部资源文件
  7. centos编译安装ffmpeg支持AMR
  8. Android(安卓)Studio 教程(干货)
  9. Android(安卓)7.0的新特性

随机推荐

  1. Android release 签名大包出错
  2. Android启动模式之singleinstance的坑
  3. android 4.0以上横竖屏切换不销毁activit
  4. Android开发之adapter
  5. 【Android】 adb shell 下 setting 指令
  6. Android UI 与文本相关的控件
  7. Android HAL and JNI
  8. Android封装类似微信的顶部TitleBar弹出
  9. Android Studio 编译时dx.bat报outofmemo
  10. Android使用java的Math.Random获取随机色