Smart TV nội địa Trung Quốc (Xiaomi, TCL, Redmi) có một điểm chung khó chịu: bật lên là một đống quảng cáo, đề xuất phim, banner app rác. Mua TV xong vẫn phải chịu đựng cái launcher do hãng nhét vào. pengchujin/aerial-tv là câu trả lời cho vấn đề đó: một launcher Android TV mã nguồn mở viết bằng Kotlin, thiết kế theo phong cách tvOS của Apple, không quảng cáo, không feed đề xuất, và tự chiếm quyền làm màn hình chính sau khi khởi động.
Cái tên repo là Aerial, trùng với tên bộ screensaver nổi tiếng của Apple TV. Trang chủ ở https://aerial.qust.me.
Nó làm gì, và làm khác gì launcher mặc định
Màn hình chính gồm một đồng hồ số lớn đè lên wallpaper (wallpaper bị tối dần ở đáy và cạnh trái cho dễ đọc), bên dưới là grid app 5 cột mỗi hàng. Focus vào app nào thì icon nổi lên kèm tên. Mặc định có viền trắng quanh icon đang focus để nhìn từ xa, muốn kiểu tvOS gốc thì vào Control Center, mục Personalization, đổi Focus style.
Vài thứ trong phần mô tả khiến tôi để mắt:
- App hệ thống không có entry chuẩn (kiểu “App Center”, “HD Player”, “Mi Home” của Xiaomi) vẫn hiện trong danh sách All Apps.
- Có tile chuyển nguồn tín hiệu: ghim HDMI, AV, ăng-ten TV lên màn hình chính, bấm một phát là chuyển.
- Nhấn giữ phím OK mở menu: Move (các tile khác tự dời chỗ), Hide from home, App info, Uninstall.
- Phím Back hoạt động như tvOS: đang ở grid thì về hàng đầu, đang ở hàng đầu thì bắt đầu screensaver.
- Control Center mở bằng cách lên hàng đầu, nhấn phím lên, rồi OK. Trong đó có source (hiển thị thiết bị CEC), mạng, settings, slider âm lượng và độ sáng, phần cá nhân hóa (wallpaper, screensaver, focus style, thời tiết), và danh sách app đã ẩn.
Screensaver: điểm khiến tôi để ý repo này
Aerial mang theo 114 đoạn phim aerial của Apple TV, phát trực tiếp từ server của Apple, hiển thị tên địa danh khi camera di chuyển. Trái phải để chuyển đoạn trước/sau. Ngoài ra có chế độ photo (daily pick từ Bing và ảnh của bạn, chuyển động chậm) và chế độ clock (mỗi phút đổi vị trí một lần để chống burn-in).
Trên TV dùng screensaver chuẩn Android (như TCL), Aerial trở thành screensaver hệ thống luôn. Trên Xiaomi, hãng xài screensaver riêng, nên Aerial sẽ chen lên trước khi screensaver quảng cáo của Xiaomi kịp hiện. Nghe thì hơi hack, nhưng README giải thích rõ cơ chế bên dưới.
Vì sao repo này đang được chú ý
942 sao sau khoảng một ngày tạo (20/10/2026, cập nhật 21/10/2026). Con số đó nói lên nhu cầu: người dùng TV nội địa Trung Quốc quá mệt với launcher đầy quảng cáo, mà các giải pháp thay thế thì thường phải root hoặc vọc ADB thủ công. Aerial nhắm đúng vào khoảng trống đó. Điểm khác biệt lớn nhất so với launcher Android TV thông thường: nó chấp nhận đối đầu với firmware của hãng, dùng accessibility service và notification listener để tự hồi sinh khi bị hệ thống kill, thay vì giả vờ “cứ cài là xong”.
Repo cũng rất thẳng thắn về giới hạn: chỉ mới verify trên 6 máy cụ thể (MiTV-MFTR0, MiTV-MFFU0, Redmi X65 2026, TCL MT5879, Sony XRJ-77A80J, Sony BRAVIA VH1). Hãng khác như Hisense, Skyworth “chắc là chạy được” nhưng chưa test thật. Tác giả ghi rõ như vậy, không thổi phồng.
Cài thử: một lệnh, không cần root
Điều kiện: TV và máy tính cùng mạng LAN, bật ADB debugging trên TV. Với Xiaomi, vào Settings, About, bấm liên tục vào Product Model đến khi hiện developer mode, rồi vào Settings, Account & Security bật ADB debugging và Install unknown apps. Với TCL/Thunderbird, vào Settings, About, System Info, bấm theo thứ tự lên xuống trái phải trên remote (mỗi lần cách nhau dưới 1 giây), hiện mục “More” ở dưới, bật ADB trong đó. Android TV gốc hoặc Google TV thì bấm Build number 7 lần.
Sau đó trên macOS/Linux chạy:
curl -fsSL https://raw.githubusercontent.com/pengchujin/aerial-tv/main/tools/get.sh | KEEP_ADB=1 TV=192.168.1.20 bash
Đổi 192.168.1.20 thành IP TV của bạn. Script sẽ tải APK mới nhất, cấp các quyền chỉ ADB mới cấp được, precompile cho mượt, rồi chiếm quyền launcher và screensaver, mở đường cho autostart.
Vài biến thể nên biết:
KEEP_ADB=1: Xiaomi tự tắt ADB khi thức dậy từ standby, cờ này bảo Aerial mở lại ngay. Không cần thì bỏ đi.- Firmware chặn cài app launcher: thêm
-s guardvào cuối lệnh để cài bản không khai báo HOME. - TCL chặn mọi cài đặt qua ADB, script sẽ chuyển sang “Multi-screen Interaction” của TV, bạn bấm “Agree” một lần trên màn hình TV là xong.
Muốn quay về launcher cũ:
curl -fsSL https://raw.githubusercontent.com/pengchujin/aerial-tv/main/tools/get.sh | TV=192.168.1.20 bash -s restore
Nếu bạn xài Claude Code, Cursor hay Codex thì README có sẵn prompt để đưa cho agent chạy hộ, bao gồm cả bước kiểm tra foreground bằng adb shell dumpsys window | grep mCurrentFocus. Cách này tiện cho ai ngại gõ lệnh, nhưng tôi vẫn khuyên đọc qua phần Device notes trong docs/devices/ trước, nhất là nếu TV là TCL.
Cơ chế “sống sót” đáng để đọc
Phần thú vị nhất của repo không nằm ở UI mà ở cách nó đối phó firmware. README mô tả 5 lớp:
- Xin HOME role và set làm default launcher. Android TV gốc và Google TV chỉ cần đến đây.
- Launcher guard: một accessibility service theo dõi cửa sổ nào đang foreground, thấy launcher gốc của hãng hiện lên là kéo Aerial về. Nó chỉ xem cửa sổ nào ở trước, không đọc nội dung màn hình.
- Revive sau khi bị kill: Xiaomi force stop mọi app bên thứ ba khi standby. Aerial đăng ký notification listener (không đọc notification nào), hệ thống rebind nó trong khoảng 0,5 giây, Aerial lợi dụng điểm đó để sống lại và dùng
WRITE_SECURE_SETTINGSbật lại guard. - Autostart: lúc boot hệ thống bind notification listener, Aerial khởi động theo. TCL có “Auto-start management” chặn app bên thứ ba mặc định, installer dùng
appopsđể mở đường. - ADB keep-alive (tùy chọn): giữ ADB bật để tiện update về sau.
Nghe hơi liều, nhưng cách làm này khá minh bạch và README liệt kê từng quyền ADB cần cấp kèm mục đích cụ thể. Ví dụ quyền location chỉ dùng để đọc tên Wi-Fi, hay SYSTEM_ALERT_WINDOW chỉ để mở Aerial từ background sau boot.
Ai nên thử
Người đang dùng Xiaomi TV hoặc TCL đời mới, thấy launcher gốc phiền và sẵn sàng bỏ 15 phút vọc ADB. Người dùng Sony BRAVIA (đã có xác nhận trên VH1 và VH2) cũng có thể thử, nhưng với Sony thì thường launcher gốc đã đỡ quảng cáo hơn, nên mức hưởng lợi thấp hơn. Ai muốn có screensaver aerial kiểu Apple TV mà không mua Apple TV thì đây là lựa chọn miễn phí, dù chất lượng phụ thuộc mạng (stream 1080p H.264, 15-20 Mbps theo README).
Không phù hợp với người không muốn động vào ADB, hoặc TV dùng firmware quá lạ chưa ai test. Và dĩ nhiên, nếu nhà bạn có người lớn tuổi quen launcher gốc thì đổi xong sẽ phải hướng dẫn lại từ đầu.
Ưu và nhược
Ưu: mã nguồn mở MIT, viết Kotlin, không cần root, không gỡ hay disable app hệ thống nào, một lệnh là restore được. Code có tài liệu kiến trúc (docs/ARCHITECTURE.md), tài liệu bàn giao (docs/HANDOFF.md), ghi chú theo từng máy. Có cả AGENTS.md cho AI agent đọc. Cách xử lý vấn đề firmware rất thực tế, không né tránh.
Nhược và cần lưu ý: repo mới, 942 sao nhưng mới tạo ngày 20/10/2026, chưa có bề dày cộng đồng. Số máy đã verify ít. Bắt buộc có mạng cho screensaver aerial và daily picks. Tên thiết bị HDMI chỉ hiện “Connected” vì cần quyền hệ thống mới đọc được tên thật. Trên TCL, khi chỉnh âm lượng sẽ hiện thêm thanh âm lượng của TCL (đây là điều kiện để âm lượng thực sự có tác dụng, theo README). Trên Xiaomi, nếu đang đứng trong app khác mà idle thì screensaver của Xiaomi vẫn có thể chen vào.
Về license: MIT cho code, font Inter dùng SIL OFL. Video aerial có bản quyền thuộc Apple và được stream trực tiếp từ server Apple, ảnh daily pick thuộc bản quyền tác giả gốc. Đây là điểm cần cân nhắc nếu bạn định fork rồi phân phối lại, dù repo tự nhận là dự án độc lập không liên kết với Apple, Xiaomi, TCL hay Sony.
Một chi tiết tôi thích: file app/src/main/assets/aerials.json được sinh từ resources-16.tar công khai của Apple, chỉ chứa địa chỉ video và tên địa danh, không nhúng video vào app. Cách làm sạch sẽ, không phình APK.
Nếu bạn có TV Xiaomi hoặc TCL đang nằm trong danh sách đã test, đáng bỏ công thử một lần. Lệnh restore cũng chỉ một dòng, nên rủi ro khá thấp. Còn nếu TV thuộc hãng chưa ai verify, đọc docs/devices/ trước đã, rồi hẵng cài. Repo ở đây: pengchujin/aerial-tv.
