[Актуализация 2: Коригирана] Този тапет задейства рядък бъг, каращ устройствата с Android да стартират

click fraud protection

Този тапет задейства рядък бъг, който кара устройствата с Android да стартират. Не изпробвайте тапета на вашето устройство или може да загубите всичките си данни.

Актуализация 2 (03.08.2020 г. @ 15:03 ET): С корекциите за сигурност на Android от август 2020 г. Google актуализира Android, за да коригира тази грешка. Повече подробности можете да намерите в долната част.

Актуализация 1 (04.06.2020 г. в 03:12 ч. ET): Появиха се по-нови обяснения за това какво причинява „проклетия тапет“ да срива телефоните, заедно с отговор от Google. Превъртете до дъното за повече информация. Статията, публикувана на 1 юни 2020 г., е запазена по-долу.

Представете си, че търсите в интернет готини тапети и попадате на живописен пейзаж. Има всичко; тучна зелена гора, девствено езеро с малък остров, заснежени планини на заден план и гъста облачна покривка със слънчева светлина, проникваща през пролуките. Веднага изтегляте изображението, задавате го като тапет на телефона си и бум! Вашият телефон с Android се забива в цикъл на зареждане. Звучи малко вероятно, нали? Е, вярно е за този конкретен тапет.

Тапетът наскоро беше споделен на Twitterот известни Samsung leakster Ice Universe, който твърди, че тапетът "ще доведе до срив на телефона ви!" Въпреки тяхното предупреждение, няколко потребителите изтеглиха тапета, за да проверят дали наистина прави нещо на телефона им и се срещнаха със следното резултати:

Според Davide Bianco, водещ разработчик на базирания на AOSP потребителски ROM „POSP“, този конкретен тапет причинява срив на някои устройства с Android, тъй като използва цветовото пространство RGB, вместо цветовото пространство sRGB, което се поддържа в Android. Бианко има изпрати корекция към AOSP, който според съобщенията коригира проблема и описанието на корекцията гласи, че „Проблемът възниква, когато потребителят се опита да зададе като тапет изображение, което не е sRGB. Това, което се случва, е, че стойността на променливата y е по-висока от границите на хистограмата, което води до срив на SysUI. Едно възможно решение е да се ограничи стойността на y да бъде винаги по-малка от 256." Заедно с Bianco, двама разработчици, XDA Senior Member BadDaemon и XDA признат разработчик luca020400, от популярния персонализиран ROM екип на LineageOS също измислиха уникално решение на проблема. Можете да проверите описанията на корекциите в LineageOS Gerrit, като следвате тази връзка и тази връзка.

Силно препоръчваме да не използвате това изображение като тапет при никакви обстоятелства. В случай, че вече сте го използвали и вашето устройство е блокирало в цикъл на зареждане, моля, проверете инструкциите по-долу за това как може да успеете да възстановите устройството си.

А доклад от 9to5Google по въпроса допълнително разкрива, че проблемът е ограничен до устройства с Android 10 или по-стари версии и не засяга устройства с Android 11 Визуализация за разработчици. Това се дължи на факта, че при Android 11 системата преобразува цветовото пространство, ако не се поддържа, но при Android 10 не го прави. Което означава, че това не е проблем с това конкретно изображение и може да бъде причинено от други изображения, използващи цветовото пространство RGB.

Имайте предвид, че въпреки че проблемът не засяга всички устройства с Android, силно препоръчваме да не изпробвате тапета на телефона си. В случай, че все пак го опитате, може да успеете да възстановите устройството си, като го нулирате напълно или като влезете в безопасен режим и промените тапета. Но тъй като някои потребители над Twitter не са успели да възстановят устройствата си с помощта на гореспоменатите методи, би било най-добре да не използвате точното изображение като тапет. Ако наистина харесвате тапета, просто направете екранна снимка на изображението и го използвайте вместо това като тапет.


Актуализация 1: Ново обяснение, отговор от Google

Разширяване на причините за грешката, както е обяснено от старши член на XDA BadDaemon и XDA признат разработчик luca020400, „прокълнатият“ тапет е кодиран в специално цветово пространство, което се нарича „Google/Skia/E3CADAB7BD3DE5E3436874D2A9DEE126“ (това е пълното име на цветовото пространство и Skia се отнася до 2D графична библиотека, създадена от Google.) За разлика от тях повечето други изображения на тапети са кодирани в цветово пространство, наречено "sRGB".

Във версии на Android 10 и по-стари всички изображения се преобразуват в sRGB, освен ако не е посочено друго от разработчиците. Има рядък бъг, който може да възникне при преобразуване на изображението в sRGB, при който кодът, който изчислява стойността на "осветеност" на всеки пиксел, успява да надхвърли максималното ограничение от 255.

Яркостта се изчислява по следната формула:

Яркост = .2126f * r + .7152f * g + .0722f * b

Тук "r", "g" и "b" са стойности на червени, зелени и сини цветове, представени в 8-битова стойност от 0 до 255.

Проблемът с това изчисление е, че всяка част винаги се закръгля преди окончателното сумиране. Един от пикселите в "проклетия" тапет, когато е в процес на конвертиране на изображението от sRGB и след това към сивата скала има следните RGB стойности: 255, 255, 243, които, когато се включат в горното уравнение, изглеждат като:

r: .2126 * 255 = 54.213 => 55

g: .7152 * 255 = 182.376 => 183

b: 0,0722 * 255 = 18,411 => 19

Яркост = r+ g + b = 257

Тази стойност води до срив на SystemUI и по същество на цялата операционна система, защото надвишава максималната стойност. Това е грешка, която е толкова невероятно специфична, защото включва комбинация от грешка при закръгляване и грешка при преобразуване на цветовото пространство.

Тази грешка не засяга Android 11, тъй като цветовото пространство „Skia“ на изображението не се преобразува в sRGB по подразбиране. По този начин тази грешка при преобразуване на цветовото пространство и грешката при закръглянето не се появяват на Android 11.

Но Ромен Гай от екипа на Android Toolkit в Google вярва, че основната причина за този проблем е само в начина, по който се изчислява осветеността, а не в проблеми с преобразуването на цветовото пространство. Google провежда свои собствени вътрешни тестове, така че вероятно скоро ще видим какво ще измислят.

Това обяснение беше актуализирано, за да се изясни, че един от пикселите в „прокълнатия“ тапет е причината за тази специфична грешка при изчисляване на закръгляването на яркостта. Също така изяснихме, че закръгляването се извършва по време на всяка стъпка от изчисляването на яркостта, а не в края.


Актуализация 2: Коригирана в корекции от август 2020 г

Пачовете за сигурност на Android за месец август току-що пусна на живо, и XDA признат разработчик luca020400 забелязан а ангажирайте в AOSP който обединява корекция за тази грешка в тапета.