Android中Android.mk文件的使用
来源:互联网 发布:淘宝网双肩女包 编辑:程序博客网 时间:2024/05/09 00:03
1 概述
大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在 Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的 Makefile文件.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。
2 Android.mk的整体结构
例如一个Android.mk的内容如下:
LOCAL_PATH:= $(call my-
dir
)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
android_media_MediaPlayer.cpp \
android_media_MediaRecorder.cpp \
android_media_MediaScanner.cpp \
android_media_MediaMetadataRetriever.cpp \
android_media_ResampleInputStream.cpp \
android_media_MediaProfiles.cpp \
android_media_AmrInputStream.cpp \
android_media_Utils.cpp \
android_mtp_MtpDatabase.cpp \
android_mtp_MtpDevice.cpp \
android_mtp_MtpServer.cpp \
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libutils \
libbinder \
libmedia \
libskia \
libui \
libcutils \
libgui \
libstagefright \
libcamera_client \
libsqlite \
libmtp \
libusbhost \
libexif
LOCAL_C_INCLUDES += \
external
/jhead
\
external
/tremor/Tremor
\
frameworks
/base/core/jni
\
frameworks
/base/media/libmedia
\
frameworks
/base/media/libstagefright/codecs/amrnb/enc/src
\
frameworks
/base/media/libstagefright/codecs/amrnb/common
\
frameworks
/base/media/libstagefright/codecs/amrnb/common/include
\
frameworks
/base/media/mtp
\
$(PV_INCLUDES) \
$(JNI_H_INCLUDE) \
$(call include-path-
for
, corecg graphics)
LOCAL_CFLAGS +=
LOCAL_LDLIBS := -lpthread
LOCAL_MODULE:= libmedia_jni
include $(BUILD_SHARED_LIBRARY)
# build libsoundpool.so
# build libaudioeffect_jni.so
include $(call all-makefiles-under,$(LOCAL_PATH))
首先必须定义好LOCAL_PATH变量。然后清除所有LOCAL_XX变量的值,当然LOCAL_PATH的值除外,然后定义源文件,头文件,接着是编译选项参数,紧接着是编译生成的文件名,最后是生成的文件类型.
3 Android.mk内的变量定义
3.1 LOCAL_PATH
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。例如:
LOCAL_PATH:= $(call my-
dir
)
宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)
3.2 include $( CLEAR_VARS)
宏CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
3.3 LOCAL_SRC_FILES
本次需要编译的源文件
3.4 LOCAL_SHARED_LIBRARIES
本次编译需要链接的动态链接库文件,即.so文件
3.5 LOCAL_STATIC_LIBRARIES
静态链接库.
3.6 LOCAL_C_INCLUDES
本次编译需要包含的头文件,一个相对于当前目录可选的路径名单,当编译所有的源文件(C,C++和汇编)时,它将被添加进include搜索路径。例如:
LOCAL_C_INCLUDES := sources/foo
或者甚至:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
3.6 LOCAL_LDLIBS
本次编译的链接选项,相当于gcc -l后的参数
3.7 LOCAL_CFLAGS
同样是编译选项,相当于gcc -O后面的参数
3.8 LOCAL_MODULE
生成的模块名,这个变量必须定义,表示make后将要生成的文件的名字
3.9 LOCAL_PACKAGE_NAME
apk文件名
4 include
include可Android多以这样的形式出现,如:include $( CLEAR_VARS),include $(BUILD_SHARED_LIBRARY).其实这个include可以理解成"执行"的意思,那么执行什么呢?当然是看后边的宏了.
宏CLEAR_VARS已经在3.2节中介绍过了,表示清除一些变量.
宏BUILD_SHARED_LIBRARY表示生成共享库,即生成.so文件
因此include $(BUILD_SHARED_LIBRARY)就是指定在/system/lib/目录下生成一个lib$(LOCAL_MOUDULE).so文件,同样类型的宏如下:
- CLEAR_VARS 清除LOCAL_xxx变量
- BUILD_SHARED_LIBRARY 在/system/lib/目录下生成lib$(LOCAL_MOUDULE).so文件
- BUILD_STATIC_LIBRARY 生成lib$(LOCAL_MOUDULE).a文件
- BUILD_EXECUTABLE 在/system/bin/目录下生成可执行文件
- BUILD_PACKAGE 编译成一个apk文件
原文链接:http://blog.csdn.net/flydream0/article/details/7164501
- Android中Android.mk文件的使用
- android.mk文件的使用
- Android.mk文件的使用
- android中Android.mk文件的写法
- Android NDK 中mk文件的书写
- android中MK文件的写法
- Android中各类.mk文件的编写
- android使用mk文件的进阶
- android使用mk文件的进阶
- Android.mk 中 动态库的使用
- android.mk的使用
- Android.mk的使用
- Android mk文件使用备忘录
- android中NDK的android.mk文件详解
- Android.mk文件的环境变量
- Android.mk文件的编写
- Android.mk文件的分析
- Android.mk文件的理解
- 函数编写规范
- 可重入函数
- Linux 内核编译详解
- Eclipse总出这个错误You must restart adb and Eclipse
- 详解_C语言可变参数_va_list和_vsnprintf及printf实现
- Android中Android.mk文件的使用
- 电机控制,电子噪声对策
- 一些CSS文本框样式
- android : framelayout 研究
- 冷笑话
- JS正则验证邮箱的格式
- rails3beta4 + devise + cancan 打造权限管理系统
- 最近集成用到了Quartz,把解决的问题以及解决方法列在下面
- 在Eclipse中建立和调用Android公共库