我們在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/***x.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):
......
ifnot 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 ***:
***x
elif o in ("-n", "--no_prereq"):
options.omit_prereq = true
好像我們只需要告訴py,傳遞個引數--no_prereq,那麼就不會加上時間戳的校驗了
我們繼續尋找,在 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中便不會檢測時間戳了。
android OTA 公升級包含增量公升級
ota 全稱over the air ota 公升級是android 系統提供的標準軟體公升級方式。它功能強大,提供了完全公升級 增量公升級模式,可以通過 sd 卡公升級,也可以通過 網路公升級。這裡,首先介紹sd卡公升級,網路公升級原理和sd卡大致一樣.下面我們將介紹這一過程.在公升級前,我們要準...
android OTA包遮蔽時間戳
android的ota公升級包中,裡面有乙個公升級指令碼,該指令碼會檢測recovey映象的編譯時間和ota包的編譯時間,如果recovey比ota包的時間要新的話,公升級便會失敗。方法一 直接遮蔽比較函式,到build tools releasetools ota from target file...
Ubuntu常用公升級包
在ubuntu上用公升級的方法可以迅速地安裝gcc sudo apt get install g 輸入管理員密碼後,就可以安裝g 了 安裝完成後,執行 gcc v 可以看到安裝的gcc的版本號。同樣地安裝mysql sudo apt get install mysql server sudo apt...