Раз уж астрологи объявили месяц статей про прошивки для Android без гугловых сервисов, поделюсь и я своим опытом. Чтобы предвосхитить возможные вопросы к статье, сразу хочу сказать какие именно цели я преследовал при перепрошивке, а где приходилось срезать углы.
Желаемые (основные) цели:
Избежать vendor lock-а.
Не хранить все яйца в одной корзине.
Свобода внутри своего устройства.
Использовать приложения с открытым исходным кодом.
Возможностью хостить данные на своих мощностях.
Не убирать возможность пользоваться проприетарным ПО.
Иметь возможность ограничивать приложения в доступе у данным.
Увеличить время жизни устройства от подзарядки до подзарядки.
Цели, к которым я не стремился (но некоторые частично достигнуты за счёт предыдущих):
Приватность и анонимизация.
Блокировка слежки.
Шифрование везде и во всём.
Я не считаю что достиг максимума в основных целях, но я осознаю “срезанные углы”, и получившийся результат меня более чем устраивает.
Немного подробней про каждую цель.
Избежать vendor lock-а — чтобы внезапно не потерять доступ ко всему, только потому что какой-то ИИ (или не ИИ) меня решил заблочить. Я осознаю что вероятность этого весьма мала, но в прошлом у меня был негативный опыт в подобного характера, и я бы не хотел его повторения со своим личным телефоном.
Не хранить все яйца в одной корзине — полностью избежать vendor lock-а не получится, абсурдный пример — при полностью своём софте, и серверах у себя в квартире, всё равно есть lock на электрика, который в самый неподходящий момент может отключить электричество. Так что вторая цель — попытка баланса между хранением разных данных в разных местах, и преодолением неудобств от этого.
Свобода внутри своего устройства — тут подразумевается рут, а так же дополнительные надстройки к нему.
Использовать приложения с открытым исходным кодом, а так же с возможностью хостить данные на своих мощностях — я уже давно большой поклонник решений с отрытым кодом. Осознаю, что я не буду изучать код каждого на предмет закладок, и более того, я не буду их лично компилировать, а предпочту скачивание, скажем, с F-Droid (где какой-нибудь злой гений мог бы внедрять закладки при сборке). Тем не менее, у меня на душе светлей от использования OSS-приложений, а ещё в прошлом я, бывало, пересобирал какие-то приложения с изменениями необходимыми лично мне.
Возможностью хостить данные на своих мощностях — это продолжение избегания vendor lock-а. Если софт предполагает хранение данных вне устройства, то хотелось бы чтоб эти данные хранились либо у меня на сервере, либо, на крайний случай, была возможность выгрузки данных в неком читаемом формате.
Не убирать возможность пользоваться проприетарным ПО — приятнось для души это одно, а работа и жизнь — это другое. Я не Столлман, и не готов настолько радикально сменить работу, банк, страну и многое другое, чтобы была возможность пользоваться исключительно OSS-софтом. Достаточно часто приходится пользоваться проприетарным ПО.
Иметь возможность ограничивать приложения в доступе у данным — в Android всегда был механизм permissions, а так же уже достаточно давно runtime permissions, где приложения могут в рантайме запрашивать необходимые им доступы. Но этим часто злоупотребляют, и приложение может просто отказаться запускаться если не предоставить все необходимые доступы. Хотелось бы, скажем, дать доступ к контактам, но к фейковым.
Увеличить время жизни устройства от подзарядки до подзарядки — без комментариев.
Анонимизация, блокировка слежки и шифрование везде и во всём — по этим пунктам отвечу старым добрым комиксом. Если кто-нибудь, ну вдруг, получит доступ ко всем моим данным, то будет обидно, досадно, но моя жизнь глобально не ухудшиться. А если государство захочет меня нагнуть, то ему для этого достаточно лишь собственного желания.
Выбор ОС и телефона
Будучи разработчиком под Android для меня выбор ОС был прост (хотя изначально я немного думал в сторону Sailfish OS). В качестве форка я выбирал между LineageOS и /e/.
Ранее у меня уже был положительный установки и использования CyanogenMod и LineageOS, а /e/ базируется на LineageOS. У /e/ есть некоторое преимущество в виде microG искаропки, но и у microG есть собственные билды LineageOS.
Spoiler
LineageOS — свободный (как в понятии “free as freedom” так и в понятии “free as beer”) форк Android. От AOSP отличается готовыми сборками под большое количество устройств и некоторыми дополнительными “плюшками” (улучшенный рабочий стол, твики в настройках).
microG — свободная (open source) реимплементация некоторых частей GSF (Google Services Framework). Особая ценность для пользователя в том, что microG добавляет поддержку PUSH-уведомлений, которые отправляются по механизму GCM.
/e/ — если LineageOS представляет собой просто улучшенный AOSP без экосистемы, то /e/ предоставляет экосистему в виде /e/ account-а, email-хостинга, магазина приложений, карт, а так же предоставляет улучшенные основные приложения (т.к. я сам /e/ не устанавливал, то возможны неточности).
Для помощи себе в выборе телефона, я написал небольшой скрипт, который скачивает список устройств, для которых есть LineageOS, проверяет наличие /e/ и microG для этого устройства, парсит onliner и 4pda на предмет даты выхода устройства и максимальной доступной версии Android под неё у производителя и затем выводит список, отсортированный по “привлекательности” устройства (код не ахти какой, по этому вместо нормального репозитария выложил в gist).
Spoiler
хотя microG теоретически может устанавливаться на любой форк Android-а, на LineageOS её сходу установить нельзя, т.к. мейнтейнеры LineageOS не хотят добавлять в апстрим небольшой патч, который необходим для корректной работы microG. Того патча, там, буквально несколько строчек, но придётся пересобрать LineageOS самостоятельно. К счастью, мейнтейнеры microG предоставляют свои сборки LineageOS уже с патчем, с самим microG а так же с предустановленным F-Droid.
F-Droid — так называется и репозитарий свободного ПО для Android, и приложение-магазин, которая позволяет их из этого репозитария скачивать и устанавливать.
Взяв десяток устройств из верхушки списка, я добавил их в сравнение на онлайнере (не сочтите за рекламу, как мне кажется там действительно удобное сравнение), и выбрал наиболее подходящий для меня вариант. Несмотря на предубеждение у телефонам из поднебесной, это оказался Xiaomi Mi 8.
Использую этот телефон уже пол года, и каких-либо нареканий кроме слишком большого размера экрана у меня к нему нет. Но ни в коем случае на нём не настаиваю, тем более что у вас могут быть другие предпочтения, да и за эти пол года появилось больше моделей с поддержкой LineageOS.
Для этого телефона доступно как LineageOS for microG так и /e/, но я отдал предпочтение более чистому Android-у (LineageOS for microG).
Установка
Детально описывать установку я не буду, т.к. во-первых это было уже давно и я мог что-то подзабыть, а во-вторых вы можете выбрать другое устройство. Поэтому, лучше найдите ветку форума про интересующий вас телефон на 4pda — там будут более чем подробные инструкции и отзывчивое community.
Но чтоб не оставлять раздел совсем пустым, вот что вспомнилось про установку для моего телефона:
Разблокировать загрузчик по инструкции с 4pda.
Обновить официальную прошивку (MIUI) до версии Android, соответствующей той, которую будете прошивать (осторожно, версии самого MIUI и Android на котором он базируется не совпадают). Кажется что виртуалка с Windows не понадобилась, но точно не помню.
Установить TWRP по инструкции с 4pda (там под Windows, но bat-ники очень простые, и можно всё сделать в любой OS).
Устанавливаем LineageOS по инструкции с 4dpa, но только без OpenGApps. Хоть название намекает на открытость, но открыт там лишь код, который устанавливает GSF, а сами GSF как были проприетарными и под контролем у Google, так и остаются.
Устанавливаем Magisk, и перезагружаем устройство.
Spoiler
MIUI — форк Android-а использующийся с телефонах Xiaomi (а так же в некоторых других благодаря кастомным прошивкам). Отличается красивым внешним видом и обилием рекламы прямо в прошивке (sic).
TWRP — Team Win Recovery Project, кастомное рекавери для андроид, с широкими возможностями и управлением тачем (в отличие от некоторых других, где управление производится кнопками громкости).
Magisk — systemless root для Android (не требуется модификации никаких файлов в разделе system). Так же Magisk предоставляет API для плагинов, которые реализуют и другие (кроме root) вещи.
Сразу после перепрошивки и перезагрузки, нужно установить несколько важных приложений. Большинство из них находится в основном репозитории F-Droid, но некоторые в дополнительных (список других популярных репозиториев можно взять из приложения Aurora Droid).
Magisk Manager
Если он не был установлен сразу, нужно установить. Далее через него нужно включить Magisk Hide а так же переименовать имя пакета и название launcher-а — это позволит более чем успешно скрывать наличие рута на устройстве. Только учтите, что Magisk Hide не применяется автоматически, и его нужно включать индивидуально для нужных приложений.
Вопросом прохождения успешной аттестации SafetyNet я особо не занимался, т.к. пока что не сталкивался с таким приложением, где это было бы проблемой. Если такое будет, то либо попробую всё-таки настроить, либо подумаю над сменой приложения.
Spoiler
Google SafetyNet — механизм в GSF, который позволяет сторонним приложениям узнавать, насколько безопасно (по мнению Google) устройство, на котором работает приложение.
Есть два вида проверок — “basicIntegrity” и “ctsProfileMatch”. Первая из них не очень строгая, и отвечает на вопрос не “поддельное” ли (что бы это ни значило) устройство. Вторая более строгая, и успешно пройти её могут только устройства, которые прошли Android compatibility testing.
Чтобы пройти “ctsProfileMatch” на кастомной прошивке, нужно делать очень много странных вещей, и то, нет никаких гарантий.
Проверку “basicIntegrity” должно быть пройти проще (если верить многочисленным статьям), но в моём случае не проходит даже она :(
Из модулей я поставил “Riru (Riru - Core)” и “Riru - EdXposed” (сам по себе Xposed не работает на новых версиях Android, но это обходной путь через Magisk). Другие модули мне не пригодились, хотя выбор очень большой.
Spoiler
XPosed — фреймворк, который позволяет сторонним модулям внедряться в приложения, без необходимости модификации оных (XPosed внедряет себя в загрузчик приложений, позволяя на лету подменять классы и методы).
Для XPosed написаны тысячи (если не десятки или даже сотни тысяч) модулей, позволяющих кастомизировать Android до мельчайших деталей.
Через EdXposed я установил “App Locale 2” для принудительной смены языка в приложениях (я предпочитаю интерфейс телефона и большинства приложений на английском, но некоторые приложения хочу видеть на русском. К сожалению, не все предоставляют такую возможность в настройках (например, Яндекс Деньги), так что приходится действовать обходным путём.
Ещё я установил модуль “XPrivacyLua” для подсовывания фейковых данных особо любопытным приложениям, которые не запускаются если не разрешить пермишен, который бы мне не хотелось бы давать.
FoxyDroid, Aurora Droid
Сразу в системе будет установлен F-Droid (при условии установки LineageOS for microG). Мне приложение не кажется ни особо быстрым, ни особо удобным, по этому я дополнительно устанавливаю FoxyDroid и Aurora Droid.
FoxyDroid — быстрый и минималистичный магазин приложений. Aurora Droid очень красив, но местами глючноват. Из хорошего — там сразу есть список дополнительных репозиториев с OSS-программами. Я некоторые из них переношу в FoxyDroid (Bromite, IzzyOnDroid, microG), а сам Aurora Droid потом удаляю (но ни в коем случае не призываю делать точно так же).
Aurora Store
Полностью отказаться от магазина Google Play я пока не готов, по этому использую Aurora Store для скачки приложений оттуда. Там можно войти под своим аккаунтом, и получить доступ к купленным приложениям (внутри самого Aurora Store покупать нельзя, так что покупайте через Web либо с другого устройства). Осознаю что за использование своего аккаунта вне самого Google Play меня могут безвозбранно забанить, но я иду на этот риск.
Apple UnifiedNpl Backend, Deja Vu Location Service
Сам по себе microG не умеет определять координаты без GPS, но делегирует эту задачу сторонним приложениям через механизм UnifiedNlp. Сразу в прошивке уже есть Mozilla UnifiedNpl Backend, но по крайней мере в моём городе он не особо точен, по этому я устанавливаю дополнительные.
Apple Unified Nlp Backend — может показаться что это “шило на мыло” (зачем избавляться от слежки Google, если будет слежка от Apple), но как я писал вначале статьи, цели приватности я не преследовал, а OSS-приложений с названием похожим на “Google Unified Nlp Backend” я не нашёл.
Deja Vu Location Service — приложение ведёт локальную базу местоположений и их соответствия WiFi-точкам и мобильным вышкам. Через некоторое время использования, позиция без GPS будет определяться в тех местах, где вы часто бываете.
Flite TTS Engine
Синтезатор речи. Умеет только английский язык. Сразу после установки нужно скачать необходимые голосовые данные и настройть их. Хочу предупредить, что иногда кажется, что настройки не применяются. Тогда нужно “смахнуть” приложение, и открыть заново.
DAVx5
Это приложение служит для того, чтобы была возможность синхронизации контактов и календарей по протоколам CardDAV и CalDAV. Для календарей (и почты) я пользуюсь Fastmail, и там всё достаточно тривиально. Контакты же мои всё ещё в Google, и настроить DAVx5 для синхронизации контактов оттуда немного замороченно.
Адрес будет https://www.googleapis.com/carddav/v1/principals/<ваша почта>/lists/default/, а вот с паролем хитрее. Т.к. DAVx5 не умеет гугловскую авторизацию, а гугл больше не поддерживает вход по логину и паролю, придётся сделать специальный пароль для приложений.
В процессе создания пароля придётся включить 2-step verification, и для этого пригодится следующая программа.
Authenticator Pro
Это приложения для герерации кодов для двухфакторной авторизации. Альтернативно можно установить Google Authenticator, но тот который в F-Droid уже устарел (хотя и работает), а новый уже не open source.
Немного других приложений
Остальные приложения вы смело можете заменять на свой вкус, но мне нравятся именно эти:
QKSMS — отличная программа для СМС.
Simple Calendar — AOSP-календарь для меня не очень удобен, а вот Simple Calendar самое то — красивый, функциональный, но не перегруженный (не хватает только возможности задавать цвет для события в рамках одного календаря).
Binary Eye — сканнер штрих- и бар-кодов.
Fennec F-Droid — мой основной браузер.
Bromite — если для просмотра какого-нибудь сайта нужен браузер на основе Chroimum. К слову, команда Bromite так же предоставляет билды чистого Chromium-а.
LibreOffice Viewer — просмотрщик документов.
Librera PRO — читалка книг (дизайн немного инопланетный, но программа очень функциональная).
MuPDF viewer — минималистичный просмотрщик pdf. В F-Droid есть несколько вариантой MuPDF, но именно этот более-менее работает на последних версиях Android, и в котором есть хоть какие-то приятные анимации.
NewPipe, SkyTube — замена приложению YouTube.
OsmAnd — на мой вкус самые функциональные offline-карты на базе open street maps.
Telegram FOSS — просто чтоб вы знали, что есть отдельная OSS-сборка. Там есть нюанс с настройкой уведомлений (в OSS-версии не используются уведомления через GCM), и постоянно будет висеть нотификашка, но по тапу на неё в самом телеграме будут инструкции как её скрыть.
Tasks — я всё ещё не перешёл на него (пользуюсь проприетарным Todoist), но выглядит многобещающе, и умеет синхронизироваться с CalDAV-сервером (с Fastmail работает).
Warden — приложение, которое сканирует установленные приложения, и прогоняет их по разным базам, после чего выводит трекеры и логгеры, которые внедрены в приложение. Не могу сказать что я им пользуюсь по делу (например, не пользуюсь приложениями, если в них много трекеров), но бывает интересно просмотреть какие приложения больше собирают инфы, а какие — меньше.
Это далеко не весь список моих приложений установленных из F-Droid и других свободных репозиториев, но остальные мне показались очень спецефичными, по этому я не стал их упоминать, как и приложения установленные из Google Play (тут у каждого будет свой набор любимых приложений).
Единственное, чего я не нашёл в Open Source, так это достойного почтового клиента, который умеет много email-аккаунтов, поддерживает Google-аутентификацию, не перенаправляет все письма на какие-то странные сервера, умеет unified inbox и прилично выглядит. K9-Mail мне неудобен, FairEmail выглядит интересно, но я пока не готов врываться в настройку (кроме того в OSS-версии недоступно много функций). По этому я продолжаю пользоваться проприетарным и платным приложением AquaMail (не сочтите за рекламу), но с радостью приму советы по смене приложения.
Итоги
Даже несмотря на то, что большинство желаемых целей было достингуто не на 100%, результатом я всё равно очень доволен, и возвращаться на прошивку с GSF или вообще на прошивку от вендора нет никакого желания. Подробней по каждой цели:
Избежать vendor lock-а и не хранить все яйца в одной корзине — в какой-то мере удалось. Телефон теперь принадлежит мне (если не рассматривать возможные закладки в драйверах), а данные разнесены по разным провайдерам.
Свобода внутри своего устройства — да, есть полноценный рут, мощное рекавери и много модулей для Magick и XPosed, что позволяет исследовать устройство, и изменять его поведение.
Использовать приложения с открытым исходным кодом — частично удалось. Многие OSS-приложения ничуть не хуже, или даже лучше своих проприетарных аналогов (для моих сценариев использования), но для некоторых проприетарных приложений не удалось найти адекватную замену (Evernote, Pocket), а некоторые никогда не будут в OSS (приложения для банкинга). Ещё местами есть проблема, когда приложение open source, но билд, который есть в F-Droid либо устарел по сравнению с билдом в Google Play, либо не работает (привет, Rocket.Chat).
Возможностью хостить данные на своих мощностях — частично удалось, и потенциально можно перенести ещё больше информации к себе. Почта, календари, контакты, задачи — всё это можно хостить либо вообще на своём сервере, либо выбрать провайдера себе по вкусу. Так же можно огранизовать свои сервера для некоторых чатов и мессенджеров. Но из-за специфики рабочих процессов что-то остаётся проприетарным (скажем, не получается перейти с Google Docs на OwnCloud или NextCloud).
Не убирать возможность пользоваться проприетарным ПО — всё хорошо, можно без проблем устанавливать приложения из Google Play, в том числе и когда-либо купленные. Но вот что касается возможности покупать приложения на самом устройстве, либо пользоваться in-app покупками, то тут не всё так однозначно. Чтобы покупать, нужно иметь какое-либо другое устройство с установленным GSF — тогда можно будет покупать либо с этого устройства, либо через Web. С in-app-ами хуже, т.к. если статус покупки / подписки не хранится на сервере, то при оплате in-app-а на дополнительном устройстве, он не появится на вашем основном. Хотя с приложениями, которыми я пользуюсь (Todoist, Evernote, Яндекс.Музыка) всё хорошо.
Иметь возможность ограничивать приложения в доступе к данным — да, это возможно через модули к XPosed.
Увеличить время жизни устройства от подзарядки до подзарядки — это получилось, и да, это случилось после замены GSF на microG. Читал статьи, где авторы утверждают что GSF сами по себе отжирают совсем немного батареи, а вся вина на приложениях, которые часто получают пуши и / или “просыпаются” в фоне. Так вот, приложений у меня установлено очень много, большинство из них пользуются пушами через GCM, а некоторые и вовсе держат своё соединение. И несмотря на то, что я достаточно активно пользуюсь телефоном, заряжаю я его раз в несколько дней. Если хочется большего, то в настройках microG можно увеличить интервал проверки пушей, тогда батарея будет тратиться ещё меньше (но ценой того, что пуш-нотификация может прийти со значительно задержкой).
HellKaim
Спасибо, всегда интересно посмотреть чужой опыт.
FaiEmail стоит от 5$ или столько, сколько готовы задонатить. У него есть странности в отображении писем из папок, но, возможно, это только в альбомном режиме, в котором я чаще всего использую свой аппарат. Больше года уже на 2х устройствах и альтернативу не ищу. Настроек там много, но по факту визарда в начале хватает, а все допы только на случай каких-то хитрых хотелок, без которых вполне ок.
Я не использую вообще никакой аналог microG, так что я отрезан от многих приложений, но нашел для себя полезным инфо про xPose модуль, позволяющий подсовывать фейковые данные. До этого я знал только об альтернативной адресной книге, которая хранит контакты в отдельной бд, что прячит их от системных вызовов Андроид и, как следствие, сильно лубопытных приложений.
Вообще же, по опыту чистого андроида, возникает ощущение возврата в 2000е, когда были все эти активсинки и каждое приложение иногда еще и свой клиент тянуло на РС...
Restorer Автор
Спасибо, может быть попробую его ещё раз (когда-нибудь).