Ультрабюджетные Smart TV на базе Android — это вечный компромисс. Производители отдают железо чуть ли не по себестоимости, а потом отыгрываются на пользователях: пичкают систему агрессивной рекламой, партнерским софтом и сбором телеметрии. Всё это крутится в фоне и душит и без того слабые чипсеты.
Купил я тут Xiaomi Mi TV (модель на платформе hermano под управлением Android 11, с гордыми 1.4 ГБ оперативной памяти на борту). Пользоваться им «из коробки» было больно: реакция на пульт занимала секунды, меню дергалось, а приложения открывались целую вечность. Пришлось расчехлить ноутбук, подключиться по ADB и заглянуть «под капот».
Ниже — подробный разбор того, как я убрал конфликт двух лаунчеров в памяти, заморозил PatchWall без риска окирпичить ТВ, разобрался со странным сетевым поведением YouTube и ByeDPI, а также выяснил, почему после апгрейда локальной сети до гигабита скорость интернета на телевизоре не выросла ни на мегабит.
1. Конфликт двух лаунчеров и дефицит оперативной памяти
Начал я с простого: почему оно так тормозит? Подключился к ТВ по ADB, снял слепок распределения памяти через dumpsys meminfo и увидел занятную картину:
Total PSS by process: 142,689K: com.mitv.tvhome.atv (pid 1991 / activities) 95,843K: com.google.android.tvlauncher (pid 9200 / activities) ...
В системе параллельно крутились сразу два лаунчера (домашних экрана)! С одной стороны — стандартный Google Android TV Launcher (com.google.android.tvlauncher), с другой — фирменный Xiaomi PatchWall (com.mitv.tvhome.atv), забитый рекламой и рекомендациями.
При включении телевизор принудительно запускал PatchWall (минус 140 МБ RAM). Но стоило нажать кнопку «Домой» на пульте, как поверх открывался гугловский лаунчер (еще минус 95 МБ). На устройстве с 1.4 ГБ оперативки, где под нужды Android TV и графического стека выделено менее половины объема, держать две прожорливые оболочки — это просто приговор производительности. Они постоянно дрались за память и процессорное время.
2. Разборки с сетью: YouTube, ByeDPI и загадка гигабита
После первой настройки телевизора я столкнулся с классическим сетевым багом: после перезагрузки ТВ отвалился YouTube. Подключение по Wi-Fi горит как активное, браузер работает, а YouTube уходит в бесконечную загрузку и пишет «Нет подключения к сети».
Пришлось лезть в консоль и копаться в правилах маршрутизации (ip rule и ip route show table all). Вот что там обнаружилось:
12000:from all fwmark 0x0/0x20000 iif lo uidrange 10067-10067 lookup 1016 14000:from all iif lo oif tun0 uidrange 10067-10067 lookup 1016 ...default dev tun0 table 1016 proto static scope link
Разбираем эту схему:
-
YouTube на телевизоре крутится под UID
10067. -
Правила Android принудительно заворачивают весь трафик этого UID в отдельную таблицу
1016. -
Эта таблица тупо гонит пакеты в интерфейс
tun0. -
Виртуальный интерфейс
tun0создается локальной службой ByeDPI (io.github.romanvht.byedpi), которая режет TCP-пакеты, чтобы обходить замедления и DPI-блокировки.
На роутере (IP 192.168.188.1) в это время крутится sing-box с включенным Fake-IP DNS (198.18.0.0/15). Когда ТВ резолвит адрес youtube.com, DNS роутера отдает фейковый IP из диапазона 198.18.x.x.
Но при холодной перезагрузке ТВ служба ByeDPI (ByeDpiVpnService) по какой-то причине не запустилась автоматически. В итоге интерфейс tun0 просто не создался. А правила маршрутизации в системе остались! Трафик от YouTube (UID 10067) честно пытался уйти в несуществующий tun0 и падал в бездну. Стоило вручную запустить ByeDPI, как туннель поднялся и видео завелось.
Загадка: гигабит есть, а скорости нет
Вторая сетевая байка произошла во время глобального апгрейда домашней сети. Я заменил старые стомегабитные свитчи на управляемые гигабитные UniFi USW-Lite. Казалось бы, теперь-то Wi-Fi должен летать! Но замер скорости на телевизоре упрямо показывал те же ~60 Мбит/с, что и раньше.
Чтобы локализовать узкое место, я зашел по SSH прямо на роутер OpenWrt и запустил скачивание тестового файла с быстрого зеркала Яндекса:
wget -O /dev/null http://mirror.yandex.ru/debian/ls-lR.gz
И получил скорость ровно 7.87 МБ/с (около 63 Мбит/с). Это расставило все точки над i. Оказалось, что роутер подключен к провайдеру через беспроводной мост AirMax (точка-точка), реальная пропускная способность которого как раз упирается в эти 63 Мбит/с. Замена свитчей ускорила только локальный трафик внутри дома, а интернет-канал остался прежним. Мораль: всегда проверяйте скорость напрямую с WAN-порта роутера, прежде чем грешить на кабели или точки доступа.
3. Хирургическая заморозка: убираем PatchWall и системный софт
Чтобы вернуть телевизору отзывчивость, нужно избавить его от фонового мусора.
⚠️ Важное предупреждение: В интернете полно инструкций, где советуют удалять системные пакеты через команду
pm uninstall. Не делайте так! Без root-прав вы удалите приложение только для текущего пользователя (user 0), но если сделать сброс ТВ до заводских настроек (Factory Reset), система попытается восстановить удаленные хвосты, не найдет их и намертво зависнет в вечном циклическом ребуте (bootloop). Наш выбор — безопасное и обратимое отключение черезpm disable-user.
Подключаемся к телевизору по сети с компьютера (adb connect <IP-телевизора>:5555) и тушим PatchWall вместе с его рекламными сервисами:
Команды для отключения PatchWall
# Выключаем PatchWall и рекомендательные каналы Xiaomiadb shell pm disable-user --user 0 com.mitv.tvhome.atvadb shell pm disable-user --user 0 com.mitv.tvhome.mitvplusadb shell pm disable-user --user 0 com.mitv.tvhome.michannel# Принудительно выгружаем их из оперативной памятиadb shell am force-stop com.mitv.tvhome.atvadb shell am force-stop com.mitv.tvhome.mitvplusadb shell am force-stop com.mitv.tvhome.michannel
После этого единственным живым лаунчером останется стандартный com.google.android.tvlauncher. Кнопка «PatchWall» / «Mi» на пульте просто перестанет открывать рекламу, избавляя вас от случайных нажатий.
Дальше отправляем в спячку остальные ненужные фоновые процессы:
Команды для отключения системного мусора
# Избавляемся от мертвого магазина Google Play Фильмыadb shell pm disable-user --user 0 com.google.android.videos# Блокируем промо-рекомендации на домашнем экранеadb shell pm disable-user --user 0 com.google.android.tvrecommendations# Отключаем Live TV (если не используете обычную комнатную антенну)adb shell pm disable-user --user 0 com.mitv.livetvadb shell pm disable-user --user 0 com.mitv.livetv.ci_mediatek# Убираем бесполезные на ТВ игровые сервисы Google Play Gamesadb shell pm disable-user --user 0 com.google.android.play.games# Запрещаем фоновой службе обновлений Xiaomi будить телевизор по ночамadb shell pm disable-user --user 0 com.xiaomi.mitv.updateservice
Совет: Пакет голосового поиска Google Assistant (
com.google.android.katniss) не трогайте. Если его отключить, микрофон на пульте перестанет реагировать на нажатия.
4. Как убрать пустые серые плашки с главного экрана
После заморозки Google Play Фильмов на домашнем экране часто остаются «призраки» — пустые рекламные строки вроде «Топ продаж» или «Рекомендуемое». В настройках каналов тумблеры для них пропадают, и обычным способом их не убрать.
Решается это банальным сбросом кэша лаунчера. Выполняем в консоли:
adb shell pm clear com.google.android.tvlauncher
Экран телевизора на секунду погаснет, лаунчер перезапустится и перестроит свою базу данных с чистого листа. Увидев, что источник рекомендаций отключен, он навсегда сотрет эти рекламные строки.
(Маленький нюанс: порядок иконок в строке быстрого запуска вернется к стандартному. Придется потратить полминуты и заново набрать любимые приложения через кнопку «+»).
5. Борьба за ресурсы: как нас грабило приложение Zona
Даже после заморозки PatchWall телевизор продолжал шуметь и греться как утюг. Я зашел в консоль, ввел uptime и опешил: средняя нагрузка (load average) перевалила за 76 при норме около 1-2!
Запускаем просмотр активных процессов (top -b -n 1) и смотрим на топ пожирателей:
PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS 4582 u0_a102 20 0 1.3G 144M 72M S 64.2 10.2 0:08.56 mobi.zona 61 root 20 0 0 0 0 R 57.1 0.0 0:18.79 [kswapd0] 4314 50053 30 10 1.2G 69M 31M S 21.4 4.9 0:13.87 dex2oat32 ...
Пазл сложился моментально. Вот три виновника тормозов:
-
mobi.zona(клиент онлайн-кинотеатра Zona) — виновник торжества. Приложение стартовало вместе с системой и запускало фоновую службу, которая отжирала 64% процессора и 144 МБ оперативки (видимо, фоном раздавала торренты или опрашивала сервера обновлений). -
[kswapd0]— системный процесс ядра Linux. Из-за дикого дефицита свободной памяти он тратил 57% процессора на постоянный сброс страниц памяти в ZRAM/Swap (так называемый memory thrashing). -
dex2oat32— фоновый компилятор Android, оптимизирующий байт-код приложений после ОТА-обновления. Процедура штатная, грузит систему первые 10 минут после включения, а потом засыпает.
Тушим Zona одной короткой командой:
adb shell am force-stop mobi.zona
Нагрузка на процессор моментально упала до ~12%, thrashing прекратился, а телевизор выдохнул и стал плавно реагировать на пульт.
Вывод: Для слабых Android-устройств с малым объемом оперативной памяти автозапуск стороннего софта — смерть. Если пользуетесь Zona, не забывайте закрывать её. А еще лучше — перейдите на связку Lampa + TorrServe (ru.yourok.torrserve). TorrServe запускается только тогда, когда вы непосредственно смотрите торрент, и не висит в фоне без вашего ведома.
6. Что получили в итоге
После зачистки фонового мусора и настройки лаунчера телевизор буквально преобразился. Вот сухие цифры замеров:
|
Параметр |
Как было |
Как стало |
|---|---|---|
|
Свободная память (MemAvailable) |
~450 МБ |
~530+ МБ (высвободили ~80-100 МБ чистой RAM) |
|
Активные лаунчеры в памяти |
PatchWall + Android TV Home |
Только Android TV Home |
|
Свободный ресурс CPU в простое (Idle) |
~10-15% (из-за фоновой Zona улетал в 0%) |
~88-91% |
|
Рекламные каналы на домашнем экране |
«Топ продаж», рекомендации Xiaomi |
Полностью отсутствуют |
Мы не просто убрали раздражающую рекламу, а спасли устройство от постоянного свопинга в ZRAM и перегрева процессора. Теперь телевизор реагирует на пульт без задержек и без проблем тянет 4K-видео через торрент-стриминг.
ссылка на оригинал статьи https://habr.com/ru/articles/1044486/