Makefile 等作出改动,只需要增加自己的目录就可以了,核心的内容是一个Android.mk 的 文件。 
 
I 编译可执行程序 
编译可执行程序是最简单的,用一个小程序可以很方便开发中的测试。建立一个目录包含两个文件,目录的名称为test_exe ,两个文件为Android.mk 和main.c 
这个目录放在Android 下 面的任意目录编译的结果都是一样的,例如,原本build 目录中的东西是不会被编译的,但是如果这 个子目录放在build 目录中也会被编译,这是因为编译的过程只是寻找Android.mk 文件。 
Android.mk: 
out/target/product/generic/obj/EXECUTABLES 目录中,名称为test_exe_intermediates 。 
test_exe_intermediates 
|-- LINKED 
| `-- test_exe (没有 stripped 过的可执行程序) 
|-- main.P (文本文件,编译的路径信息) 
|-- main.o (目 标文件) 
`-- test_exe (stripped 过 的可执行程序) 




II 编译静态库和动态库 
静态库和动态库 的编译方法和可执行程序类似,只需要改动几个宏就可以: 
静态库: 
动态库: 
注意可以使用宏TARGET_PRELINK_MODULE := false ,禁止Prelink 
静态库生成的目标路径: 
out/target/product/generic/obj/SHARED_LIBRARIES 
libtest_static_intermediates 
|-- helloworld.P 
|-- helloworld.o 
`-- libtest_static.a 
(静态库没有是否剥离符号的问题) 
动态库生成的目标路径: 
out/target/product/generic/obj/STATIC_LIBRARIES 
libtest_shared_intermediates 
|-- LINKED 
| `-- libtest_shared.so 
|-- helloworld.P 
`-- helloworld.o 


编译模板的区别如下所示: 
目标的模板:可执行程序,动态库,静态库 
include $(BUILD_EXECUTABLE) 
include $(BUILD_SHARED_LIBRARY) 
include $(BUILD_STATIC_LIBRARY) 
如果编译本地的:可执行程序,动态库,静态库 
include $(BUILD_HOST_EXECUTABLE) 
include $(BUILD_HOST_SHARED_LIBRARY) 
include $(BUILD_HOST_STATIC_LIBRARY) 
安 装路径的问题 
LOCAL_MODULE_PATH 和LOCAL_UNSTRIPPED_PATH 增加以下可以安装到不同的文件系统: 
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED) 
文件系统的 选择: 
TARGET_ROOT_OUT : 表示根文件系统out/target/product/generic/root    
TARGET_OUT : 表示system 文 件系统out/target/product/generic/system    
TARGET_OUT_DATA : 表示data 文件系统out/target/product/generic/data 
更多的选项参考以下文件: 
build/core/config.mk 
默 认的值在以下文件中定义: 
build/core/base_rules.mk 


III 只安装的情况 
另一种情况就是不需要编译,只需要复制安装。如下所示: 
LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
copy_from := / 
A.txt / 
B.txt    
copy_to := $(addprefix $(TARGET_OUT)/txt/,$(copy_from)) 
$(copy_to) : PRIVATE_MODULE := txt 
$(copy_to) : $(TARGET_OUT)/txt/% : $(LOCAL_PATH)/% | $(ACP) 
$(transform-prebuilt-to-target) 
ALL_PREBUILT = $(copy_to) 


# create some directories    
DIRS := $(addprefix $(TARGET_OUT)/, / 
txt / 

$(DIRS): 
@echo Directory: $@ 
@mkdir -p $@ 
 
以上实际上包含了两各方面的内容一个复制文件,一个是创建目录。 
 
执行后,就会生成以下的内容: 
system/txt 
|-- A.txt 
`-- B.txt