Android 9.0 如何在编译出来system目录下面新增wq.prop文件
一、在如下目录下面创建一个脚本文件wqinfo.sh
代码路径:build/make/tools/wqinfo.sh
#!/bin/bash
echo "persist.sys.custom.test=123"
二、在Makefile文件中添加需要编译的脚本
代码路径:android/build/make/core/Makefile
1、写一个脚本,并且定义一个变量,把该脚本的路径赋值给该变量
BUILDINFO_SH := build/make/tools/buildinfo.sh
WQINFO_SH := build/make/tools/wqinfo.sh
VENDOR_BUILDINFO_SH := build/make/tools/vendor_buildinfo.sh
2、定义一个wq.prop
intermediate_system_build_prop := $(call intermediates-dir-for,ETC,system_build_prop)/build.prop
intermediate_wq_build_prop := $(call intermediates-dir-for,ETC,system_build_prop)/wq.prop
3、定义一个编译出来的wq.prop的目录是system/wq.prop
# build.prop
INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)
INSTALLED_WQ_PROP_TARGET := $(TARGET_OUT)/wq.prop
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_WQ_PROP_TARGET)
4、把wqinfo.sh脚本中的内容遍历拷贝到wq.prop文件中
$(hide) cat $(INSTALLED_ANDROID_INFO_TXT_TARGET) | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' >> $@
$(hide) build/make/tools/post_process_props.py $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_PROPERTY_BLACKLIST)
wq_prop_file := $(TARGET_WQ_PROP)
$(intermediate_wq_build_prop): $(WQINFO_SH) $(wq_prop_file)
@echo Target wqinfo: $@
@mkdir -p $(dir $@)
$(hide) echo > $@
bash $(WQINFO_SH) >> $@
build_desc :=
$(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET)
@echo "Target build info: $@"
$(hide) grep -v 'ro.product.first_api_level' $(intermediate_system_build_prop) > $@
ifdef INSTALLED_RECOVERYIMAGE_TARGET
$(hide) echo ro.expect.recovery_id=`cat $(RECOVERYIMAGE_ID_FILE)` >> $@
endif
$(INSTALLED_WQ_PROP_TARGET): $(intermediate_wq_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET)
@echo "Target build info: $@"
$(hide) grep -v 'ro.product.first_api_level' $(intermediate_wq_build_prop) > $@
5、添加该变量INSTALLED_WQ_PROP_TARGET
include $(BUILD_SYSTEM)/sdk_font.mk
deps := \
$(target_notice_file_txt) \
$(tools_notice_file_txt) \
$(OUT_DOCS)/offline-sdk-timestamp \
$(SYMBOLS_ZIP) \
$(COVERAGE_ZIP) \
$(INSTALLED_SYSTEMIMAGE) \
$(INSTALLED_QEMU_SYSTEMIMAGE) \
$(INSTALLED_QEMU_VENDORIMAGE) \
$(INSTALLED_USERDATAIMAGE_TARGET) \
$(INSTALLED_RAMDISK_TARGET) \
$(INSTALLED_SDK_BUILD_PROP_TARGET) \
$(INSTALLED_BUILD_PROP_TARGET) \
$(INSTALLED_WQ_PROP_TARGET) \
$(ATREE_FILES) \
$(sdk_atree_files) \
$(HOST_OUT_EXECUTABLES)/atree \
$(HOST_OUT_EXECUTABLES)/line_endings \
$(SDK_FONT_DEPS)
三、在property_service.cpp文件中加载该文件wq.prop
代码路径:android/system/core/init/property_service.cpp
void load_system_props() {
load_properties_from_file("/system/build.prop", NULL);
load_properties_from_file("/odm/build.prop", NULL);
load_properties_from_file("/vendor/build.prop", NULL);
load_properties_from_file("/system/wq.prop", NULL);
load_properties_from_file("/factory/factory.prop", "ro.*");
load_recovery_id_prop();
}
最后编译出来会在system下面产生一个wq.prop文件