產品上線,突發bug…

語言: CN / TW / HK

上線24小時前:

技術總監: 最後全面排查一遍!確保咱們的app上線不能出問題!否則這個月績效不保!還可能捲鋪蓋走人!

眾開發: 程式碼無誤!

測試妹子: 測試沒問題!

UI: 畫面甚美!可上線!

產品經理: 行嘞!幹!

上線10分鐘後:

客服1: 報!下載使用者已經高達2人!

客服97: 報!有人反饋圖片打不開!

產品經理: what!測試和開發幹什麼吃的?你們滾過來看看!

測試妹子: 嗚嗚嗚~測試的時候好好的嘛…

開發小張: 是程式程式碼不夠健壯導致App執行時崩潰!

產品經理: 那怎麼辦!重新上架app嗎?損失我們這2個來之不易的使用者嗎!

開發老陳: 非也非也!這個我們早有準備!只需使用熱補丁動態修復技術,向用戶下發Patch,在使用者無感知的情況下,就可以修復問題辣!

產品經理: 那你bb啥!趕緊修啊!

開發老陳: 這個我不會鴨!我只知其然,不知其所以然!得找老王!

產品經理: 老王人呢?

技術總監: 因為bug太多被開除了!上個月跨部門績效是你打的分啊。

產品經理: 還有誰會嗎?

開發小李: 我會!

產品經理: 交給你了。

..........

程式設計師小李: 搞定,修復成功了!

產品經理: 小李等下,我這臺手機怎麼還是沒有修復成功。

程式設計師小李: 你什麼機型,什麼系統?

產品經理: 華為呀,系統是7.0。

程式設計師小李: 華為坑啊。 Android N混合使用AOT編譯,解釋和JIT三種執行時。 它主要解決的問題有以下幾個:

1、應用安裝時間過長; 在N之前,應用在安裝時需要對所有ClassN.dex做AOT機器碼編譯,類似微信這種比較大型的APP可能會耗時數分鐘。但是往往我們只會使用一個應用20%的功能,剩下的80%我們付出了時間成本,卻沒帶來太大的收益。

2、降低佔ROM空間; 同樣全量編譯AOT機器碼,12M的dex編譯結果往往可以達到50M之多。只編譯使用者用到或常用的20%功能,這對於儲存空間不足的裝置尤其重要。

3、提升系統與應用效能; 減少了全量編譯,降低了系統的耗電。在boot.art的基礎上,每個應用增加了base.art , 通過預載入與快取提升應用效能。

4、快速的系統升級; 以往廠商ota時,需要對安裝的所有應用做全量的AOT編譯,這耗時非常久。事實上,同樣只有20%的應用是我們經常使用的,給不常用的應用,不常用的功能付出的這些成本是不值得的。

Android N為了解決這些問題,通過管理解釋,AOT與JIT三種模式,以達到一種執行效率、記憶體與耗電的折中。簡單來說,在應用執行時分析執行過的程式碼以及“熱程式碼”,並將配置儲存下來。在裝置空閒與充電時,ART僅僅編譯這份配置中的“熱程式碼”。

之所以出現修復失敗,是因為在應用執行時分析執行過的程式碼以及“熱程式碼”,並將配置儲存一份profile檔案。在裝置空閒與充電時,ART不僅會根據profile檔案來生成base.odex檔案,同時還會生成稱為app_image的base.art檔案。與boot.art類似,base.art檔案主要為了加快應用對“熱程式碼”的載入與快取。

APP在啟動時一次性把它們載入到快取,無論是使用插入pathlist還是parent classloader的方式,若補丁修改的class已經存在於app image,它們都是無法通過熱補丁更新的。

解決辦法:

事實上,App image中的class是插入到PathClassloader中的ClassTable中。假設我們完全廢棄掉PathClassloader,自定義一個ClassLoader來代替系統的類載入器來載入後續的所有類,即可達到將快取無用化的效果。這樣就能保證類在被修復之前是沒有被載入的。

眾程式設計師與產品經理: 小李你牛逼呀!

產品剛上線就突發bug…

開發上線的版本能保證不存在Bug麼?

修復後的版本能保證使用者都及時更新麼?

如何最大化減少線上Bug對業務的影響?

自從2014年開始,Android開發者們逐漸發現發展使用者的成本越來越高於發展技術的成本。按照傳統解決問題的辦法,我們只能釋出新版本,通過版本迭代來解決線上問題,可是頻繁的更新app必然導致大量使用者丟失。熱修復技術,可以看做是Android平臺發展成熟至一定階段的必然產物,近年來得到了飛速發展,尤其是在Instant Run方案推出後,各種熱修復技術百花齊放,各大廠商紛紛推出了自己的熱修復技術,像微信,QQ,支付寶,手淘,餓了麼/美團等等。可以說, 一個好的熱修復技術,將為你的APP助力百倍

熱修復demo 作者:雨紛紛__)

學習方向很容易規劃,但是如果只通過碎片化的學習,對自己的提升是很慢的。市場上深入系統的講解熱修復技術細節的部落格和書籍幾乎沒有,即使有很多開源的熱修復方案,也很難全面快速地理解熱修復技術的難點和關鍵點。

為了幫助大家縱向提升自己,我特別邀請了前愛奇藝高階工程師Lance老師,給大家帶來連續3天的 《熱修復實戰》 直播課, 詳解Android常用熱修復方案核心原理,手寫熱修復實戰,將會全方位帶你梳理Android知識體系。

同時給大家提供一個技術交流的平臺,以平臺的形式與國內數千位android開發者進行技術交流,希望大家對Android技術市場有新的感悟。

線上實時答疑,有疑問,當場解決!

《QQ空間熱修復實戰》

原價 199元 ,公眾號粉絲專享限時 0.1元

3天帶你掌握 Android熱修復的核心原理

Lance老師:

某遊戲公司主程,前愛奇藝高階工程師

專精領域: 移動平臺開發,NDK、架構、效能優化。

課程大綱

4.14

核心原理

1、 Android常用熱修復解決方案

2、動態化(熱修復/外掛化)核心類載入機制

3、Android程式中的ClassLoader

4.15

手寫實戰

1、Java反射落地實現熱修復

2、Android N混編對熱修復的影響

3、手寫熱修復實戰

4.16

專案實戰

1、類載入校驗相容

2、Gradle外掛開發

3、熱修復自動化補丁實戰

▲附贈 Android進階必備資料

掃碼新增月亮老師報名

“學好這堂課,薪資至少上漲30%