В мире Android давно существует, казалось бы, необъяснимая на первый взгляд проблема — программы для камеры работают плохо. Снимки, сделанные с помощью сторонних приложений, порой получается ощутимо хуже, чем на стандартное предустановленное приложение, а иногда вдобавок к этому дополнительные модули камеры и вовсе не поддерживаются. Это касается не только отдельных сторонних приложений исключительно для съёмки (которые, к слову, весьма популярны у пользователей, ведь в стандартных утилитах не всегда есть профессиональный режим, ночная съёмка и прочие функции), но и встроенных в другие приложения камер — например, видоискателей в мессенджерах и соцсетях, позволяющих сделать фото или видео, не покидая сервис.
Если копнуть этот вопрос поглубже, то всё, в принципе, становится понятно — в мире Android есть нерешаемая проблема, которую постарались обойти (но не особо удачно). Именно об этом далее в статье.
Почему у iPhone нет такой проблемы
Описывать проблему нагляднее всего на контрасте с противоположным лагерем — iOS. А когда речь заходит о сравнении Android и iOS, то всегда появляется понятие «оптимизация».
Каждый год выходят десятки новых устройств под управлением «зелёного робота», и это если учитывать только самых известных производителей на глобальной арене. Все они похожи лишь внешне — внутри это зачастую абсолютно разные устройства, под которые приложения должны быть оптимизированы. И если всякие игрушки и офисные программы нуждаются лишь в оптимизации под процессор и соотношение сторон дисплея (в этом плане всё сравнительно просто, ведь самих чипсетов и экранов не так уж и много), то в случае с приложениями камеры всё намного сложнее — у разных гаджетов разные сенсоры и их комбинации, за работу которых отвечает разный процессор сигнала изображений (Image Signal Processor, ISP), встроенный в чипсет.
Например, у одного смартфона (Pixel 6a) может быть система из камер на 12,2 Мп и 12 Мп (широкоугольная) под управлением Tensor, у другого (TECNO Camon 19 Pro) — комбинация на 64 Мп, 50 Мп (телефото) и 2 Мп (датчик глубины) с процессором Helio G96, в их конкуренте (OnePlus Nord CE 3 Lite) установлены камеры на 108 Мп, 2 Мп (макро) и 2 Мп (датчик глубины) при чипсете Snapdragon 695 5G, а кто-то и вовсе решил оснастить свой смартфон (OPPO Reno8 T) микроскопной линзой вместо привычного модуля для макро (даже если не вспоминать необычный сенсор на 100 Мп). А ведь нужно учитывать ещё и фронтальную камеру...
В то же время Apple выпускает не больше пяти iPhone в год, при этом заставляя разработчиков придерживаться строгих требований. К тому же многие из «яблочных» смартфонов одного года работают на одинаковом процессоре, а большинство камер тоже повторяются. Как результат — в случае с iOS разработчикам легко оптимизировать свои приложения под железо всех устройств, а на Android это сделать невозможно.
Это проблема не теоретическая, а практическая — стоит вспомнить хотя бы популярное приложение-камеру Moment, разработчики которого в 2020 году решили прекратить разрабатывать Android-версию утилиты. Тогда они написали:
Мы любим Android, но, к сожалению, у нас нет возможности продолжать разработку приложения. [...] Суть в том, что производители телефонов любят создавать свои собственные версии Android, каждая из которых имеет разный доступ к некоторым функциям камеры. В результате получился случайный список совместимости, в котором каждому телефону доступны разные функции приложения. Проблема только усугубляется каждый раз, когда выходит новая версия Android, потому что она ломает фирменные модификации, которые производители телефонов сделали в своих телефонах.
Своим прощальным письмом Moment Inc раскрыли ещё одну проблему, теперь уже совсем не очевидную — каждая из прошивок Android допускает сторонние программы к разным возможностям камер, причём эти уровни доступа меняются с каждой версией системы (и, вероятно, с каждой сборкой оболочки от производителя). Чтобы понять, насколько эта проблема существенна, стоит вспомнить хотя бы MIUI: одна и та же версия прошивки может быть основана на разных поколениях Android. То есть, например, чтобы обеспечить поддержку смартфонов Xiaomi, Redmi и POCO (не вспоминая модели без MIUI) в 2022 году, разработчикам нужно было учитывать ограничения MIUI 13 + Android 12 и MIUI 13 + Android 13, а затем проделывать то же самое для MIUI 14 в связке с Android 13 и Android 14 (не забывая сохранять старую поддержку для тех, кто не обновился) и так далее. И это с учётом того, что у новых смартфонов ещё и новые связки камер (как и сами камеры).
К тому же одна и та же модель смартфона может иметь разные характеристики в зависимости от региона, то есть функциональность сторонних приложений может отличаться даже на одной то же модели.
Google уже давно пытается всё исправить (но не настойчиво)
Проблема с фрагментацией Android известна примерно столько же, сколько и сам Android. И Google старалась нивелировать подводные камни с поддержкой камер ещё даже до того, как появилось мода на установку двойных тыльных глазков.
Ещё в Android 5 появилось API Camera2, которое позволяет сторонним приложениям воздействовать на настройки камер (если производитель разрешает это) — регулировать показатель ISO, скорость срабатывания затвора, съёмку в RAW и прочее. Со временем за Camera2 последовали и другие технологии наподобие CameraX, которая открывает сторонним разработчикам доступ к различным режимам съёмки (наподобие портретов и ночного режима). Вероятно, работы над решением проблемы не прекращаются до сих пор, ведь недавно, с выходом Android 13, появился интерфейс Camera HAL (Hardware Abstraction Layer), выступающий неким связующим звеном между ПО верхнего (Camera2) и нижнего уровней. В теории HAL позволяет задействовать стандартное API для работы с камерой вне зависимости от того, какие типы сенсоров и какие драйверы камер используются на устройстве.
Казалось бы, что комбинация из Camera2, CameraX и HAL — это то самое решение, которое устранило бы проблему фрагментации Android в вопросе поддержки камер (или хотя бы снизило её до минимума). Но почему проблема всё ещё присутствует? Потому что Google не обязывает реализовывать поддержку никакой из этих технологий.
Например, компании вправе не давать доступ к настройкам камер через Camera2 или не предоставлять специальные режимы съёмки через CameraX. То же самое касается и HAL — реализовать этот интерфейс крайне хлопотно, и производителям может быть это попросту неинтересно. Проблема ещё и в том, что даже если поддержка какой-то из технологий имеется, она необязательно одинаковая. Например, только для Camera2 существует пять уровней реализации, отличающиеся количеством доступных функций.
К слову, узнать о поддержке Camera2 на конкретном смартфоне можно через приложение Camera2 API Probe — оно показывает как уровень реализации (пункт Hardware Support Level), так и конкретные поддерживаемые и неподдерживаемые функции.
💡 В основном только Samsung (и сама Google) реализовывают поддержку CameraX в большинстве своих устройств (но даже Google почему-то обделил ею Pixel 6 Pro, базовый Pixel 7 и Pixel 7a).
Смартфоны могут потерять ранее имевшуюся поддержку API
В 2021 году владельцы смартфонов OnePlus, использующие портированную Google Camera, столкнулись с казусом — после обновления прошивки до OxygenOS 12 сторонние приложения камеры потеряли доступ к вспомогательным модулям, то есть к широкоугольной, макро- и зум-камерам. Это произошло потому, что OxygenOS 12 основана на ColorOS от материнской компании OPPO, а она не поддерживает ранее использованную лазейку для доступа к Camera2 API.
Справедливости ранее стоит отметить, что впоследствии OnePlus исправила проблему, а негласно считалось, что разработчики допустили оплошность случайно. Но факт остаётся фактом — ранее существовавшая поддержка API камер может исчезнуть с одним из обновлений. И неизвестно, станет ли другой производитель на месте OnePlus возвращать поддержку технологий доступа к камере, ведь за пределами лагеря Pixel только у OnePlus, как негласно считается, большая доля гик-пользователей — у других количества недовольных может быть недостаточно для возвращения API.
Всё может измениться, но вряд ли в ближайшем будущем
Судя по всему, одна из главных причин такого сильного разгара проблемы в том, что она тревожит не настолько уж большое количество людей. Для быстрых фото и видео через мессенджеры и социальные сети, видимо, достаточно и базового доступа к камере, реализованного в большинстве смартфонов, а продвинутые настройки важны преимущественно любителям мобильных фотографий (но и те, покупая смартфон, обычно выбирают модели с нативной поддержкой Pro-режима в стандартном приложении камеры).
Тем не менее появление HAL в Android 13 показывает, что Google не собирается пускать проблему на самотёк — компания борется с ней, но делает это не спеша, поскольку не видит серьёзных причин сильно усложнять работу OEM-производителям какими-то жёсткими требованиями.
По материалу Android Police.