[转载]浅析Android下的Android.mk文件 - 放飞梦想,成就未来 - 博客频道 - CSDN.NET

[转载]浅析Android下的Android.mk文件 – 放飞梦想,成就未来 – 博客频道 – CSDN.NET.

1 概述

大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在 Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的 Makefile文件.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。

2 Android.mk的整体结构

例如一个Android.mk的内容如下:

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_SRC_FILES:= \
  4.     android_media_MediaPlayer.cpp \
  5.     android_media_MediaRecorder.cpp \
  6.     android_media_MediaScanner.cpp \
  7.     android_media_MediaMetadataRetriever.cpp \
  8.     android_media_ResampleInputStream.cpp \
  9.     android_media_MediaProfiles.cpp \
  10.     android_media_AmrInputStream.cpp \
  11.     android_media_Utils.cpp \
  12.     android_mtp_MtpDatabase.cpp \
  13.     android_mtp_MtpDevice.cpp \
  14.     android_mtp_MtpServer.cpp \
  15. LOCAL_SHARED_LIBRARIES := \
  16.     libandroid_runtime \
  17.     libnativehelper \
  18.     libutils \
  19.     libbinder \
  20.     libmedia \
  21.     libskia \
  22.     libui \
  23.     libcutils \
  24.     libgui \
  25.     libstagefright \
  26.     libcamera_client \
  27.     libSQLite \
  28.     libmtp \
  29.     libusbhost \
  30.     libexif
  31. LOCAL_C_INCLUDES += \
  32.     external/jhead \
  33.     external/tremor/Tremor \
  34.     frameworks/base/core/jni \
  35.     frameworks/base/media/libmedia \
  36.     frameworks/base/media/libstagefright/codecs/amrnb/enc/src \
  37.     frameworks/base/media/libstagefright/codecs/amrnb/common \
  38.     frameworks/base/media/libstagefright/codecs/amrnb/common/include \
  39.     frameworks/base/media/mtp \
  40.     $(PV_INCLUDES) \
  41.     $(JNI_H_INCLUDE) \
  42.     $(call include-path-for, corecg graphics)
  43. LOCAL_CFLAGS +=
  44. LOCAL_LDLIBS := -lpthread
  45. LOCAL_MODULE:libmedia_jni
  46. include $(BUILD_SHARED_LIBRARY)
  47. # build libsoundpool.so
  48. # build libaudioeffect_jni.so
  49. 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变量。它用于在开发树中查找源文件。例如:

  1. 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文件

 

2
0
主题推荐
android 源代码 编译器 汇编 结构
猜你在找
android NDK的androidmk文件的详解
cookie 保存用户名密码
关于《FantasyWarrior3D》开源项目编译问题的补充说明
多角度分析为什么 Linux 的硬连接不能指向目录
make编译Qt原码时出现 usrbinld cannot find -lXrender 问题的解决方法
cocos2dx22添加音乐音效以及设置音量
GNU makefile 指南
Android-OpenCV调用CvSmooth实现高斯模糊
SaaS架构设计
如何在Ubuntu111032位下编译Android40源码图文
查看评论
1楼 木易小舟 2013-03-15 11:14发表 [回复]
谢谢, 文章被转载到:http://blog.csdn.net/acanoe/article/details/8676967
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
  • 访问:419507次
  • 积分:5477
  • 等级:
  • 排名:第1805名
  • 原创:113篇
  • 转载:11篇
  • 译文:7篇
  • 评论:322条
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏