當前位置:首頁 » 網頁前端 » ota腳本
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ota腳本

發布時間: 2022-06-28 01:03:16

『壹』 第三方rec刷入後可以ota升級嗎

1、首先聲明 官方OTA升級包是可以用第三方REC刷入的!並且不會雙清! 2、官方OTA升級包下載之後放在哪? 就在手機存儲跟 目錄下 的 .OTA文件夾中。用第三方REC升級的時候 注意把.OTA文件夾中的.zip升級包取出,不然用官方rec升級失敗後 .ota中的文件會自動刪除。 3、OTA升級可不可以跨版本? 可以的,官方OTA升級會自動把所有 升級包都下載到.ota下 然後一個一個刷入。例如你的版本是0530,那你升級到0630 就會下載兩個升級包一個0624(內核號8545)的一個0630(內核號8704)的。你把相應的刷機包取出來 用第三方REC按先後順序即可升級! 4、OTA升級為什麼會失敗? OTA 升級失敗主要原因是 你改過系統文件,比如刷了非該版本的基帶,刷了GMS(google服務框架)包,都可能造成OTA升級失敗! OTA升級包 在更新之前 會校驗系統原始文件之類的,發現和升級包腳本文件簽名不一樣的時候 會報錯提示校驗失敗(你用第三方rec刷 OTA升級包的時候報錯會顯示詳細信息,那個文件校驗失敗) 5、如何解決OTA升級系統文件校驗失敗? 兩種方案: 1 、把相關系統文件還原成該ROM原始版本 2、修改OTA升級包中的 腳本文件,把相關校驗內容刪除!具體操作方法 如下: 打開zip升級包,進入META-INF\com\google\android目錄下 修改updater-script文件 並替換,例如下圖: 你用第三方REC刷OTA升級包的時候如果報錯,你就到這個腳本裡面找相應的語句然後幹掉即可! 6. 所謂root之後OTA升級會失敗,會出錯等等 我覺得不見得,ota升級說白了只不過是向系統分區內寫文件,替換系統文件之類的操作,而root操作也是向系統分區中寫幾個文件而已,一個是BIN目錄 下的SU,另外一個是一個apk程序,一般叫做授權管理(superuser或supersu),而root失敗往往是因為bin目錄下的su文件跟 linux內核對不上 導致root失敗。 ota升級之前會去bin目錄下找su,來確定本機是否root過,root過就彈出一個嚇人的警告,我覺得這只不過是官方免責的手段罷了!

『貳』 酒店如何通過OTA更好地營銷

酒店哥來跟您聊聊,酒店OTA運營應該怎麼做營銷


酒店要通過OTA做營銷,一般都可分為5個部分。在回答問題之前,我們先來明確三點:

1、 營銷的目的是引流。

2、 營銷的本質就是傳播。

3、 理想的營銷是讓流量帶來更多的流量。

這三點分別可以用來回答:我們為什麼要做營銷?營銷到底是什麼?什麼才算是一個好的營銷活動?


1、 確立營銷目標——要做什麼樣的營銷

在確立一項工作之前,我們都得先確立一個目標。換而言之,我們的營銷要達到一個什麼樣的效果。

目標的確立不僅可以為我們的前期策劃立一個標桿,在後期做活動復盤的時候,也會有一個對比的標桿,實際效果與預期相比是達到了還是差多少,對比之後可以看到這次活動的不足之處或者值得其他項目借鑒的經驗總結。


2、 營銷的節點選擇——營銷如何借勢

考量時間節點的維度,一來是為營銷活動找噱頭,也就是借勢。二來,節點日推出營銷活動獲取的點擊量可能會多一些,整體活動效果可能會好一點。

比如今年的國慶節,又恰逢建國70周年,那麼緊跟這個節點,無論是營銷的氛圍還是用戶的參與度,這個節點都是一個不容錯過的營銷選擇。此外,還有9月初的開學季、攜程推出的99酒店節、以及攜程20周年慶等等節點,都可以成為營銷活動推廣的選擇。


3、 營銷的客戶群體——營銷面向的是誰

當活動的目標、節點(借勢點)確定好了之後,對營銷的目標客群也要有一個把控。如何去把控呢?

明確了我們的營銷目標是做傳播引流,那麼接下來就要考慮我們去哪裡引流?目標客群是哪類人?他們的消費偏好是什麼……

這里可能有一個誤區,很多人在做營銷時可能都會忽略。我們做OTA運營,使用的平台是攜程、去哪兒、飛豬、同程藝龍等等,要知道不同的平台的用戶群體是不一樣的,不同的平台的規則也是不一樣的,如果我們只制定一個營銷策劃,然後把這個營銷活動鋪到各個平台上,那麼可能在某個平台上取得的效果好,其他平台的效果可能不太理想。

如何去改變呢?

首先你得明確不同平台的運營規則。

接著你得對不同平台的受眾做一個分析,對平台用戶進行用戶畫像,了解這類用戶的消費偏好。

最後再根據不同平台的不同用戶的行為偏好制定一個特定的營銷方案。

如果能做到這三步,也就做到了我們所謂的精準營銷,做到了精準營銷,精準引流還會遠嗎?


4、 營銷的類型——營銷選擇的方式是什麼

營銷的本質是傳播,那麼既然是傳播,傳播的類型有很多,能讓我們傳播出去的吸引人的內容有很多。

對於酒店人來說,做OTA運營的營銷,常見的方式就是促銷、打折、優惠活動等等。大家在選擇營銷的方式的時候可以多樣化一些,不必太單一。例如:

不同的房型給出不同的價格優惠

不同的價格帶給出不一樣的優惠方式(打折優惠、連住優惠、早鳥價等等)

不同的平台制定不同的促銷方式

……


5、 營銷的復盤——營銷的效果怎麼樣?如何改進

營銷活動推出去之後,不管效果是否達到預期,都要盡快對營銷活動做一個活動的復盤和評估。

營銷的活動是否達到預期?

如果沒有,問題出在了哪一個環節?

如果達到了,那麼超出預期的部分是怎麼做到的?

整個過程中有沒有哪一個環節需要改進或加強?

……

以上,就是要做一個營銷的整體思路。不僅僅是我們做OTA平台的營銷,我們在做線下的營銷推廣也需要從這5個方面去考量,當然,這5個方面只是一個參考的考量維度,對於不同類型不同品類的酒店,考量的維度會有所不同。

總體來說,前期的分析和目標確定,中期的活動策劃和執行,後期的復盤和整體評估,都是一個完整的營銷活動不可或缺的。



三句話了解酒店哥

  • OTA代運營標桿服務商,搞定酒店線上生意

  • 深耕酒店營銷運營行業7年,服務超過100家門店,培訓超過5000酒店人,擁有大量優秀案例

  • 酒店哥服務項目線上業績至少翻倍,更有線上業績十倍增長項目

『叄』 Space☆Dandy的動畫製作

原創太空喜劇《Space☆Dandy》的導演渡邊信一郎之前曾執導過《太空牛仔》等太空、科幻題材作品。在2013年8月10日美國Otakon的Q&A提問環節上,導演渡邊信一郎透露動畫將由BONES製作,並在2014年1月開播 ,會上還公布了部分動畫主創人員名單;一周後,動畫官網開通,主製作和劇情簡介得到披露 ;8月底,正式PV、主題曲公開 ;10月,公開詳細聲優 。而隨後官方更是公布了包括20名音樂製作的,總數多達86人的,堪稱豪華的主創陣容 ,而且最重要的是,本作的幕後陣容不僅人數眾多,而且大部分都是大家非常熟悉的實力派強將。新公布的3名負責腳本創作的作者分別是《屍體的帝國》的作者、新銳科幻小說作家圓城塔,創作了多部日劇的腳本家森迅史,還有《反叛的魯魯修》的腳本家大河內一樓。這3名不同風格的腳本家將與上野喜美子、佐藤大、信本敬子共同創作腳本。在本作的製作陣容中,我們可以看到大河原邦男、大友克洋、谷口悟朗、千羽由利子、中田榮治、宮武一貴、湯淺政明等動畫界具有代表性的製作人員 ,以及山本沙代、宮地昌幸等才華橫溢的新銳,活躍在《福音戰士新劇場版》中的林明美等優秀的製作人員也將參與到本作的製作中,田島昭宇、寺田克也這兩名在海外知名度也很高的漫畫家也將參與製作本作。
可以說這樣的製作陣容在TV動畫中是前所未有的,加之這部動畫採用的是前後聯系不大「單元劇」的模式(部分集數間存在伏筆,但單獨來看不影響理解劇情),使得這部動畫更像是一個平台,各路人馬各顯神通,在一話之中不受干涉地盡情發揮自己的想像力與創造力。
接下來在12月,官方公開了第二段歐美向PV ;12月底,冒頭10分鍾 釋出;2014年1月,前13集客串聲優(Guest)名單 披露。
而到了2014年3月,第一季完結之後,官方推特也宣布第二季將在7月開播 ,2014年6月,第二季PV公開 。 總監督:渡邊信一郎
監督:夏目真悟
腳本:上野貴美子、佐藤大、信本敬子、円城塔、森迅史、大河內一樓
角色設計:伊藤嘉之
宇宙船設計:ロマン・トマ
美術監督::河野羚
色彩設計::小針裕子
攝影監督: 武井良幸
主題歌:岡村靖幸
動畫製作:Bones

『肆』 新手如何製作ota分差包

在make android系統後,會生成系統的img文件。
make otapackage 會生成sd卡用的全部系統升級包,有260M多。要生成增量升級包。需要按以下步驟。

mkdir ~ /OTA

source build/envsetup.sh; choosecom 1 1 7 eng

make;make otapackage

先將編譯生成的
out/target/proct/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip
拷貝並且更名放到目錄 ~ /OTA/msm8660_surf-target_files-eng.A.zip

在代碼中產生一些更新

第二次 make;make otapackage

第二次編譯生成的out/target/proct/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip 拷貝並且更名放到目錄 /OTA/msm8660_surf-target_files-eng.tangzm_B.zip

-在src根目錄下執行 ./build/tools/releasetools/ota_from_target_files -i 包 > 包 > <<span style="font-family: 'DejaVu Sans';">差分包名 >。這里必須在src根目錄下執行,因為 ota_from_target_files.py這個腳本裡面寫定了相對路徑的引用文件。
如: ./build/tools/releasetools/ota_from_target_files -v -t MMC -i
~ /OTA/msm8660_surf-target_files-eng.A.zip
~ /OTA/msm8660_surf-target_files-eng.B.zip
~ /OTA/update.zip
~ /OTA/update.zip 就是升級用的差分包。
注意:-t MMC 是指使用文件格式為ext4,默認為mtd,即yaffs2。因為我們這個系統使用了ext4文件系統的支持。具體的內容可以看分區表文件src/
具體的參數含義為 -v顯示具體命令,-i 為產生增量包。

『伍』 如何去掉android ota升級包時間戳

Android的OTA升級包中,裡面有一個升級腳本,該腳本會檢測recovey鏡像的編譯時間和OTA包的編譯時間,如果recovey比OTA包的時間要新的話,升級便會失敗。如果是這樣的話,就得重新編譯OTA包了。
為了提供開發速度,可找到build/tools/releasetools/ota_from_target_files這個腳本,屏蔽一下這個函數 script.AssertOlderBuild(ts, ts_text),
這樣編譯生成的OTA中便不會檢測時間戳了。

『陸』 如何對安卓系統的平板電腦進行強刷,Root後OTA升級變磚,怎麼刷回去呢

E708 Q1刷機必備 強刷教程(有一定的危險性,不推薦,最後一道防線)這個方法用在板友們沒有開啟USB調試或者改系統文件變磚,鏈接電腦沒反應的情況,救磚處理,不到萬不得已不要嘗試,確保你的平板有超過30%的電量。打開官方刷機工具會發現電腦不認平板沒關系,這個時候把平板和電腦的連接線斷開。首先確保你的刷機軟體更新到v1.0.7版本。然後進入一件刷機,瀏覽到官方刷機包,點擊升級,然後會出現沒有設備之類的話,一直確定,無視。這步就需要注意了1.按關機鍵10秒以上,確保關機;2.先按下home鍵不鬆手,死都不鬆手;3.然後用USB數據線連接電腦和平板;4.短按電源鍵知道刷機工具開始有反應;5.松開電源鍵和home鍵,點是開始刷機等進度條跑完就刷機成功了。第一次開機時間會長一點。

『柒』 雷霆戰機腳本不用root軟體下載

Android手機Root失敗的原因 如今在Android平台最方便的ROOT 方式是「一鍵ROOT」,用戶可以通過開發 者提供的ROOT工具簡單快捷的實現 ROOT,包括騰訊手 機關機、360手機助 手、卓大師、刷機精靈,卓大師,甜椒以及移動叔叔 ROOT工具箱等第三方刷機工具,都可以非常簡單 的實現一些機型的ROOT操作,當然也 有很多用戶使用這些工 具後仍然ROOT 不成功,除了「工具不支持該型號」之 外,以下整理了五點常見的ROOT 失敗原因,供用戶參考。 1、Root系統版本及型號匹配
失敗原因,供用戶參考。 1、Root系統版本及型號匹配 很多Root工具對於手機的型號以 及系統版本有特定的要求,在未滿足 要求的情況下刷機失敗的幾率相當 大。刷帶Recovery的內核是低版本固 定手機型號Root的一個途徑,如果通 過「一鍵Root工具」刷機失敗,
Android手機Root失敗的原因 如今在Android平台最方便的ROOT 方式是「一鍵ROOT」,用戶可以通過開發 者提供的ROOT工具簡單快捷的實現 ROOT,包括騰訊手 機關機、360手機助 手、卓大師、刷機精靈,卓大師,甜椒以及移動叔叔 ROOT工具箱等第三方刷機工具,都可以非常簡單 的實現一些機型的ROOT操作,當然也 有很多用戶使用這些工 具後仍然ROOT 不成功,除了「工具不支持該型號」之 外,以下整理了五點常見的ROOT 失敗原因,供用戶參考。 1、Root系統版本及型號匹配
失敗原因,供用戶參考。 1、Root系統版本及型號匹配 很多Root工具對於手機的型號以 及系統版本有特定的要求,在未滿足 要求的情況下刷機失敗的幾率相當 大。刷帶Recovery的內核是低版本固 定手機型號Root的一個途徑,如果通 過「一鍵Root工具」刷機失敗,
不妨找找 教程試試刷Recovery。 2、Recovery卡刷ROOT包 大多數的Android設備支持OTA或 者ICS升級,用戶可以把廠商推送的 OTA以及ICS拷貝到SD卡中進行系統升 級操作,這些手機大多也支持將固定 的Root文件包通過刷機刷入手機系統當中,比如華為榮耀系列的部分機 型。 3、Recovery模式菜單 很多「一鍵Root工具」需要用戶在手 機Recovery模式下開始刷機操作,如 果在網上找到一篇Root教程反復嘗試 仍然失敗的話,不妨在 Root開始之前 進入Recovery模式進行嘗試(開機時按 住音量減少鍵+電源鍵調出),最典型 的例子是聯想S720以及其他S系列機 型。 4、安裝手機驅動 很多「一鍵Root」工具需要用戶保持與手機的連接狀態,通過豌豆莢、91 手機助手等工具預先在手機中裝入手 機版豌豆莢以及91手機助手等工具,
是簡單的安裝手機驅動的方式。 5、PC系統 很多PC端的Root工具需要通過 Windows XP模式進行刷機操作,而Win7 或者Win 8的用戶需要在使用類似工具 的時候設置「管理員模式」以及「XP兼容 模式」。 以上是Root Android設備的一些重 要注意事項,在Root設備的時候如果 每每不成功,不妨安裝以上五個內容進行嘗試。最後提醒Root用戶,刷機 需謹慎,刷前要備份。
希望對你有所幫助!

『捌』 小米手機怎麼刷機

小米手機刷機的步驟如下:

1、打開電腦,然後把系統下載到xiaomimi Forum官方網站上的電腦上:

『玖』 我想寫一個shell腳本,可以把終端輸入的結果寫入到某個文件。

read-p"請輸入版本號:"ver
myStr="BUILD_NUMBER=$ver"
echo"$myStr"
sed-i'/^makefullota/s/.*/makefullota'"$myStr"'/'makezip.sh

『拾』 如何打包安卓手機Zip升級包如何簽名不換Recovery,用官方Recovery

通過分析update.zip包在具體Android系統升級的過程,來理解Android系統中Recovery模式服務的工作原理。
我們先從update.zip包的製作開始,然後是Android系統的啟動模式分析,Recovery工作原理,如何從我們上層開始選擇system update到重啟到Recovery服務,以及在Recovery服務中具體怎樣處理update.zip包升級的,我們的安裝腳本updater-script怎樣被解析並執行的等一系列問題。分析過程中所用的Android源碼是gingerbread0919(tcc88xx開發板標配的),測試開發板是tcc88xx。
一、 update.zip包的目錄結構
|----boot.img
|----system/
|----recovery/
`|----recovery-from-boot.p
`|----etc/
`|----install-recovery.sh
|---META-INF/
`|CERT.RSA
`|CERT.SF
`|MANIFEST.MF
`|----com/
`|----google/
`|----android/
`|----update-binary
`|----updater-script
`|----android/
`|----metadata
二、 update.zip包目錄結構詳解
以上是我們用命令make otapackage 製作的update.zip包的標准目錄結構。
1、boot.img是更新boot分區所需要的文件。這個boot.img主要包括kernel+ramdisk。
2、system/目錄的內容在升級後會放在系統的system分區。主要用來更新系統的一些應用或則應用會用到的一些庫等等。可以將Android源碼編譯out/target/proct/tcc8800/system/中的所有文件拷貝到這個目錄來代替。
3、recovery/目錄中的recovery-from-boot.p是boot.img和recovery.img的補丁(patch),主要用來更新recovery分區,其中etc/目錄下的install-recovery.sh是更新腳本。
4、update-binary是一個二進制文件,相當於一個腳本解釋器,能夠識別updater-script中描述的操作。該文件在Android源碼編譯後out/target/proct/tcc8800/system bin/updater生成,可將updater重命名為update-binary得到。
該文件在具體的更新包中的名字由源碼中bootable/recovery/install.c中的宏ASSUMED_UPDATE_BINARY_NAME的值而定。
5、updater-script:此文件是一個腳本文件,具體描述了更新過程。我們可以根據具體情況編寫該腳本來適應我們的具體需求。該文件的命名由源碼中bootable/recovery/updater/updater.c文件中的宏SCRIPT_NAME的值而定。
6、 metadata文件是描述設備信息及環境變數的元數據。主要包括一些編譯選項,簽名公鑰,時間戳以及設備型號等。
7、我們還可以在包中添加userdata目錄,來更新系統中的用戶數據部分。這部分內容在更新後會存放在系統的/data目錄下。
8、update.zip包的簽名:update.zip更新包在製作完成後需要對其簽名,否則在升級時會出現認證失敗的錯誤提示。而且簽名要使用和目標板一致的加密公鑰。加密公鑰及加密需要的三個文件在Android源碼編譯後生成的具體路徑為:
out/host/linux-x86/framework/signapk.jar
build/target/proct/security/testkey.x509.pem
build/target/proct/security/testkey.pk8 。
我們用命令make otapackage製作生成的update.zip包是已簽過名的,如果自己做update.zip包時必須手動對其簽名。
具體的加密方法:$ java –jar gingerbread/out/host/linux/framework/signapk.jar –w gingerbread/build/target/proct/security/testkey.x509.pem gingerbread/build/target/proct/security/testkey.pk8 update.zip update_signed.zip
以上命令在update.zip包所在的路徑下執行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用絕對路徑。update.zip 是我們已經打好的包,update_signed.zip包是命令執行完生成的已經簽過名的包。
9、MANIFEST.MF:這個manifest文件定義了與包的組成結構相關的數據。類似Android應用的mainfest.xml文件。
10、CERT.RSA:與簽名文件相關聯的簽名程序塊文件,它存儲了用於簽名JAR文件的公共簽名。
11、CERT.SF:這是JAR文件的簽名文件,其中前綴CERT代表簽名者。
另外,在具體升級時,對update.zip包檢查時大致會分三步:①檢驗SF文件與RSA文件是否匹配。②檢驗MANIFEST.MF與簽名文件中的digest是否一致。③檢驗包中的文件與MANIFEST中所描述的是否一致。
三、 Android升級包update.zip的生成過程分析
1) 對於update.zip包的製作有兩種方式,即手動製作和命令生成。
第一種手動製作:即按照update.zip的目錄結構手動創建我們需要的目錄。然後將對應的文件拷貝到相應的目錄下,比如我們向系統中新加一個應用程序。可以將新增的應用拷貝到我們新建的update/system/app/下(system目錄是事先拷貝編譯源碼後生成的system目錄),打包並簽名後,拷貝到SD卡就可以使用了。這種方式在實際的tcc8800開發板中未測試成功。簽名部分未通過,可能與具體的開發板相關。
第二種製作方式:命令製作。Android源碼系統中為我們提供了製作update.zip刷機包的命令,即make otapackage。該命令在編譯源碼完成後並在源碼根目錄下執行。 具體操作方式:在源碼根目錄下執行
①$ . build/envsetup.sh。
②$ lunch 然後選擇你需要的配置(如17)。
③$ make otapackage。
在編譯完源碼後最好再執行一遍上面的①、②步防止執行③時出現未找到對應規則的錯誤提示。命令執行完成後生成的升級包所在位置在out/target/proct/full_tcc8800_evm_target_files-eng.mumu.20120309.111059.zip將這個包重新命名為update.zip,並拷貝到SD卡中即可使用。
這種方式(即完全升級)在tcc8800開發板中已測試成功。
2) 使用make otapackage命令生成update.zip的過程分析。
在源碼根目錄下執行make otapackage命令生成update.zip包主要分為兩步,第一步是根據Makefile執行編譯生成一個update原包(zip格式)。第二步是運行一個python腳本,並以上一步准備的zip包作為輸入,最終生成我們需要的升級包。下面進一步分析這兩個過程。
第一步:編譯Makefile。對應的Makefile文件所在位置:build/core/Makefile。從該文件的884行(tcc8800,gingerbread0919)開始會生成一個zip包,這個包最後會用來製作OTA package 或者filesystem image。先將這部分的對應的Makefile貼出來如下:

[python] view plainprint?
# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#
根據上面的Makefile可以分析這個包的生成過程:
首先創建一個root_zip根目錄,並依次在此目錄下創建所需要的如下其他目錄
①創建RECOVERY目錄,並填充該目錄的內容,包括kernel的鏡像和recovery根文件系統的鏡像。此目錄最終用於生成recovery.img。
②創建並填充BOOT目錄。包含kernel和cmdline以及pagesize大小等,該目錄最終用來生成boot.img。
③向SYSTEM目錄填充system image。
④向DATA填充data image。
⑤用於生成OTA package包所需要的額外的內容。主要包括一些bin命令。
⑥創建META目錄並向該目錄下添加一些文本文件,如apkcerts.txt(描述apk文件用到的認證證書),misc_info.txt(描述Flash內存的塊大小以及boot、recovery、system、userdata等分區的大小信息)。
⑦使用保留連接選項壓縮我們在上面獲得的root_zip目錄。
⑧使用fs_config(build/tools/fs_config)配置上面的zip包內所有的系統文件(system/下各目錄、文件)的許可權屬主等信息。fs_config包含了一個頭文件#include「private/android_filesystem_config.h」。在這個頭文件中以硬編碼的方式設定了system目錄下各文件的許可權、屬主。執行完配置後會將配置後的信息以文本方式輸出 到META/filesystem_config.txt中。並再一次zip壓縮成我們最終需要的原始包。
第二步:上面的zip包只是一個編譯過程中生成的原始包。這個原始zip包在實際的編譯過程中有兩個作用,一是用來生成OTA update升級包,二是用來生成系統鏡像。在編譯過程中若生成OTA update升級包時會調用(具體位置在Makefile的1037行到1058行)一個名為ota_from_target_files的python腳本,位置在/build/tools/releasetools/ota_from_target_files。這個腳本的作用是以第一步生成的zip原始包作為輸入,最終生成可用的OTA升級zip包。
二 下面我們分析ota_from_target_files這個python腳本是怎樣生成最終zip包的。先講這個腳本的代碼貼出來如下:
[python] view plainprint?
import sys
if sys.hexversion < 0x02040000:
print >> sys.stderr, "Python 2.4 or newer is required."
sys.exit(1)
主函數main是python的入口函數,我們從main函數開始看,大概看一下main函數(腳本最後)里的流程就能知道腳本的執行過程了。
① 在main函數的開頭,首先將用戶設定的option選項存入OPTIONS變數中,它是一個python中的類。緊接著判斷有沒有額外的腳本,如果有就讀入到OPTIONS變數中。
② 解壓縮輸入的zip包,即我們在上文生成的原始zip包。然後判斷是否用到device-specific extensions(設備擴展)如果用到,隨即讀入到OPTIONS變數中。
③ 判斷是否簽名,然後判斷是否有新內容的增量源,有的話就解壓該增量源包放入一個臨時變數中(source_zip)。自此,所有的准備工作已完畢,隨即會調用該 腳本中最主要的函數WriteFullOTAPackage(input_zip,output_zip)
④ WriteFullOTAPackage函數的處理過程是先獲得腳本的生成器。默認格式是edify。然後獲得metadata元數據,此數據來至於Android的一些環境變數。然後獲得設備配置參數比如api函數的版本。然後判斷是否忽略時間戳。
⑤ WriteFullOTAPackage函數做完准備工作後就開始生成升級用的腳本文件(updater-script)了。生成腳本文件後將上一步獲得的metadata元數據寫入到輸出包out_zip。
⑥至此一個完整的update.zip升級包就生成了。生成位置在:out/target/proct/tcc8800/full_tcc8800_evm-ota-eng.mumu.20120315.155326.zip。將升級包拷貝到SD卡中就可以用來升級了。
四、 Android OTA增量包update.zip的生成
在上面的過程中生成的update.zip升級包是全部系統的升級包。大小有80M多。這對手機用戶來說,用來升級的流量是很大的。而且在實際升級中,我們只希望能夠升級我們改變的那部分內容。這就需要使用增量包來升級。生成增量包的過程也需要上文中提到的ota_from_target_files.py的參與。
下面是製作update.zip增量包的過程。
① 在源碼根目錄下依次執行下列命令
$ . build/envsetup.sh
$ lunch 選擇17
$ make
$ make otapackage
執行上面的命令後會在out/target/proct/tcc8800/下生成我們第一個系統升級包。我們先將其命名為A.zip
② 在源碼中修改我們需要改變的部分,比如修改內核配置,增加新的驅動等等。修改後再一次執行上面的命令。就會生成第二個我們修改後生成的update.zip升級包。將 其命名為B.zip。
③ 在上文中我們看了ota_from_target_files.py腳本的使用幫助,其中選項-i就是用來生成差分增量包的。使用方法是以上面的A.zip 和B.zip包作為輸入,以update.zip包作 為輸出。生成的update.zip就是我們最後需要的增量包。
具體使用方式是:將上述兩個包拷貝到源碼根目錄下,然後執行下面的命令。
$ ./build/tools/releasetools/ota_from_target_files -i A.zip B.zip update.zip。
在執行上述命令時會出現未找到recovery_api_version的錯誤。原因是在執行上面的腳本時如果使用選項i則會調用WriteIncrementalOTAPackage會從A包和B包中的META目錄下搜索misc_info.txt來讀取recovery_api_version的值。但是在執行make otapackage命令時生成的update.zip包中沒有這個目錄更沒有這個文檔。
此時我們就需要使用執行make otapackage生成的原始的zip包。這個包的位置在out/target/proct/tcc8800/obj/PACKAGING/target_files_intermediates/目錄下,它是在用命令make otapackage之後的中間生產物,是最原始的升級包。我們將兩次編譯的生成的包分別重命名為A.zip和B.zip,並拷貝到SD卡根目錄下重復執行上面的命令:
$ ./build/tools/releasetools/ota_form_target_files -i A.zip B.zip update.zip。
在上述命令即將執行完畢時,在device/telechips/common/releasetools.py會調用IncrementalOTA_InstallEnd,在這個函數中讀取包中的RADIO/bootloader.img。
而包中是沒有這個目錄和bootloader.img的。所以執行失敗,未能生成對應的update.zip。可能與我們未修改bootloader(升級firmware)有關。此問題在下一篇博客已經解決。
製作增量包失敗的原因,以及解決方案。

Android系統Recovery工作原理之使用update.zip升級過程分析(二)---update.zip差分包問題的解決
在上一篇末尾提到的生成差分包時出現的問題,現已解決,由於最近比較忙,相隔的時間也比較長,所以單列一個篇幅提示大家。這個問題居然是源碼中的問題,可能你已經製作成功了,不過我的這個問題確實是源碼中的一個問題,不知道是不是一個bug,下文會具體分析!
一、生成OTA增量包失敗的解決方案
在上一篇中末尾使用ota_from_target_files腳本製作update.zip增量包時失敗,我們先將出現的錯誤貼出來。
在執行這個腳本的最後讀取input_zip中RADIO/bootloader.img時出現錯誤,顯示DeviceSpecifiParams這個對象中沒有input_zip屬性。
我們先從腳本中出現錯誤的調用函數中開始查找。出現錯誤的調用地方是在函WriteIncrementalOTAPackage(443行)中的device_specific.IncrementalOTA_InstallEnd(),其位於WriteIncrementalOTAPackage()中的末尾。進一步跟蹤源碼發現,這是一個回調函數,他的具體執行方法位於源碼中/device/telechips/common/releasetools.py腳本中的IncrementalOTA_InstallEnd()函數。下面就分析這個函數的作用。
releasetools.py腳本中的兩個函數FullOTA_InstallEnd()和IncrementalOTA_InstallEnd()的作用都是從輸入包中讀取RADIO/下的bootloader.img文件寫到輸出包中,同時生成安裝bootloader.img時執行腳本的那部分命令。只不過一個是直接將輸入包中的bootloader.img鏡像寫到輸出包中,一個是先比較target_zip和source_zip中的bootloader.img是否不同(使用選項-i生成差分包時),然後將新的鏡像寫入輸出包中。下面先將這個函數(位於/device/telechips/common/releasetools.py)的具體實現貼出來:
我們的實際情況是,在用命令make otapackage時生成的包中是沒有這個RADIO目錄下的bootloader.img鏡像文件(因為這部分更新已被屏蔽掉了)。但是這個函數中對於從包中未讀取到bootloader.img文件的情況是有錯誤處理的,即返回。所以我們要從 出現的實際錯誤中尋找問題的原由。
真正出現錯誤的地方是:
target_bootloader=info.input_zip.read(「RADIO/bootloader.img」)。
出現錯誤的原因是:AttributeError:『DeviceSpecificParams』object has no attribute 『input_zip』,提示我們DeviceSpecificParams對象沒有input_zip這個屬性。
二、updater-script腳本執行流程分析:
先看一下在測試過程中用命令make otapackage生成的升級腳本如下:
[python] view plainprint?
assert(!less_than_int(1331176658, getprop("ro.build.date.utc")));
assert(getprop("ro.proct.device") == "tcc8800" ||
下面分析下這個腳本的執行過程:
①比較時間戳:如果升級包較舊則終止腳本的執行。
②匹配設備信息:如果和當前的設備信息不一致,則停止腳本的執行。
③顯示進度條:如果以上兩步匹配則開始顯示升級進度條。
④格式化system分區並掛載。
⑤提取包中的recovery以及system目錄下的內容到系統的/system下。
⑥為/system/bin/下的命令文件建立符號連接。
⑦設置/system/下目錄以及文件的屬性。
⑧將包中的boot.img提取到/tmp/boot.img。
⑨將/tmp/boot.img鏡像文件寫入到boot分區。
⑩完成後卸載/system。
三、總結
以上的九篇著重分析了Android系統中Recovery模式中的一種,即我們做好的update.zip包在系統更新時所走過的流程。其核心部分就是Recovery服務的工作原理。其他兩種FACTORY RESET、ENCRYPTED FILE SYSTEM ENABLE/DISABLE與OTA INSTALL是相通的。重點是要理解Recovery服務的工作原理。另外詳細分析其升級過程,對於我們在實際升級時,可以根據我們的需要做出相應的修改。