Android下Android.mk文件解析

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

时间: 2024-10-25 05:51:26

Android下Android.mk文件解析的相关文章

基于Android2.3.5系统:Android.mk文件解析

*************************************************************************************************************************** 作者:EasyWave                                                                                                               时间:2

Android.mk文件解析

 一.一个简单的Android.mk文件如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := native-interface LOCAL_SRC_FILES := video.c \ adpcm.c \ audio.c \ sip.c \ network.c \ circular_queue.c \ native_interface.c LOCAL_SHARED_LIBRARIES := libosip

Android之旅十四 android中的xml文件解析

在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件:person.xml <? xml version="1.0" encoding="UTF-8"? > <persons> <person id="001"> <name>zhangsan</na

cocos2d-x 2.x.x 新建工程 android下的 org文件夹丢失

cocos2d-x 2.x.x 新建工程之后... 打开android项目..会发现src下没有org文件... 解决方法一: cocos2d-x-2.2.0\cocos2dx\platform\android\java\src 把这个目录下org文件复制到android下的src里. 解决方法二: 在eclipes中打开android项目. 对着项目右键->properties->Java Build Path->Source. 选中Line Source. 在location里路径c

Android Studio之Gradle文件解析

本文转载自stormzhang的博客 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. Gradle 基本概念 下面就以我的开源项目 9GAG 来详细讲解下和Gradle相关的知识, 和Gradle相关的几个文件一般有如下几个: 红色标记部分从上到下咱们来一步步分析: 1. 9GAG/app/build.gradle 这个文件是app文件夹下这个Mod

Android进阶之XML文件解析

xml序列化是把内存数据写入硬盘或SD卡. XML文件解析的方式: 1.dom解析,生成一个树状结构,并全部加入内存,在内存修改树状结构的节点即可.但是消耗内存大. 2.sax解析 基于事件的解析方式.速度快,效率高,但是不能倒退. 3.pull解析 基于事件的解析 pull解析方式: 第一步,初始化解析器,设置要解析的数据流.(此刻指向文档的开始部分) 第二步,得到事件. 第三步,总的节点集合. 第四步,单个节点. public class PullXMLTools { public Pull

Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想.有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,十全十美的还真没找到.因此我也是放弃了在网上找现成代码的想法,自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下.相信在阅读完本篇文章之后,大

跟我学Android之十二 文件解析与处理

本章内容 第1节  File Explorer操作 第2节  SharedPreferences 第3节  普通文件操作 第4节  SD卡读写操作 本章目标 熟练掌握FileExplorer的用法 熟练掌握SharedPreference文件操作. 熟练掌握普通文件的读写操作. 熟练掌握SD卡读写操作的方法. FileExplorer操作 查看文件结构 创建文件夹 导入文件 导出文件及文件夹 删除文件 SharedPreferences概述 SharedPreferences主要用于保存类似配置

[转]Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想.有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,十全十美的还真没找到.因此我也是放弃了在网上找现成代码的想法,自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下.相信在阅读完本篇文章之后,大