Разработчик приложения Swipe for Facebook, известный под псевдонимом Jcbsera, обнаружил баг в работе адаптивных иконок (Adaptive Icons), новой функции, представленной в Android Oreo (8.0).
Новая функция позволяет разработчикам и производителям изменять форму и размер иконок приложений в зависимости от конкретного устройства и лаунчера, на котором они отображаются. Это позволяет стилистически привести все иконки к некому «общему знаменателю», к примеру, в одном случае все иконки будут круглыми, а в другом случае они будут иметь форму квадрата со скругленными углами.
Стили адаптивных иконок хранятся в локальном файле XML, и именно с этим связан обнаруженный Jcbsera баг. Совершенно случайно разработчик заметил, что если присвоить одинаковые имена самому XML-файлу и изображению, использующемуся в иконке на переднем плане (к примеру, ic_launcher_main.png и ic_launcher_main.xml), это может привести к очень неприятным последствиям.
Jcbsera не заметил баг сразу, так как тестировал новую версию своего приложения в эмуляторе Android Studio, а там проблема никак себя не проявила. Но стоило ему отправить обновленную версию приложения в релиз, как страницу в Google Play наводнили негативные отзывы. Пользователи массово жаловались, что их устройства теперь беспрестанно «крашатся».
Оказалось, что одинаковые имена файлов приводят к созданию циклической ссылки, в результат чего SystemUI и лаунчер «падают» каждый раз после запуска устройства. Проблема затрагивает Pixel Launcher и другие лаунчеры с поддержкой адаптивных иконок. В результате пользователь даже не может удалить вызывающее сбой приложение, так как устройство просто продолжает циклично перезагружаться раз за разом.
Jcbsera подчеркивает, что для срабатывания бага даже не нужно запускать проблемное приложение, достаточно просто его установить. После этого единственным способом вернуть устройству работоспособность остается удаление приложения в режиме отладки, с помощью Android Debug Bridge. Но и здесь придется каким-то образом улучить момент между перезагрузками, а также понадобится активированный режим отладки через USB. К тому же Android в такой ситуации предложит пострадавшим произвести сброс к заводским настройкам, что повлечет за собой потерю множества данных.
Разработчик уже обновил Swipe for Facebook, избавившись от проблемы в своем коде, и сообщает, что патч для данной проблемы должен войти в состав Android Oreo 8.1. Но пока ошибка не будет устранена, и большинство пользователей не обновят свои устройства, проблема в работе адаптивных иконок имеет все шансы стать грозным оружием в руках пранкеров и вымогателей.