Aerial TV
更新于 2026-11-04 06:52:09
Aerial:给国产电视换一块没有广告的 tvOS 桌面
国产电视的开机流程大家都熟:先看十几秒广告,桌面上一半是会员推荐位和限免角标。Aerial 就是冲着这件事做的——一个参照 Apple TV 设计的开源 Android TV 桌面,只有你的 App、壁纸和航拍屏保,装完按主页键就进它,待机被系统清理后还能自己回来。
项目 2026-10-20 建仓,两周就冲到 9.3k star、800 fork、385 个 open issue、75 个 Release,最新 v1.82 发布于 2026-11-03。MIT 许可,Kotlin + Jetpack Compose 全自绘。
它长什么样
- 首页:屏幕下方的玻璃底板上放常用 App,往下是全部 App 网格(5 列 16:9 磁贴)。小米「应用中心」「米家」这类被藏起来的系统 App 也能列出来。
- 整理:长按 OK 键移动、建文件夹、隐藏、卸载,或者设成「开机时打开」(开机、待机醒来直接进这个 App 或信号源)。主屏幕上的 HDMI 可以标成 Apple TV、PlayStation、Switch、Xbox,换成对应图标。
- 用手机整理:扫电视上的二维码,手机上就是同一套图标网格,拖动排序、改名换图、加信号源都行。
- 控制中心:第一排按上键呼出,有信号源、网络、设置、音量、亮度、个性化。
- 屏保:Apple TV 那 114 段航拍影片,电视支持时播 4K 或 4K 杜比视界;也能换成照片、时钟、手机传的本地视频。
- 壁纸:必应每日精选、14 张内置、手机扫码传的图和视频;停在主屏幕 10 秒后航拍会在磁贴后面播。
- 个性化:每排 4/5/6 个、单排或双排、时钟大小与位置、App 名称、焦点样式、按键声;另有儿童与长辈模式、家长密码、天气。
安装:不 root,但要开 ADB
不用 root,不动系统应用,随时能还原。电脑和电视连同一个网络。
- 开电视的 ADB 调试(小米在「关于 → 产品型号」连按;TCL 在「本机信息」按上下左右;海尔进工厂菜单;原生 Android TV 连按内部版本号 7 次)。只有无线调试的 Android 11+ 电视要先
adb pair配对。 - 安装。macOS / Linux 一行命令:
curl -fsSL https://aerial.qust.me/install.sh | KEEP_ADB=1 TV=192.168.1.20 bash
手动的话是这四类操作:
adb connect 192.168.1.20:5555
adb install -r aerial-standard.apk
adb shell pm grant app.orchard.tv android.permission.WRITE_SECURE_SETTINGS
adb shell cmd notification allow_listener app.orchard.tv/app.orchard.tv.guard.RevivalListener
adb shell appops set app.orchard.tv SYSTEM_ALERT_WINDOW allow
KEEP_ADB=1 是给小米用的——待机后系统会关掉 ADB,加上它 Aerial 会帮你重新打开,方便以后升级。
三个包:aerial-standard.apk(Android 5.0+,先装这个)、aerial-guard.apk(电视拒绝安装桌面类 App 时用)、aerial-lite.apk(Android 4.0–4.4 老电视,包名 app.orchard.tv.lite,第一版测试中,没有桌面守护,主页键靠系统默认桌面)。也可以拷进 U 盘用电视的文件管理器装,但只装 APK 不授权的话,它只能当普通 App,主页键接管不了。
还原:... bash -s restore,加 --uninstall 顺便卸载。
技术看点:它到底怎么抢到主页键
这部分是全项目最有意思的地方,docs/ARCHITECTURE.md 写了 12 万字符,细到每帧的预算。
- 两个 flavor,代码完全一样:
standard在 manifest 里声明 HOME,能直接设成默认桌面;guard不声明 HOME,专治 TCL 的LauncherStrategy这种拒绝第三方桌面的固件,只靠无障碍守护接管。 - 桌面守护链路:无障碍服务吞掉 HOME 键 →
TYPE_WINDOW_STATE_CHANGED发现原桌面回到前台就拉回 Aerial → 被小米待机时killAllThirdApp杀掉后,靠通知监听RevivalListener被系统重绑复活 → 守护、通知监听、BootReceiver 都声明directBootAware,解锁前就绑定。整个链路在 ARCHITECTURE 里画成了数据流。 - 各家脏活的兼容层:老小米 Android 6 的桌面不报窗口变化,改看用量统计;酷开、创维不按标准方式启动桌面,守护认它们的包名;插外接鼠标时按键注入会让某些机型的 system_server 崩,按 Build.FINGERPRINT 记住并降级;创维固件音量键抬起不走过滤层,就自己补一格。这类「机型黑名单 + 事后学习」的写法,比任何桌面美化教程都值得读。
- UI 工程:Kotlin + Compose 全自绘,没用 androidx.tv 和 Material;用 960×540 设计画布按屏宽缩放,解决小米 320dpi 与 TCL 240dpi 排版不一致;Apple 式连续圆角在 CPU 上烘焙成位图再交给 GPU(小米 MFTR0 上直接裁路径一帧 GPU 从 11ms 涨到 57ms)。
- 工程约束:minSdk 21 / targetSdk 34 / compileSdk 36,Compose 锁在 1.9.x(1.10 起要 Android 6.0);412 个单元测试;JDK 17 + Android SDK 36,
./gradlew assembleStandardRelease assembleGuardRelease出包。
现实的一面:适配成本全在机型上
README 里有一张很长的机型表,按品牌列「能用 / 有限制 / 接管不了」,每条还带 issue 号和 docs/devices/ 笔记。摘几条感受一下:
- 小米 / Redmi 的 Android 9–14 机型、TCL MT5879、索尼 BRAVIA、海信多数型号:日常可用。
- TCL Q9L Pro 只能 USB 线连 adb,还要在电视管家里允许自启;雷鸟 75S78A Plus 固件约每分钟清一次无障碍;创维 7T641 系列黑屏或被系统结束;坚果 S621 不让写无障碍设置——这些就是接管不了。
- 不支持 LG webOS、三星 Tizen、华为鸿蒙智慧屏,以及 Android 4.0 以前的系统。
作者还配了 tools/report.sh(只读诊断)、tools/selftest.sh(按主页键看能不能回来)和给 Agent 用的 agent.md / adapt.md,可以整段丢给 Claude Code、Codex 之类让它在电脑上自己跑命令装、按验收命令核对 mCurrentFocus 里有没有 app.orchard.tv。
已知限制(作者自己写在 HANDOFF 里的)
- 签名用的是 debug key。想换正式密钥必须先在两台电视上卸载重装,会丢壁纸、照片和图标排序。
- 手机配置页是局域网 HTTP,只靠随机令牌保护。
- 小米只有停在桌面上时才由 Aerial 接管屏保,在别的 App 里空闲还是小米自己的屏保;TCL 调音量会同时弹自己的音量条。
- HDMI 设备名只能显示「已连接」,读真实 CEC 名称需要系统权限。
- 航拍和必应每日精选都要联网,航拍没有本地缓存,4K 杜比视界约 24Mbps,网慢会频繁跳段,要在个性化里改 1080p。
- 开机广告是固件播的,换桌面去不掉。原来的桌面、会员、小爱、账号、有线电视都还在,只是不再当桌面。
适合谁,以及怎么二开
适合觉得自带桌面太脏、又愿意花 20 分钟开 ADB 的小米 / TCL / 索尼用户,以及电视盒子和投影仪玩家。家里有多台不同品牌电视的话,先查机型表再动手,比自己试省时间。
二开友好度意外地高:docs/ARCHITECTURE.md 讲清每个模块为什么这么写,docs/HANDOFF.md 是给接手人(和 AI)的交接说明,连「不要停用小米的 com.mitv.tvhome」「改无障碍列表要保留别人的服务」这种血泪规则都列了。改机型适配看 system/DeviceProfile.kt,改磁贴外观看 apps/TileRecipes.kt,调试有 tools/perf.py 按操作测帧耗时。
一句话:这是目前中文圈做得最细的开源 Android TV 桌面——不只是「没广告」,而是把国产电视各种非标准固件一个个啃下来了,代码和适配记录都远超个人练手项目的水平。