转载地址:http://blog.csdn.net/jscese/article/details/40615801
一.PRODUCT_COPY_FILES :
这个变量就是用来标记Copy操作的,比较常见的形式如下:
#jscese cp 3g script and
PRODUCT_COPY_FILES += \
$(DEVICE_SOURCES)/3g-script/ip-up-datakey:system/etc/ppp/ip-up-datakey \
$(DEVICE_SOURCES)/3g-script/ip-down-datakey:system/etc/ppp/ip-down-datakey \
$(DEVICE_SOURCES)/3g-script/init.gprs-pppd:system/etc/ppp/init.gprs-pppd \
device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml \
#external/usb-modeswitch/usb_modeswitch.d:system/etc/usb_modeswitch.d
#PRODUCT_COPY_FILES += \
#$(DEVICE_SOURCES)/3g-script/ip-down-datakey:system/etc/ppp/ip-down-datakey
#end
可以看到 格式<source file>:<dest file> 中间用 “ : ” 隔开!
这里需要注意一点, PRODUCT_COPY_FILES 不能在 Android.mk 中使用 添加新的Copy 项!使用 PRODUCT_COPY_FILES 应该算是最常用的Copy File 的方法了,一般可直接加在 device.mk 中!
还有PRODUCT_COPY_FILES不能copy apk文件。
二 .copy_to copy_from ALL_PREBUILT
这个方法用在Android.mk中,可参考 /system/core/rootdir/Android.mk:
copy_from += etc/init.goldfish.sh
copy_to := $(addprefix $(TARGET_OUT)/,$(copy_from))
copy_from := $(addprefix $(LOCAL_PATH)/,$(copy_from))
$(copy_to) : PRIVATE_MODULE := system_etcdir
$(copy_to) : $(TARGET_OUT)/% : $(LOCAL_PATH)/% | $(ACP)
$(transform-prebuilt-to-target)
ALL_PREBUILT += $(copy_to)
ALL_PREBUILT 是一种过时的机制,已经不让用于copy新的文件了,推荐使用PRODUCT_COPY_FILES !
三 .BUILD_PREBUILT :
这种方式把文件当成编译项目,在Android.mk中copy一个file:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) \
LOCAL_MODULE := usb_modeswitch.conf \
LOCAL_MODULE_CLASS := ETC \
LOCAL_MODULE_PATH := $(TARGET_OUT)/etc \
LOCAL_SRC_FILES :=$(LOCAL_MODULE) \
include $(BUILD_PREBUILT)
上面的就是copy usb_modeswitch.conf 文件到 OUT 下面的 etc目录,这个目录常用来存放配置相关文件。
上面所有的都说的是Copy File 但是如果需要 Copy 一个文件目录下所有就需要另做操作了!
这里我们需要把这个当成一个module来处理 写进 PRODUCT_PACKAGES, 这就代表这些Module 无论如何都会被编译安装进系统。