分享

[z]Android 增加包的一些需注意的问题

 techres 2012-04-01
Makefile 等作出改动,只需要增加自己的目录就可以了,核心的内容是一个Android.mk 的文件。 
 
I
编译可执行程序 
编译可执行程序是最简单的,用一个小程序可以很方便开发中的测试。建立一个目录包含两个文件,目录的名称为test_exe ,两个文件为Android.mkmain.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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多