android最顶层的目录结构如下:
.
|-- Makefile (全局的Makefile)
|-- bionic (Bionic含义为仿生,这里面是一些基础的库的源代码)
|-- bootloader (引导加载器)
|-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
|-- dalvik (JAVA虚拟机)
|-- development (程序开发所需要的模板和工具)
|-- external (目标机器使用的一些库)
|-- frameworks (应用程序的框架层)
|-- hardware (与硬件相关的库)
|-- kernel (Linux2.6的源代码)
|-- packages (Android的各种应用程序)
|-- prebuilt (Android在各种平台下编译的预置脚本)
|-- recovery (与目标的恢复功能相关)
`-- system (Android的底层的一些库)
本文将要分析的是build目录下的makefile和shell文件,
/build/core/definitions.mk
定义了一些函数控制编译范围:
all-makefiles-under
first-makefiles-under
all-subdir-makefiles
all-named-subdir-makefiles
/bulid/target/product/generic.mk 把工程编译到系统中
PRODUCT_PACKAGES +=
=====================================
make的内嵌函数:提供了处理文件名、变量、文本和命令的方法
比如:addprefix, addsuffix
详见:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-08.html
=====================================编译在Android环境下运行的可执行文件:
在源文件目录下创建android.mk,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloa
LOCAL_SRC_FILES := hello-a.c
include $(BUILD_EXECUTABLE) //指定我们现在要生成一个可执行的文件
在Makefile文件中打印Log:
$(warning xxxxx) //或者
$(error xxxxx) //输出变量方式为:
$(warning $(XXX))