aerial-tv

Project Url: pengchujin/aerial-tv
Introduction: 给国产电视的一块干净桌面:参照 tvOS 设计的开源 Android TV 桌面,没有广告,开机自动接管。A tvOS-style launcher for Xiaomi, TCL and other China-market TVs.
More: Author   ReportBugs   OfficialWebsite   
Tags:
Aerial 图标

给国产电视的一块干净桌面。

参照 tvOS 设计的 Android TV 桌面:没有广告位,没有推荐流,只有你的 App、你选的壁纸,和 Apple TV 式的航拍屏保。 为小米、TCL 等国内电视而做,开机自动接管,不怕被系统清理。

官网 下载 APK 让 Agent 帮你装 开启 ADB

版本 许可证 MIT Android TV 5.0+

Aerial 首页

电视自带的桌面 换上 Aerial 之后
电视自带的桌面:满屏剧集推荐、会员和限免角标 Aerial 首页

功能

首页

聚焦在 Netflix 上 往下滚动后的应用网格

  • 大号细体时钟:显示在壁纸上,壁纸的底部和左侧会自动压暗,保证文字和 App 都看得清。往下滚动时,时钟淡出,状态栏出现小时钟。
  • 应用网格:每行 5 个。聚焦时磁贴浮起、出现柔光,名字从下方浮现;按到边缘会轻轻倾斜回弹。
  • 焦点样式:默认「高对比度」,选中的 App 外面会加一圈白色描边,离得远也看得清(对应 tvOS「辅助功能 → 增强对比度 → 焦点样式」)。想要和 Apple TV 出厂一样只浮起不描边,可以在「控制中心 → Aerial 设置」或手机扫码页里改成「标准」。
  • 图标处理:有 TV 横幅的直接用横幅;自适应图标拆成前后两层,有视差效果;老式图标放在用它自身模糊做成的毛玻璃底板上。
  • 全部 App 都在:标准的 TV 入口和手机入口都会收录,小米的「应用中心」「高清播放器」「米家」这类没有标准入口的系统 App 也会显示出来。
  • 信号源磁贴:把 HDMI(比如接机顶盒的那一路)、AV、电视天线加到主屏幕,作为第一个磁贴,按一下直接切过去,不用再进信号源菜单。在 控制中心 → 信号源 → 显示在主屏幕 里勾选;长按磁贴可以移动或移除。
  • 返回键:和 tvOS 一样,在网格里按返回会回到第一行,在第一行按返回会立即开始屏保。

长按菜单

长按菜单

长按 OK 键:移动(tvOS 式抖动,其他磁贴自动让位)、从主屏幕隐藏、应用信息、卸载。

控制中心

控制中心

按遥控器的「菜单 ≡」键打开,或在第一行按上键选中右上角。

  • 快捷入口:信号源(HDMI / ATV / DTMB / AV,显示 CEC 设备)、网络、设置。网络和设置会打开电视厂商自己的界面。
  • 调节:音量和亮度滑块,用左右键调节。
  • 其他:壁纸与屏保、隐藏的 App、Aerial 设置(焦点样式)、桌面守护状态。

航拍屏保

航拍屏保:俯瞰优胜美地 时钟屏保

  • 航拍:播放 Apple TV 的 114 段航拍影片,涵盖风景、城市、太空和水下。影片从 Apple 服务器实时播放,镜头移动时会显示中文地名。左右键可以切换上一段 / 下一段,其他按键退出。
  • 照片:每日精选和你的照片缓慢推移,显示拍摄地点。
  • 时钟:大号时钟配合当前壁纸,每分钟换一个位置,防止烧屏。

使用 Android 标准屏保的电视(比如 TCL),Aerial 会成为系统屏保,在任何 App 里空闲都会启动。小米用的是自家的屏保机制,所以 Aerial 在桌面空闲 5 分钟时启动自己的屏保,早于小米的广告屏保。

壁纸与手机设置

壁纸与屏保面板 手机上的设置页

  • 每日精选:必应每日图片(国内直连),保留最近 8 张,也可以选「每日自动更新」。
  • 内置:8 组在电视上实时生成的柔光渐变,不含任何素材文件。
  • 我的照片:用手机扫码上传,传完立刻生效。
  • 用手机设置:扫描面板右侧的二维码,会打开一个 iOS 风格的网页,可以上传照片、挑选壁纸、切换屏保。这个页面只在壁纸面板打开时开放,关闭后再保留 5 分钟;地址里带随机令牌,同一网络里的其他设备猜不到。

安装

全程不需要 root,不卸载、不停用任何系统应用,可以随时一条命令还原。

第一步:打开电视的 ADB 调试

电脑和电视要连在同一个网络里。先在电视上找到 IP 地址(一般在「设置 → 网络」或「关于」里),再打开 ADB:

电视 怎么打开
小米 / Redmi(PatchWall、HyperOS) ① 先打开开发者模式:设置 → 关于 → 产品型号,连续按遥控器确认键,直到提示「您已处于开发者模式」。② 再到 设置 → 账号与安全,打开 ADB 调试,同一页的 安装未知来源的应用 也打开
TCL / 雷鸟 设置 → 关于 → 本机信息,进入后在遥控器上依次按 上、下、左、右(每次间隔不超过 1 秒),页面底部会出现隐藏的「更多」分组,选中 ADB 按确认打开
原生 Android TV / Google TV、海信等 设置 → 设备偏好设置 → 关于 → 连续按 版本号(Build)7 次,打开开发者选项;再到 开发者选项 → USB 调试(有的叫「网络调试」/「ADB 调试」)打开

电脑第一次连接时,电视上会弹出「允许 USB 调试吗?」,选 允许(勾上「始终允许」)。

用 Agent 安装(推荐)

把下面这段复制给 Claude Code、Codex、Cursor 之类能在你电脑上运行命令的 Agent,把 <电视 IP> 换成你的电视 IP:

请帮我把开源电视桌面 Aerial(https://github.com/pengchujin/aerial-tv)安装到我的电视上,并让它成为开机自动启动的桌面。
我的电视 IP 是:<电视 IP>

请按这个顺序做:
1. 读一下仓库 README 的「安装」部分和 docs/devices/ 下的机型笔记。
2. 确认电脑上有 adb、curl、python3(没有 adb 也可以,安装脚本会自动下载 Google 的 platform-tools)。
3. 运行 adb connect <电视 IP>:5555。如果连不上,提醒我按 README 在电视上打开 ADB 调试;如果显示 unauthorized,提醒我在电视上点「允许」。
4. 运行一键安装:
   curl -fsSL https://raw.githubusercontent.com/pengchujin/aerial-tv/main/tools/get.sh | KEEP_ADB=1 TV=<电视 IP> bash
   如果是 TCL,电视右上角会弹出「多屏互动:正在发起应用推送」,提醒我在电视上选「同意」。
5. 装完后用 adb shell dumpsys window | grep mCurrentFocus 确认前台是 app.orchard.tv;征得我同意后,再 adb reboot 一次,确认开机后直接进入 Aerial。
6. 不要卸载或停用任何系统应用,不要删除电视上不是这次安装创建的文件。遇到失败时,把命令输出原样给我看,再参考 docs/devices/ 排查。

一行命令安装(macOS / Linux)

curl -fsSL https://raw.githubusercontent.com/pengchujin/aerial-tv/main/tools/get.sh | KEEP_ADB=1 TV=192.168.1.20 bash

脚本会做这些事:

  1. 下载最新版 APK 并安装。
  2. 授予只有 ADB 能给的权限(用途见下表)。
  3. 预编译 App,让它在电视上更流畅。
  4. 接管桌面和屏保。
  5. 放行开机自启。

KEEP_ADB=1 表示电视每次关掉 ADB 调试后,Aerial 都会立刻重新打开(小米待机唤醒后会关)。不需要可以去掉。

  • 拒绝安装桌面类 App 的固件:在命令最后加 -s guard,改装不声明 HOME 的版本,由桌面守护接管。
  • TCL:TCL 拒绝一切 ADB 安装,脚本会改用 TCL 自带的「多屏互动」把 APK 推给电视,你只需要在电视上选一次「同意」。没有多屏互动时,会退回用当贝市场的「安装包管理」。

还原成原来的桌面:

curl -fsSL https://raw.githubusercontent.com/pengchujin/aerial-tv/main/tools/get.sh | TV=192.168.1.20 bash -s restore

手动安装

到 Releases 下载 aerial-standard.apk(拒绝安装桌面类 App 的固件用 aerial-guard.apk),然后:

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
adb shell am start -n app.orchard.tv/.MainActivity

Aerial 启动后会自己打开桌面守护。完整的步骤(屏保、亮度、TCL 自启动)见 tools/install.sh。

它怎么接管桌面,又怎么不被杀掉

国内电视的固件大多只认自家桌面,还会在待机时清理第三方 App。Aerial 按「先温和、后强硬」的顺序处理:

  1. 先正常申请:申请 HOME 角色、设为默认桌面。原生 Android TV 和 Google TV 到这一步就够了。
  2. 桌面守护:固件仍然坚持用自家桌面时(小米、TCL 都是这样),由一个无障碍服务接管:官方桌面一出现在前台(按了 HOME、退出 App、开机),就把 Aerial 拉回来,按 HOME 时会先闪一下官方桌面(约零点几秒)。这个服务不读取任何屏幕内容,平时也不碰遥控器按键,其他 App 的操作完全不受影响;只有你从 Aerial 的「桌面」磁贴主动进入官方桌面时,它才临时接管 HOME 键,让你按 HOME 能回到 Aerial。
  3. 被杀后复活:小米待机时会强制停止所有第三方 App,守护服务也会随之被关。Aerial 注册了一个通知监听服务(不读取任何通知),系统在 App 被杀后会主动重新绑定它,Aerial 借此在约 0.5 秒内复活,并用 WRITE_SECURE_SETTINGS 把守护服务重新打开。
  4. 开机自启:开机时,通知监听被系统绑定,Aerial 随之启动并接管桌面。TCL 还有一层「自启动管理」,默认禁止第三方 App 开机启动,安装脚本会用 appops 放行(APP_AUTO_START、APP_ASSOC_START)。
  5. ADB 常开(可选):小米唤醒后会关闭 ADB 调试,开启 KEEP_ADB 后 Aerial 会立刻把它打开,方便以后升级。

以上每一条都在小米 MiTV-MFTR0 和 TCL MT5879 上实测过,包括断电重启。

ADB 授予的权限及用途

权限 用途
WRITE_SECURE_SETTINGS 守护服务被系统关闭后重新打开;保持 Aerial 为系统屏保;KEEP_ADB 重新打开 ADB;写入小米的背光值
通知监听 被强制停止或开机后由系统重新拉起,不读取任何通知
悬浮窗(SYSTEM_ALERT_WINDOW) 开机后从后台打开 Aerial 所需的系统豁免
修改系统设置 用标准接口调节亮度(小米和 TCL 之外的电视)
定位 仅用于读取 Wi-Fi 名称
TCL APP_AUTO_START / APP_ASSOC_START 允许开机自启(只有 TCL 固件有这两项)

已验证的电视

机型 系统 状态 笔记
小米 MiTV-MFTR0 Android 14 / HyperOS TV 日常使用中 docs/devices/xiaomi-mitv-mftr0.md
小米 MiTV-MFFU0 Android 14 / HyperOS TV 安装、开机自启已验证 docs/devices/xiaomi-mitv-mffu0.md
索尼 XRJ-77A80J 国行(BRAVIA 4K VH2) Android 10 用户验证:安装、开机自启、待机唤醒、屏保(#16) —
TCL MT5879 国行 Android 11 日常使用中 docs/devices/tcl-mt5879-cn.md
Redmi X65 2026(MiTV-MFTR0) Android 14 / HyperOS TV 用户验证:安装、重启后自动进入 Aerial(#3) 同小米 MiTV-MFTR0
Sony BRAVIA VH1 国行 Android 12 用户验证;亮度改为打开 Sony 的图像设置(#2) —

其他品牌(海信、创维等)按同样的思路应该可以工作,但还没在真机上验证。欢迎提交 Issue 或 PR 补充你的机型。

已知限制

  • 网络:航拍影片和每日精选都需要联网。航拍按 1080p H.264 实时播放,码率约 15–20 Mbps。
  • HDMI 设备名:真实名称(如「Apple TV」)只有系统权限才读得到,所以统一显示为「已连接」。
  • TCL 音量条:TCL 调音量时会同时弹出它自己的音量条,这是让音量真正生效的必要条件。
  • 小米屏保:在小米上,如果停在别的 App 里空闲,仍然会出现小米自己的屏保。
  • 网页安装:浏览器不能直接连接电视的网络 ADB(没有原生 TCP),电视的 USB 口也不能作为设备被电脑连接,所以没有提供「打开网页就能装」的方式。最接近的是上面的 Agent 提示词和一行命令。

开发

需要 JDK 17、Android SDK 36。

./gradlew assembleStandardRelease assembleGuardRelease
BUILD=1 KEEP_ADB=1 TV=<电视 IP> tools/install.sh      # 用本地编译的 APK 安装
  • docs/ARCHITECTURE.md:代码结构与关键数据流
  • docs/HANDOFF.md:现状、调试技巧、必须遵守的规则
  • docs/devices/:各机型的实测笔记,包括 TCL 多屏互动的推送协议
  • AGENTS.md:给 AI 代理的开发说明
  • site/:官网(纯静态,可以直接部署到 Cloudflare Pages)

设计上的几点取舍:

  • 画布:统一按 960×540dp 的画布设计并等比缩放,不同屏幕密度的电视看起来完全一样。
  • 性能:电视 GPU 很弱,每帧最多一次全屏绘制,空闲时不跑任何动画。
  • 动效:焦点动画用弹簧,可以中途打断。
  • 字体:Inter 可变字体(OFL 许可)。

航拍目录 app/src/main/assets/aerials.json 由 Apple 公开的 resources-16.tar 生成,只包含影片地址和地名,不含任何影片。

许可

MIT。Inter 字体使用 SIL Open Font License。

Aerial 是独立的开源项目,与 Apple、小米、TCL 均无关联。航拍影片版权归 Apple 所有,由 Apple 的服务器直接播放;每日精选图片来自必应,版权归原作者所有。

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest