屏蔽android ota升级包时间戳比较
16lz
2021-01-25
我们在recovery升级的时候,经常提示这样的错误:
Installing update...
Can't install this package (Tue Jun 27 12:29:30 CST 2017) over newer build (Mon Jun 26 17:20:32 CST 2017)
E:Error in /udisk/xxxx.zip
(Status 7)
意思就是,我们不能从新的版本升级到旧的系统,有个时间戳的比较。
我们来看看这个时间戳校验是怎么工作的:
我们发现在升级包的升级脚本中updater-script中有段校验:
[python] view plain copy- (!less_than_int(1498537770, getprop("ro.build.date.utc"))) || abort("E3003: Can't install this package (Tue Jun 27 12:29:30 CST 2017) over newer build (" + getprop("ro.build.date") + ").");
原来就是在这里进行的时间戳校验。
我们继续寻找,这个校验是在哪里加上去的呢,我们在 build/tools/releasetools/ota_from_target_files 发现了如下:
[python] view plain copy- def WriteFullOTAPackage(input_zip, output_zip):
- ......
- if not OPTIONS.omit_prereq:
- ts = GetBuildProp("ro.build.date.utc", OPTIONS.info_dict)
- ts_text = GetBuildProp("ro.build.date", OPTIONS.info_dict)
- script.AssertOlderBuild(ts, ts_text)
- def option_handler(o, a):
- if xxx:
- xxxx
- elif o in ("-n", "--no_prereq"):
- OPTIONS.omit_prereq = True
我们继续寻找,在 build/core/Makefile 中发现了对ota_from_target_files的调用:
[plain] view plain copy- $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS)
- @echo "Package OTA: $@"
- $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
- ./build/tools/releasetools/ota_from_target_files -v \
- $(BLOCK_BASE) \
- $(UPDATE_DTB) \
- -p $(HOST_OUT) \
- -k $(KEY_CERT_PAIR) \
- $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
- $(SECUREBOOT_MODE) \
- $(DM_VERITY) \
- $(SECURITY_DM_VERITY_MODE_WITH_TOOL) \
- $(BUILT_TARGET_FILES_PACKAGE) $@
- .PHONY: otapackage
- otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
好了,我们在
./build/tools/releasetools/ota_from_target_files 传入参数--no_prereq即可,那么编译生成的升级包不再包含时间戳校验。
除了这个方法呢,我们提供如下方法二。
方法二:直接屏蔽比较函数,到build/tools/releasetools/ota_from_target_files这个脚本,注释掉函数 script.AssertOlderBuild(ts, ts_text)调用,这样编译生成的OTA中便不会检测时间戳了。
更多相关文章
- OkHttp源码解析
- Android(安卓)MediaCodec参数笔记
- setBackgroundDrawable和setBackgroundResource的区别
- android中文api(85)——HorizontalScrollView
- android 得到是否插入耳机设备
- Android开启闪光灯的方法 Android打开手电筒功能
- Android调用本机程序执行文件的方法
- ViewFlipper 中文文档
- Android实现自定义时钟控件