参考 TV 应用

Android TV 设备需要安装可播放电视直播内容的 TV 应用。Android 平台随附一个参考 TV 应用 (Live TV),该应用可按原样使用,亦可进行自定义、扩展或替换成其他应用。其源代码可在 Android 开放源代码项目中获取。

本文总结了如何基于 Live TV 为您的 Android 电视设备构建和自定义系统 TV 应用。(您可以通过扩展您的 TV 应用来实现特定于设备制造商或国家/地区的功能,但这不属于参考 TV 应用的使用范围。)

依赖关系

TV 应用是电视输入框架 (TIF) 的一个组件,不能独立于其他组件使用。这就意味着只有具有 TIF 的设备才能运行 Live TV 应用。

Live TV 应用依赖于 Android API。不同的分支所依赖的 API 级别也不同:

表 1. Live TV 分支

分支 目标 API 级别 最低 API 级别
master 24 (Android 7.0) 23
android-live-tv 23 (Android 6.0) 21
android-live-tv-l-mr1 22 (Android 5.1) 21

获取源代码

首选,请从 Git 中选择您想要的 Live TV 版本。以下说明面向的是最新版的 Live TV,但您也可以通过将分支从 master 更改为上表中所列的其他分支,来选择一个更早的版本。

$ mkdir live-tv && cd live-tv
$ repo init -u https://android.googlesource.com/platform/manifest -b master
$ repo sync -j8 -c

构建

要构建 Live TV 代码,请运行:

$ . build/envsetup.sh
$ tapas LiveTv x86
$ make LiveTv

推送

要将 Live TV 推送到测试设备,请运行:

$ adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk

如果开发者想让 Live TV 应用拥有系统权限,则在首次安装时,需要通过运行以下命令将该应用推送到 /system/priv-app:

adb push $OUT/system/priv-app/LiveTv/LiveTv.apk  /system/priv-app/LiveTv/

测试

在设备上安装 Live TV 后,您需要测试该应用是否已正确集成。除了对 TV 应用运行兼容性测试套件CTS 验证程序测试外,还可使用以下这些测试:

单元测试

可对 Live TV 应用运行单元测试和功能测试。您必须连接一台设备(或模拟器)才能运行这类测试。

$ adb shell logcat -c
m LiveTv TVTestInput TVUnitTests -j20 &&\
adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
adb install -r -d $OUT/system/app/TVTestInput/TVTestInput.apk && \
adb install -r -d $OUT/data/app/TVUnitTests/TVUnitTests.apk && \
adb shell pm clear com.android.providers.tv && \
adb shell pm clear com.google.android.tv && \
adb shell am instrument \
  -e testSetupMode unit \
  -w com.android.tv.testinput/.instrument.TestSetupInstrumentation &&\
adb shell input keyevent KEYCODE_HOME &&\
adb shell am instrument \
  -w 'com.android.tv.tests/android.support.test.runner.AndroidJUnitRunner'

功能测试

$ adb shell logcat -c
m LiveTv TVTestInput TVFuncTests -j20 &&\
adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
adb install -r -d $OUT/system/app/TVTestInput/TVTestInput.apk && \
adb install -r -d $OUT/data/app/TVFuncTests/TVFuncTests.apk && \
adb shell pm clear com.android.providers.tv && \
adb shell pm clear com.google.android.tv && \
adb shell am instrument \
  -e testSetupMode func \
  -w com.android.tv.testinput/.instrument.TestSetupInstrumentation &&\
adb shell input keyevent KEYCODE_HOME &&\
adb shell am instrument \
  -w 'com.android.tv.tests.ui/android.support.test.runner.AndroidJUnitRunner'

Jank 测试

Jank 测试用于检查是否存在丢帧和渲染延迟。

$ adb shell logcat -c
m LiveTv TVTestInput TVJankTests -j20 &&\
adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
adb install -r -d $OUT/system/app/TVTestInput/TVTestInput.apk &&\
adb install -r -d $OUT/data/app/TVJankTests/TVJankTests.apk &&\
adb shell pm clear com.android.providers.tv &&\
adb shell pm clear com.google.android.tv &&\
echo "Creating a lot of channels and EPG data, this may take a while" &&\
adb shell am instrument \
  -e testSetupMode jank \
  -w com.android.tv.testinput/.instrument.TestSetupInstrumentation &&\
adb shell input keyevent KEYCODE_HOME &&\
adb shell am instrument \
  -w 'com.android.tv.tests.jank/android.support.test.runner.AndroidJUnitRunner'