如何在Android中向system.img添加多个预建文件?

时间:2016-01-20 03:00:45

标签: android

我的构建系统是Android 6.0。我正在从源头构建AOSP。我想在生成的system.img中包含多个预建文件。 我知道我可以使用device.mk中的PRODUCT_COPY_FILES复制预建文件。但是,由于某些原因,我无法修改系统文件。 我怎么能在Android.mk中做到这一点?

例如,我想将test1.txt和test2.txt复制到/ system / etc.我写了一个Android.mk,如下所示。

SMB_CONFIG_FILES := test1.txt test2.txt
SMB_CONFIG_TARGET := $(addprefix $(TARGET_OUT)/etc/, $(SMB_CONFIG_FILES))

ALL_PREBUILT += $(SMB_CONFIG_TARGET)                    
$(SMB_CONFIG_TARGET) : $(TARGET_OUT)/etc/% : $(LOCAL_PATH)/% | $(ACP)
    $(transform-prebuilt-to-target)

然后我运行'make'来构建整个源代码,但它显示

build/core/main.mk:517: *** Some files have been added to ALL_PREBUILT.
build/core/main.mk:518: *
build/core/main.mk:519: * ALL_PREBUILT is a deprecated mechanism that
build/core/main.mk:520: * should not be used for new files.
build/core/main.mk:521: * As an alternative, use PRODUCT_COPY_FILES in
build/core/main.mk:522: * the appropriate product definition.
build/core/main.mk:523: * build/target/product/core.mk is the product
build/core/main.mk:524: * definition used in all products.
build/core/main.mk:525: *
build/core/main.mk:526: * unexpected test1.txt in ALL_PREBUILT
build/core/main.mk:526: * unexpected test2.txt in ALL_PREBUILT
build/core/main.mk:527: *
build/core/main.mk:528: *** ALL_PREBUILT contains unexpected files.  Stop.

似乎我无法在Android 6.0中使用ALL_PREBUILT。 我该如何解决这个问题?谢谢。

2 个答案:

答案 0 :(得分:0)

如错误消息详细信息,请在 build / target / product / core.mk 中添加PRODUCT_COPY_FILES。

将以下行添加到 build / target / product / core.mk 文件中,并将下面的<dir>替换为$ANDROID_BUILD_TOP的相对目录,即{AOSP的根目录}目录,到test1.txt和test2.txt文件:

PRODUCT_COPY_FILE += \
    <dir>/test1.txt:system/etc/test1.txt \
    <dir>/test2.txt:system/etc/test2.txt

答案 1 :(得分:0)

您可以在设备配置中使用PRODUCT_COPY_FILES += <my_files>device/<vendor>/<device_name>)。您可以添加这些文件的相关文件包括: device.mkdevice-common.mk<device_name>.mk

另一种方法是在BUILD_PREBUILT中使用Android.mk规则。这是一个如何看待这样一个文件的例子:

LOCAL_PATH := $(my-dir)

########################
include $(CLEAR_VARS)

LOCAL_MODULE := platform.xml

LOCAL_MODULE_CLASS := ETC

# This will install the file in /system/etc/permissions
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

当然,如果要复制多个文件,可以在for循环中生成多个预编译。例如。将上述代码放在单独的makefile中,将platform.xml替换为$(MY_MODULE),并将{for循环添加到Android.mk,并设置MY_MODULE := <my_module>include <my_separate_makefile>。< / p>

但这对我来说就像一个解决方法。我建议您在产品配置中使用PRODUCT_COPY_FILES += <my_files>