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

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

三星手機崩潰事件梳理

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

Twitter討論地址如下:https://twitter.com/UniverseIce/status/1266943909499826176

設置壁紙導致三星系統崩潰如下:

然後評論區一片哀嚎:

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

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

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

vl1:剛剛試了,現在不得不恢復出廠設置。

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

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值:255、255、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設備,但我們強烈建議您不要嘗試在手機上使用壁紙。如果已經嘗試了,試着用下面的方式:

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章