一个牛逼的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进阶路线、面试指导和简历模板送给你