- 浏览: 677641 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qinshubao152:
参考:http://www.see-source.com/bl ...
关于android USB Host 串口编程 -
q328965539:
哥们 我做的数据也都是错误的啊····我怎么可以知道自己otg ...
关于android USB Host 串口编程 -
hgkmail:
好文
android中跨进程通讯的4种方式 -
cczscq:
楼主,我这里有个问题!我这里有个自己制作的font.ttf,这 ...
android字体的工作原理 -
blueice1986:
既然springMVC比struts好那么多的话那struts ...
为什么有了Struts 还要Spring MVC
1 概述
大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的Makefile文件.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。
2 Android.mk的整体结构
例如一个Android.mk的内容如下:
[html] view plaincopy
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变量。它用于在开发树中查找源文件。例如:
[html] view plaincopy
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文件
大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的Makefile文件.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。
2 Android.mk的整体结构
例如一个Android.mk的内容如下:
[html] view plaincopy
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变量。它用于在开发树中查找源文件。例如:
[html] view plaincopy
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文件
发表评论
-
Android的权限机制总结
2013-12-16 11:07 23018Android 安全机制概述 ... -
Android的权限机制之—— “沙箱”机制sharedUserId和签名
2013-12-13 11:29 14704Android“沙箱”的本质是为了实现不同应用程序和进程之 ... -
AIL(Android init Language)
2013-12-03 14:16 1914AIL(init.rc) Init.rc是i ... -
Android源码下编译自己的so库
2013-11-07 17:33 2933环境:win7 64位,虚拟机ubuntu10.04,TI ... -
修改framework代码使锁屏完全透明
2013-11-04 14:30 13901,修改KeyguardViewManager.java的ma ... -
开机动画流程
2013-11-01 10:30 14171、开机动画程序bootanimation程序目录:fram ... -
Android 软件测试日志文件抓取
2013-10-17 10:43 37991 log文件分类简介 实时打印的主要有: ... -
android 驱动开发介绍
2013-10-10 11:12 7780前言 意外在网上发现了这扁文章,看后感觉很有必要分享,所 ... -
Android系统Recovery工作原理之使用update.zip
2013-09-13 11:06 97921 总述 为了方便客户日后的固件升级,本周研究 ... -
android 升级策略
2013-09-12 09:50 1170Android系统而言升级意味着二个方面的升级 一个是系 ... -
Android FactoryTest 流程
2013-09-10 17:52 2728Android内置的Factory Test(有测试模式/工 ... -
Ubuntu下ADB调试Android找不到设备的解决方法
2013-09-10 10:13 2005首先确认,我已经在的settings-application ... -
系统移植之为Android启动加速
2013-05-15 13:50 3135Android的启动速度一直以来是他的诟病,虽然现在And ... -
Android系统做了哪些优化?
2013-04-23 10:11 1460Android系统框架和上层应用是类java( ... -
CM10之Setting的快速设置面板按钮布局
2013-04-19 16:03 1842开发环境 ubuntu12.04-desktop-amd6 ... -
Android编译CPU架构体系不同引起的错误解决方法
2013-04-19 10:53 5346转至http://blog.csdn.net/canjian ... -
android系统硬件抽象层(HAL)原理及实现之原理
2013-04-17 15:48 4173Android系统硬件抽象层(HAL)原理 在androi ... -
正确了解ROM,基带,以及RIL
2013-04-17 15:45 5867一、正确了解ROM,基带,以及RIL。 1)、R ... -
Android系统开发之修改调试SystemUI
2013-04-11 10:44 3979开发环境 ubuntu12.04-desktop-amd6 ... -
下载cm10.1源码编译
2013-03-21 10:43 2830开发环境 http://dengzhangta ...
相关推荐
Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。 所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程...
标题中提到的“浅析Android平台漏洞挖掘”指的是对Android操作系统安全漏洞的分析研究。这通常包括了对Android系统中存在的安全缺陷进行发现、评估和利用的过程。Android作为一种广泛使用的移动操作系统,由于其开放...
浅析SPS CODE 2008..pptx
Android网络编程浅析.pdf
浅析人工智能体系建设.docx
浅析美国市场经济模式.docx
浅析计算机网络安全技术.doc
浅析计算机病毒及其防治.docx
浅析我国行政赔偿制度.docx
浅析电子商务安全问题.pdf
浅析中国电子商务发展.docx
从苏轼诗词浅析苏轼的人生观.doc
浅析安卓计算器的开发.pdf
浅析防火墙技术的应用.pdf
浅析图书馆管理创新.doc
浅析管理会计信息化.docx
浅析环保经济发展模式.doc
浅析法医工作风险规避.doc
浅析公共图书馆微服务.docx