Android增加本地程序和库跟其所在路径无关,只跟Android.mk文件有关。
Android.mk中的选项参考以下文件路径:build/core/config.mk各个选项的默认值在以下文件中定义:build/core/base_rules.mk在android.mk中可以生成多个可执行的程序,动态库或者静态库。1.编译程序在android.mk中编译一个可执行程序的模板如下:=================================================#Test ExeLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \ //此处加入源代码 main.cLOCAL_MODULE:=test_exe //表示模块最终的名称#LOCAL_C_INCLUDES := //此处加入头文件路径#LOCAL_STATIC_LIBRARIES := //此处加入所需要连接的静态库(*.a)的名称#LOCAL_SHARED_LIBRARIES := //此处加入所需要连接的动态库(*.so)的名称include $(BUILD_EXECUTABLE) //表示以一个可执行程序的方式进行编译=================================================编译目标机的可执行文件,静态库,动态库使用的宏:include $(BUILD_EXECUTABLE) //表示编译可执行文件include $(BUILD_STATIC_LIBRARY) //表示编译静态库include $(BUILD_SHARED_LIBRARY) //表示编译动态库编译主机的可执行文件,静态库,动态库使用的宏:include $(BUILD_HOST_EXECUTABLE) //表示编译主机可执行文件include $(BUILD_HOST_STATIC_LIBRARY) //表示编译主机静态库include $(BUILD_HOST_SHARED_LIBRARY) //表示编译主机动态库指定最后目标安装路径的宏: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.
注意:如不指定LOCAL_MODULE_PATH,则默认使用的宏为TARGET_OUT。静态库不存在目标路径的问题。
这里与windows有区别,windows是自动选择路径,静态库(.lib文件)就生成到lib目录下,动态库(.dll文件)就生成到target目录下。而且进入系统也不指定具体在什么地方,而android的系统是由三个部分组成。 2 .复制文件复制的文件内容包括:配置脚本,资源文件,预制的程序和库等,有时也会创建目录。 示例: 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) DIRS := $(addprefix $(TARGET_OUT)) /, txt $(DIRS); @echo Directory: $@ @mkdir -p $@上述脚本实现如下动作:(1)在system中创建目录txt(2)在当前路径下将A.txt和B.txt复制到system/txt目录中