一個牛逼的Bug!一張「壁紙」讓三星手機秒變磚!

想象一下,你正在網上搜索一些精美的壁紙,而且找到了一張風景如畫的風景圖。它擁有一切:茂密的森林、原始的湖泊、還有一個小島,背後是漂亮的雪山,厚厚的雲層覆蓋着陽光,陽光從雲縫中滲入。你被深深的吸引,而後當即下載圖片,將其設置爲你的手機壁紙,而後開始使用了,而後你的Android手機就陷入了啓動->崩潰->啓動->崩潰...的循環中。聽起來不太可能,但這確實是一個真實的事,而且罪魁禍首就是下面這張圖片:web

三星手機崩潰事件梳理

5月31日,名叫Ice Universe的用戶在Twitter上分享了上面這張壁紙,他聲稱該壁紙「將致使你的手機崩潰」,儘管有警告你們不要試,這不是在開玩笑,但仍然有不少用戶下載了該壁紙,以驗證他說的是不是真的-是否會讓手機崩潰面試

Twitter討論地址以下:https://twitter.com/UniverseIce/status/1266943909499826176安全

設置壁紙致使三星系統崩潰以下:微信

而後評論區一片哀嚎:編輯器

Sebastian:很是不幸,這是一個Android的bug,Google的 Pixels系列手機也中招了!ide

Dawood: 這是我見過的最扯淡的bug,我甚至開啓了安全模式,可是仍然沒能倖免,必須恢復出廠模式,來作一些事情。測試

Jason Ashley:呵呵,我在模擬器中對此進行了測試。 致使SystemUI崩潰。 試着檢查圖像header是否有任何奇怪的問題,因爲我有限的JPEG知識,沒有發現任何問題。 它也確實正常結束了。編碼

vl1:剛剛試了,如今不得不恢復出廠設置。url

Passerby: 諾基亞手機也有一樣的問題。 個人諾基亞7 plus已經崩潰,並反覆重啓。 有人知道如何解決嗎?我須要幫助,謝謝spa

Ahmed Alkaab:該死,它確實損壞了個人三星Note 9

從該Twitter的評論區反饋來看,三星、Google Pixels、諾基亞等部分手機存在該問題,國內廠商如華爲、小米、OnePlus不受影響。

問題追蹤

究竟是什麼問題致使了手機崩潰呢?圖片被施了魔法?顯然不是。根據Davide Bianco(基於AOSP自定義ROM的開發負責人)的說法,這種"特殊"的壁紙會致使某些Android設備崩潰,是由於它使用了RGB顏色空間,而不是Android原生支持的sRGB顏色空間。

Bianco 已經提交了一個補丁,據報道該補丁已經解決了該問題,補丁的描述指出:當用戶嘗試將非sRGB的圖像設置爲壁紙時,就會引起此問題。發生的狀況是變量y的值高於histogram的範圍,從而使SysUI崩潰。一種可能的解決方法是將y值始終限制爲小於256。

著名的LineageOS定製ROM團隊與Xian Bianco一塊兒,由XDA高級會員BadDaemon和XDA公認的開發人員luca020400共同開發了獨特的解決方案。

一份來自9to5Google的報告對此事進一步代表,問題僅限於運行Android 10以上的設備,它不影響運行在Android 11開發者預覽版上的設備。這是因爲:在Android 11上,若是不支持,系統會轉換顏色空間,但在Android 10上則不會

Google最新迴應

正如XDA高級會員BadDaemon和XDA公認的開發人員luca020400所解釋的那樣, 是擴展致使了這個bug。那張「被詛咒」的圖片在一個特殊的顏色空間中編碼,該顏色空間被稱爲"Google / Skia / E3CADAB7BD3DE5E3436874D2A9DEE126"這是顏色空間的全稱,Skia指的是Google製做的2D圖形庫。)。相反,大多數其餘壁紙圖像均在稱爲「 sRGB」的色彩空間中編碼。

在Android 10及更早版本中,除非開發人員另行指定,不然全部圖像都將轉換爲sRGB。將圖片轉換爲sRGB時,可能會發生一個罕見的錯誤,其中計算每一個像素的「luminance(亮度)」值的代碼設法超過了最大限制255。

使用如下公式計算亮度:

Luminance = .2126f * r + .7152f * g + .0722f * b
複製代碼

這裏,「 r」,「 g」和「 b」是紅色,綠色和藍色,以0到255的8位值表示。

該計算的問題在於,它老是將最終值四捨五入。在將圖像從sRGB轉換爲灰度的過程當中,「被詛咒」牆紙中的像素之一具備如下RGB值:25五、25五、243,將其插入上述公式時,以下所示:

Luminance = .2126 * (255) + .7152 * (255) + .0722 * (243)
Luminance = 256
複製代碼

Luminance 超過了255,此值致使SystemUI崩潰,而且基本上致使整個OS崩潰,由於它超過了最大值。這個錯誤很是具體,由於它涉及到舍入錯誤和顏色空間轉換錯誤。

此錯誤不會影響Android 11,由於默認狀況下,圖片的「Skia」顏色空間不會轉換爲sRGB。所以,在Android 11上不會發生此顏色空間轉換錯誤和舍入錯誤。

可是,來自Google Android Toolkit團隊的Romain Guy認爲,此問題的根本緣由僅在於計算亮度的方式,而與任何顏色空間轉換問題無關。Google正在進行本身的內部測試,所以咱們可能很快就會看到他們最終的結果。

如何恢復

請注意,儘管該問題並不影響全部Android設備,但咱們強烈建議您不要嘗試在手機上使用壁紙。若是已經嘗試了,試着用下面的方式:

  • 一、進入安全模式並更改牆紙來恢復設備。三星手機操做是:在開機界面出現三星Logo畫面時,按住音量下鍵不鬆手,直到出現「安全模式」字樣,進入後快速抓拍一張照片設爲壁紙。(不過有Twiiter用戶表示此方法也沒法恢復。)

  • 二、恢復出廠設置(數據丟失)

暫時只能經過這兩種臨時方案解決,Google已經在修復這個問題,可能會伴隨着後面的系統更新來發布。所以最好不要使用確切的圖片做爲牆紙。若是您真的喜歡牆紙,只需對圖像進行截圖,而後將其用做牆紙便可。

最後再提醒一下同窗們,千萬不要好奇嘗試!

文章首發於公衆號:「 技術最TOP 」,天天都有乾貨文章持續更新,能夠微信搜索「 技術最TOP 」第一時間閱讀,回覆【思惟導圖】【面試】【簡歷】有我準備一些Android進階路線、面試指導和簡歷模板送給你

相關文章
相關標籤/搜索