Skip to content

Repository files navigation

TVLauncherHelper

让被深度定制系统限制的 Android 电视盒子也能用上第三方桌面。

背景

许多国产电视盒子(如阿里云 YunOS、乐视等)通过 Intent Firewall (IFW)、白名单 secure launcher_list 等机制,阻止用户设置第三方桌面为默认桌面,强行捆绑系统桌面广告。

本项目不试图替换系统桌面(这在很多盒子上会导致黑屏),而是通过开机自启动 + 无障碍服务 HOME 键拦截的方式,让第三方桌面在体验上接近默认桌面。

功能

  • 开机自动拉起:开机后按自定义延时自动启动第三方桌面
  • 待机唤醒自动拉起:盒子待机后唤醒,自动再次启动第三方桌面
  • HOME 键拦截:按 HOME 键后自动拉回第三方桌面(需开启无障碍服务)
  • 智能区分:从第三方桌面主动跳转到系统桌面时不会拦截,仅在按 HOME 键时拉回
  • 可配置延时:开机延时和唤醒延时均可自定义
  • 失败重试:如果被系统桌面抢回,会自动重试

构建

不依赖 Gradle,使用 Android SDK 纯命令行工具链构建。

前置条件:

  • JDK 8+
  • Android SDK(需设置 ANDROID_SDK_ROOT 环境变量,默认为 ~/Library/Android/sdk
  • 默认使用 build-tools 37.0.0 和 android-34 平台
# 如需指定 SDK 版本
export BUILD_TOOLS_VERSION=37.0.0
export PLATFORM_VERSION=android-34

bash build.sh

产物:build/dangbei-helper.apk

安装与使用

安装

adb install -r build/dangbei-helper.apk

启用无障碍服务(HOME 键拦截必须)

Android 系统在应用更新/重装时会自动清空无障碍服务绑定,需要手动启用:

adb shell settings put secure enabled_accessibility_services com.localtv.dangbeiautostart/com.localtv.dangbeiautostart.HomeMonitorAccessibilityService
adb shell settings put secure accessibility_enabled 1

验证:

adb shell settings get secure enabled_accessibility_services
adb shell settings get secure accessibility_enabled

关闭无障碍服务

adb shell settings put secure enabled_accessibility_services ""
adb shell settings put secure accessibility_enabled 0

工作原理

┌─────────────────────────────────────────────────────┐
│  BOOT_COMPLETED / SCREEN_ON / USER_PRESENT 广播      │
└─────────────────┬───────────────────────────────────┘
                  ▼
         ┌───────────────┐
         │  BootReceiver  │
         └───────┬───────┘
                 ▼
         ┌───────────────┐
         │  AlarmManager  │  (延时调度)
         └───────┬───────┘
                 ▼
         ┌──────────────────┐
         │ LaunchProxyActivity │  (透明中转页)
         └──────┬─────────────┘
                ▼
         ┌──────────────┐
         │  当贝桌面 /    │
         │  第三方桌面    │
         └──────────────┘

HOME 键拦截:
  AccessibilityService 监听 TYPE_WINDOW_STATE_CHANGED
  → 检测到系统桌面回到前台
  → 如果上一个前台应用不是第三方桌面(非主动跳转)
  → 自动拉回第三方桌面

组件说明

组件 文件 用途
主界面 MainActivity.java 配置延时、开关、状态显示
开机广播 BootReceiver.java 接收 BOOT_COMPLETED / SCREEN_ON 等广播
调度核心 LaunchHelper.java 延时启动、重试、配置存储
中转页 LaunchProxyActivity.java 被 AlarmManager 拉起,在前台启动第三方桌面
无障碍服务 HomeMonitorAccessibilityService.java 监听 HOME 键,自动拉回第三方桌面

适配其他第三方桌面

修改 LaunchHelper.java 中的常量即可:

static final String DANGBEI_PACKAGE = "com.dangbei.tvlauncher";
static final String DANGBEI_ACTIVITY = "com.dangbei.launcher.ui.main.MainActivity";

同时修改 HomeMonitorAccessibilityService.java 中的 DANGBEI_PACKAGE 常量。

已知限制

  1. 部分盒子的系统桌面不可禁用,禁用会导致黑屏
  2. 某些设备为 production build,不支持 adb root,无法直接修改 IFW 策略
  3. 每次重装 APK 后,无障碍服务需要重新通过 ADB 启用
  4. 不是真正的默认桌面替换,按 HOME 键可能先闪现系统桌面再跳转

许可证

MIT License - 详见 LICENSE

About

让被深度定制系统限制的 Android 电视盒子也能用上第三方桌面

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages