1. Android TV 项目骨架搭建与 Leanback 依赖配置

Android TV 项目骨架搭建与 Leanback 依赖配置 学习卡片

从零搭建可运行的 Android TV 工程

Android TV 应用与手机应用最大的工程差异在于三处:Leanback 支持库、TV 专用主题、横屏启动模式。本节先建立一个最小可运行骨架,把这三项配置一次性落实,再在电视模拟器上验证启动效果。

工程结构与依赖配置

使用 Android Studio 创建 Empty Views Activity 工程后,模块级 build.gradle 需要引入 Leanback 库。Leanback 提供 BrowseFragment、DetailsFragment、PlaybackSupportFragment 等电视专用组件,是后续所有 TV 界面的基础。

// app/build.gradle
android {
    compileSdk 34
    defaultConfig {
        applicationId "com.example.tvapp"
        minSdk 21          // Android TV 最低 API 21
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    implementation "androidx.leanback:leanback:1.0.0"
    implementation "androidx.appcompat:appcompat:1.6.1"
}

Leanback 1.0.0 是稳定版本,兼容 API 21 及以上。若后续需要卡片视图、图片加载等扩展能力,可再追加 leanback-preference 或 glide,但最小骨架只需核心库。

TV 主题与横屏启动模式

电视应用必须使用 Theme.Leanback 系列主题,它默认关闭 ActionBar、放大焦点态、适配 10 英尺观看距离。在 AndroidManifest.xml 中同时声明 Leanback 特性与横屏方向。

<!-- AndroidManifest.xml -->
<uses-feature
    android:name="android.software.leanback"
    android:required="true" />
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />

<application
    android:theme="@style/Theme.Leanback">
    <activity
        android:name=".MainActivity"
        android:screenOrientation="landscape"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
        </intent-filter>
    </activity>
</application>
LEANBACK_LAUNCHER 是电视启动器的入口类别,与手机的 LAUNCHER 不同。若只写 LAUNCHER,应用不会出现在 Android TV 主屏上。touchscreen required=false 表示不强制要求触摸屏,否则电视设备会被过滤掉。

最小可运行界面

骨架阶段先用一个 FrameLayout 承载文本,确认主题与启动模式生效。布局文件 activity_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#101820">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Android TV 骨架已启动"
        android:textColor="#FFFFFF"
        android:textSize="32sp" />
</FrameLayout>

MainActivity 继承 Activity 即可,Leanback 主题已处理窗口装饰:

class MainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

启动验证与判读

在 Android Studio 的 Device Manager 中创建 Android TV (1080p) 模拟器,运行应用后按以下顺序判读:

  • 应用出现在 TV 主屏的“应用”行中,图标可被遥控器选中;
  • 点击后界面以横屏铺满,无 ActionBar、无状态栏遮挡;
  • 中央文本“Android TV 骨架已启动”清晰可见,背景为深色;
  • 按遥控器返回键可退出到主屏,不出现崩溃或黑屏。
若应用未出现在 TV 主屏,优先检查 LEANBACK_LAUNCHER 是否写对、uses-feature leanback required=true 是否声明。若启动后是竖屏或出现 ActionBar,检查 screenOrientation 与主题是否为 Theme.Leanback。
Android TV 最小工程骨架:三项关键配置 ① Gradle 依赖 androidx.leanback :leanback:1.0.0 minSdk 21 提供 BrowseFragment 等 ② Manifest 声明 uses-feature leanback LEANBACK_LAUNCHER screenOrientation=landscape touchscreen required=false ③ TV 主题 Theme.Leanback 无 ActionBar 放大焦点态 适配 10 英尺观看 TV 模拟器启动验证 主屏可见 · 横屏铺满 · 深色背景 中央文本显示 · 返回键正常退出

骨架检查清单

检查项期望值不通过时的排查方向
Leanback 依赖1.0.0 已同步Gradle Sync 是否报错、仓库是否可访问
minSdk≥ 21低于 21 时 Leanback 无法编译
启动类别LEANBACK_LAUNCHER写成 LAUNCHER 则 TV 主屏不显示
屏幕方向landscape未声明时模拟器可能竖屏
主题Theme.Leanback用 AppCompat 主题会出现 ActionBar
触摸屏特性required=falserequired=true 会过滤掉电视设备

完成以上配置后,工程已具备 TV 应用的基本形态。下一阶段即可在此基础上接入焦点导航与 D-pad 按键处理,让界面真正响应遥控器操作。