一.build.fingerprint
build.fingerprint是 Android 系统中的一个属性,它用于提供设备的唯一标识。这个属性的值由设备的硬件和软件信息组成,是由设备的多个信息拼接而成的,包括但不限于制造商、设备型号、Android 版本号等。
build.fingerprint的值通常是在存储在build.prop文件中的,通常在Android设备中的/system目录下,编译完成后一般在out/target/product/产品名/的层级目录下。
build.prop文件一般用来存储设备的基本信息,这些信息一般是制造厂商,还有设备名称等,这些用于设备的识别和兼容性 ,在构建成功的代码中,在out/target/product/产品名/system或out/target/product/产品名/vendor(该目录是厂商的私有代码目录)下都有build.prop文件,在这些文件中必须保持 build.prop文件的内容信息一致,才能保证设备和谷歌 的一系列认证都没有问题。除此之外,该文件还包含了很多定义的系统属性,如屏幕密度等等。
二.如何修改build.fingerprint
build.fingerprint一般是从build_fingerprint.txt文件 中拿到的值,如果只是修改build.fingerprint的值的话,每次修改后查看build_fingerprint.txt文件即可。如果要修改其他属性的值则需要查看build.prop文件,一般前两行会给出注释,注释中会写清楚这些属性值来源与哪个文件。
在Android 9上,build.prop的内容一般会先从/build/make/tools/buildinfo.sh 中获取,然后再从build/mtk(芯片厂商这里以mtk为例)/产品名/system.prop中获 取,最后获取ADDITIONAL_BUILD_PROPERTIES 变量的值,需注意这个变量的值是在build/make/core/main.mk中追加的。
所以修改build.fingerprint可以从buildinfo.sh中修改。
查看buildinfo.sh文件的内容:
bash
echo "# Do not try to parse description, fingerprint, or thumbprint"
echo "ro.build.description=$PRIVATE_BUILD_DESC"
echo "ro.build.fingerprint=$BUILD_FINGERPRINT"
if [ -n "$BUILD_THUMBPRINT" ] ; then
echo "ro.build.thumbprint=$BUILD_THUMBPRINT"
fi
echo "ro.build.characteristics=$TARGET_AAPT_CHARACTERISTICS"
发现build.fingerprint的值是从BUILD_FINGERPRINT变量中赋值过来的,该值位于Makefile文档中。
题外话:如果想修改ro.product.model等变量的值,可以直接在buildinfo.sh文件中修改。
举例:
bashecho "ro.build.tags=你想要的值" echo "ro.build.flavor=你想要的值" if [ -n "$BOARD_BUILD_SYSTEM_ROOT_IMAGE" ] ; then echo "ro.build.system_root_image=你想要的值" fi if [ -n "$AB_OTA_UPDATER" ] ; then echo "ro.build.ab_update=你想要的值" fi echo "ro.product.model=你想要的值" echo "ro.product.brand=你想要的值" echo "ro.product.name=你想要的值" echo "ro.product.device=你想要的值"
所以只需要修改Makefile文件中的BUILD_FINGERPRINT的值即可。代码如下:
makefile
# The string used to uniquely identify the combined build and product; used by the OTA server.
# 判断BUILD_FINGERPRINT是否为空
# 如果是则执行下一句
# strip函数用于去除变量的前导和尾随空格
ifeq (,$(strip $(BUILD_FINGERPRINT)))
# 判断HAS_BUILD_NUMBER是否为FALSE,一般都是FALSE
# 可查看make/core/version_defaults.mk文件
ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
BF_BUILD_NUMBER := $(USER)$$($(DATE_FROM_FILE) +%m%d%H%M)
else
BF_BUILD_NUMBER := $(file <$(BUILD_NUMBER_FILE))
endif
BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
endif
# unset it for safety.
BF_BUILD_NUMBER :=
可以看到BUILD_FINGERPRINT是由多个变量的值组成的,如果想修改直接改为自己想要的值即可。
javascript
BUILD_FINGERPRINT := $(你想要的值)/$(你想要的值)/$(你想要的值):$(你想要的值)/$(你想要的值)/$(你想要的值):$(你想要的值)/$(你想要的值)
总得来说,在A9上修改相关的设备信息值,多半都是在Makefile、main.mk和buildinfo.sh文件中进行修改。