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