现在的位置: 首页 > 综合 > 正文

Android 增加包的方法

2013年12月24日 ⁄ 综合 ⁄ 共 2096字 ⁄ 字号 评论关闭

转自:Android
程序开发讨论

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





抱歉!评论已关闭.