遮蔽android ota公升級包時間戳比較

2021-08-20 13:13:54 字數 2331 閱讀 7845

我們在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...