Android Go — это специальная версия Android для старых и бюджетных устройств. Android Oreo Go или Android Pie Go предназначен для устройств с 1 ГБ ОЗУ или менее. Есть примеры нормальной работы Android Oreo Go (LineageOS 15.1 Go) даже на смартфонах 2013г, для которых официально был выпущен только Android Jelly Bean. Хотя на 1 ГБ ОЗУ можно использовать и полноценный Android Oreo 8.1, но Android Oreo 8.1 Go имеет гораздо более высокую отзывчивость интерфейса – программы запускаются и переключаются быстрее.
Рассмотрим найденные различия между обычным Android и Android Go, на примере чистой сборки LineageOS 15.1 и LineageOS 15.1 Go.
Видимые отличия Android 8.1 Go Edition, Android 9 Go Edition.
В многочисленных обзорах Android Go обычно пишут только про урезанные сервисы Google (Gmail Go, Files Go, Maps Go и т.п.), но это всё сторонний софт (хоть и предустанавливаемый производителями). В Android Go есть ряд собственных отличий и ограничений, не связанных с сервисами Google и фирменными дополнениями от производителя.
Разделение экрана.
В обычной версии Android 8.1 (Oreo) и 9.0 (Pie) есть функционал многооконности. Для его использования надо нажать и подержать кнопку списка последних приложений – экран разделяется на две половины, и в каждой из них могут быть разные приложения одновременно. Особенно, если экран большой. Например в одной половине экрана можно запустить переводчик или калькулятор, или ещё какую-либо вспомогательную программу.
В версии Android Go режим многооконности недоступен, при удержании кнопки списка последних приложений система сообщает что «Приложение не поддерживает разделение экрана». Хотя на самом деле это система не поддерживает – после выключения Go-режима те же самые приложения нормально работают на разделённом экране.
Список последних приложений.
Дизайн списка последних приложений в Android 8.1 и Android 8.1 Go различается.В обычной версии Android 8.1 список последних приложений в виде многослойных карточек.В Android 8.1 Go карточки разложены в один слой и пролистывание списка последних приложений занимает больше времени (потому что список получается длинным).В Android 9 этого различия нет, там в Go-версии дизайн списка последних приложений не отличается.
Мультиаккаунт.
В обычной версии Android можно добавлять дополнительные пользовательские и гостевые аккаунты.Если смартфоном пользуются разные люди, можно для быстрого переключения всех параметров использовать дополнительные аккаунты. В версии Android Go такой возможности нет, смартфоном может пользоваться только 1 владелец. Пункт «Пользователи» в Android Oreo Go и Android Pie Go – отсутствует.
Качество графики.
В Android Go скролл различных меню и списков не такой плавный как в обычном Android. Особенно это заметно в меню Google Play, и прочих местах где используется WebView.
Разрешения, ограничения прав.
В Android Oreo Go и Android Pie Go отсутствует доступ (Настройки – Приложения и уведомления – Расширенные настройки – Специальный доступ) к четырём дополнительным правам.
И приложения, которым эти права нужны – в общем случае получают отказ. Итак, список отсутствующих в Android Go разрешений:
- «Доступ к функции «Не беспокоить»» — это право например может использовать стандартный диалер, включая на время разговора режим «не беспокоить». Причём, отсутствие этой настройки в LineageOS 15.1 Go не лишает приложения возможности управлять режимом «Не беспокоить», например диалер реально включает режим «Не беспокоить». Но это скорее всего баг, и например в LineageOS 16.0 Go диалер управлять режимом «Не беспокоить» не может.
- «Вспомогательные VR-сервисы» — у меня нет программ которые бы это требовали.
- «Доступ к уведомлениям» — позволяет приложениям читать и/или удалять уведомления из других приложений. Например Nova Launcher использует это разрешение для отображения собственных более информативных бейджей у значков приложений. Ещё Clean Master его запрашивает для функции очистки уведомлений (Notification Cleaner, но смысл чистить уведомления через Clean Master я не понял, их же можно стандартным образом смахнуть). В Android Go доступа к уведомлениям нет, приложения не могут читать чужие уведомления.
- «Картинка в картинке» — это разрешение позволяет разным видеоплеерам выводить маленькое окно с видео поверх других приложений. В Android Go функционал «картинка в картинке» не доступен, в тех приложениях где окно выводится в обычном Android – в Go-версии окно не выводится. Хотя, в LineageOS 15.1 Go настройка этого разрешения продублирована в свойствах приложений – оно не помогает, наверно это ошибка.
Внутренние отличия Android Go Edition.
Управление памятью в режиме Android Go.
Самое существенное отличие Android Go – это другие алгоритмы управления ОЗУ. Классический LowMemoryKiller там не используется, для нормальной работы Android Oreo Go или Android Pie Go ядро должно поддерживать новый алгоритм vmpressure.
Управление памятью в Android Go более оптимизированное для экономии памяти (в ущерб кешированию): более агрессивное закрытие фоновых процессов, закрытие любого сервиса если он стал занимать слишком много памяти в процессе работы, последовательный запуск фоновых сервисов, меньше размеры различных кешей и буферов для графики, меньше кеш шрифтов, и много других решений для более экономного использования ОЗУ.
В итоге даже тяжеловесные приложения в Android Go запускаются и работают быстрее, чем в обычном Android на этом же девайсе.
Но если объём ОЗУ составляет 2 ГБ или более — использовать Android Oreo/Pie Go не нужно, он будет уступать обычному Android Oreo/Pie из-за меньшего кеширования.
Как переключить систему в режим Android Go.
Самый главный переключатель – это опция ro.config.low_ram=true в build.prop, Android превращается в Android Go простым добавлением этой опции. И наоборот — ro.config.low_ram=false или удаление опции — превращает Android Go в нормальный Android.
Есть даже готовые скрипты для рекавери, позволяющие легко и просто добавлять или удалять ro.config.low_ram. Либо можно редактировать build.prop вручную (при наличии root-прав).
Но, для полноценного переключения в режим Android Go – надо брать исходники и перекомпилировать прошивку. Потому что, кроме ro.config.low_ram есть ещё ряд опций, причём не только в build.prop, но и на уровне конфигов компилятора (и например скомпилированные файлы в system/framework/arm, system/framework/oat/arm различаются по размерам почти в два раза — для Go они более компактные).
При самостоятельной компиляции Android (LineageOS) – сборка в режиме Go делается добавлением в дереве устройства в platform.mk ссылки $(call inherit-product, build/target/product/go_defaults.mk)
Несложно заметить что этот способ помимо ro.config.low_ram=true в build.prop добавляет ещё несколько опций: ro.lmk.critical_upgrade=true ro.lmk.upgrade_pressure=40 ro.lmk.downgrade_pressure=60 ro.lmk.kill_heaviest_task=false pm.dexopt.downgrade_after_inactive_days=10 pm.dexopt.shared=quicken dalvik.vm.systemservercompilerfilter=speed-profile и увеличивает dalvik.vm.heapgrowthlimit с 96m до 128m