Крах обоев объяснил: вот как простое изображение может сделать телефоны из мягкого кирпича
Обновление, 4 июня, 02:00 по восточному поясному времени: Google сообщил, что в настоящее время рассматривает решение проблемы.
Как простое изображение может привести к поломке телефона Android до такой степени, что оно станет непригодным для использования?
Этот вопрос часто задавался в течение последних 24 часов, так как новости о «проклятых обоях» распространились по сети.
Объяснение крушения обоев
Вот резюме: установка определенного изображения в качестве обоев может отправить некоторые телефоны в цикл сбоев, что делает их непригодными для использования.
Есть несколько решений, в зависимости от того, насколько сильно ударил телефон. Некоторые пользователи смогли поменять обои за короткий промежуток времени между авариями. Другие успешно удалили обои, используя инструмент восстановления TWRP. Но в большинстве случаев единственным решением было сбросить телефон к заводским настройкам, потеряв все данные, которые не были сохранены.
Проблема была обнаружена Ice Universe, китайскими пользователями Twitter, известными утечками. На основании отчетов пользователей затронуты многие модели Samsung и Google, хотя мы также видели некоторые отчеты от пользователей устройств OnePlus, Nokia и Xiaomi (неясно, работали ли на этих последних устройствах стандартное программное обеспечение или пользовательские ПЗУ). Судя по нашему собственному тестированию и изучению пользовательских отчетов, устройства Huawei менее подвержены проблеме сбоя обоев.
Эта проблема затрагивает современные телефоны под управлением Android 10, но, как выясняется, на самом деле она не нова. Пользователи сообщали об аналогичных проблемах в течение нескольких лет, и только в прошлом месяце Android Police сообщила о том, что, по-видимому, является тесно связанной проблемой, особенно затрагивающей телефоны Pixel, работающие с приложением Google Wallpapers.
Мы спросили разработчика, что происходит
Это странная проблема, которая потенциально может стать более широкой проблемой, особенно если тролли вмешиваются. Легко представить, как нецензурные персонажи закапывают обои и отправляют их ничего не подозревающим пользователям в качестве «шутки».
Так что же происходит?
Мы видели несколько объяснений этой проблемы, большинство из которых касаются цветового пространства изображения, которое выходит за рамки возможностей Android SystemUI и вызывает сбой.
Чтобы получить лучшее представление о том, что происходит с этим крахом обоев для Android, мы обратились к Давиде Бьянко, одному из ведущих разработчиков проекта пользовательского ПЗУ POSP, который отправил первоначальный патч для этой проблемы на баг-трекер AOSP.
Давиде любезно объяснил читателям Android Authority, как изображение может вызывать такие проблемы, предупредив, что это его «личное мнение». Ниже приводится слегка отредактированное объяснение от него:
Основная проблема здесь заключается в том, что SystemUI обрабатывает только обои sRGB для обоев и не проверяет обои, не относящиеся к sRGB. Это может привести к конкретному сбою в классе ImageProcessHelper, так как переменная, используемая для доступа к массиву, выходит за границы массива.
Для справки, вот определение метода .
Эта переменная называется y, и это сумма текущих значений rgb отсканированных пикселей. Этот пиксель получается при сканировании каждой строки и столбца серой поверхности изображения. Каждый раз, когда мы получаем пиксель, мы присваиваем y сумму его значений rgb (обычно max составляет 255) и используем указанную переменную для доступа к элементу массива гистограмм (размер которого равен 256 max) и выполняем операции с указанным элементом.
Теперь для нормальных изображений в градациях серого сумма значений rgb всегда равна 255, но это не нормальное изображение. Переменная y превышает 255 и генерирует исключение вне границ (любое исключение в SysUI рассматривается как фатальное, что приводит к бесконечному циклу сбоев, поскольку изображение обрабатывается при каждом запуске SysUI). Теперь одним из решений может быть добавление проверки после того, как y назначено значение, которое в основном устанавливает y в 255, если оно когда-либо выходит за максимальную границу. Это на самом деле работает, но мы почему-то получаем худшее качество.
Ребята из LineageOS смогли выяснить, что эта конкретная проблема возникает из-за плохого округления, главным образом потому, что значения rgb всегда округлялись до потолка вместо нормального округления. Они смогли исправить это путем ручного округления значений, и, очевидно, этот метод также сохраняет качество, но я действительно не вижу, как, в основном потому, что SysUI, кажется, всегда конвертирует изображение в sRGB, что приводит к потере цвета, когда цветовое пространство больше.
Один из разработчиков 9to5Google также обнаружил (примечание редактора: разработчик Dylan Roussel, разработчик Android и участник 9to5Google ), что проблема не возникает в Android 11, поскольку изображение всегда преобразуется в sRGB, прежде чем обрабатывается каким-либо образом. ,
Я также пытался создать свое собственное сломанное изображение с помощью Photoshop или GIMP, но SysUI всегда преобразовывал изображение в безопасное цветовое пространство, не приводя к сбою (но к потере цветов). Я даже пытался извлечь сломанный цветовой профиль изображения и использовать его в новом изображении, но все еще не мог вызвать сбой SysUI.
Есть хорошие новости, и есть плохие новости
Плохая новость заключается в том, что проблема сейчас находится в открытом доступе, и вы можете поспорить, что некоторые люди будут использовать ее для вреда. Более того, эта ошибка (или очень похожая), по-видимому, была проблемой, по крайней мере, пару лет без видимых действий со стороны Google.
Также плохие новости: если вы станете жертвой шутки (или вашего собственного любопытства), нет простого, безболезненного способа отменить его. По крайней мере, возврат к заводским настройкам остается последним средством, но мы все равно не рекомендуем использовать его на своем устройстве.
Читайте далее: Лучшие обои для Android: Обои по умолчанию из 125+ устройств Android
Хорошей новостью является то, что это скорее простая ошибка, нежели вредоносное ПО или что-то более гнусное. Мы говорим «кажется», потому что не получили ответа от Google для подтверждения. Также хорошие новости: эта ошибка не будет проблемой, как только Android 11 появится позже в этом году.
Источник записи: https://www.androidauthority.com