Android TV开发简介

0.概述

智能电视近两年可谓发展迅猛,据艾瑞咨询数据显示,2015年国内智能电视终端销售量将达到3556.8万台,预计在2016年用户量突破一亿。不同于手机端群雄割据的局面,Google开发的Android TV系统,凭借其广泛的兼容性,几乎占据了智能电视的全部市场。

简单来看,TV端具有Phone和Pad都不具备的大屏,是移动端的一个大屏扩展。但是,窃以为还不止于此,TV侧的内容,不同于强调私密性的移动侧内容,更加强调多人共享的属性。移动互联网的发展,方便人们生活的同时,也割裂了人与人在现实世界中的交流,我们似乎缺少了一种能在现实生活中互相交流的手段,而用户对TV的使用习惯恰恰可以帮助人们聚在一起。试想一下小时候一家人围坐在电视前吃饭,或者周末酒吧一群狐朋狗友一起看球,这些都是电视才具备的“凝聚力”。而更进一步的Android TV支持种类繁多的输入、输出设备,我们可以做的不仅仅是看电视,这里可深挖、可想象的空间还很大。所以,不少传统的家电厂商,已经将TV端视作未来智能家居、客厅娱乐的核心展示环节,一些主打内容的互联网产品也都抓住风口,相继推出了TV端app。

1.新建一个AndroidTV工程

Android TV工程使用和Android Phone工程相同的文件结构,一样可以使用Android Studio+Gradle的方式进行编辑和构建。(这种相似性意味着你可以轻微修改现有的Phone端app以使其可以在TV端运行。)

当我们需要新建一个TV端工程,或者是修改Phone端的app以使其可以在TV端运行时,需要考虑使用以下组件:

  • Activity for TV (必须的),在你的AndroidMainifest文件中,声明一个在TV端运行的Activity
  • TV Support Libraries(可选的),这个类库为开发人员提供了一些用于TV端的API和UI控件,常用的包括:
    • v17 leanback library 一整套google推荐的TV端界面风格
    • v7 recyclerview library 一个用于管理长列表的具有回收能力的控件
    • v7 cardview library 卡片化风格的UI控件

2.前期准备

在你开始构建你的TV app之前,你需要:

  • 更新你的SDK tools到24.0.0或者更高版本
  • 更新你的SDK到Android 5.0(API 21) 或者更高版本

3.描述一个TV Activity

在AndroidMainifest在声明一个Activity,这与普通的Phone端的Activity的声明并没有什么不同。下面的例子展示了一个基本的AndroidMainifest:

<application
  android:banner="@drawable/banner" >
  ...  <activity
    android:name="com.example.android.MainActivity"
    android:label="@string/app_name" >

    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>

  <activity
    android:name="com.example.android.TvActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.Leanback">

    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    </intent-filter>

  </activity></application>

第二个Activity是一个启动Activity,并且它包含CATEGORY_LEANBACK_LAUNCHER这个intent-filter。(需要注意的一点是,如果你的启动Activity不包含这个属性,在Google Play的TV应用商店是无法上架的。)

4.添加Leanback支持库

Leanback风格现在是Google力推的Android TV端的设计风格,大概也是受够了Phone端千奇百怪的应用风格,希望能在TV端走向统一。Google特意给这个属性增加了一个开关,如果你需要在TV端运行才把这个属性设为true,如下所示:

<manifest>
    <uses-feature android:name="android.software.leanback"
        android:required="true" />
    ...</manifest>

5.输入设备

电视的外接设备相当复杂 ,一个重要的特点是运行在TV端的app不再以“触摸”作为主要的输入手段,可选的输入设备包括遥控器,鼠标,手柄,触摸板以及手机。很难确保你依赖的输入信号是一定存在的,简单的“菜单”键,可能有的遥控器都不支持。而遍历市面上的TV外设后,可能可供选择的操作子集就只剩下“上下左右”和“确定”键了。目前主流的TV应用仍将遥控器作为主要的输入设备,QQ音乐的TV端在开发时也使用遥控器作为主要输入设备,但是也遇到了一些问题:有的遥控器没有“菜单”键导致不能唤起播放列表,大量文本输入非常困难等等。另一种解决方案是将操作逻辑放到手机上,通过WIFI或者红外信号的方式,将操作逻辑投放到TV上,Google推出的chromecast就是一种类似的解决方案。

6.TV的界面风格

根据艾瑞咨询的统计数据,75%的TV在40寸以上,绝大多数用户会选择在两米以外观看电视,这就决定了TV的界面设计风格:卡片化与焦点态。就目前来看,国内、外的TV界面风格并不统一,但基本遵循前面提到的两个基本原则。国外TV端的风格以Google力推的Leanback风格为主:

国内更常见的风格(以小米盒子为例):

7.开发与调试工具的选择

  • Android Studio 目前仍然是Android TV端开发的最好工具。
  • 盒子(带USB接口)+显示器

电视的体积大,做实体机调试并不方便,而小巧的盒子比较适合做调试用,通过USB连接电脑,其调试方法和手机完全相同。

  • Android 平板

针对TV开发的应用,是可以在Phone和Pad上运行的,但是手机屏幕太小,Pad可以更方便的调试

  • 更多的输入、输出设备

电视可以外接的IO设备相当多,最好是能包含尽可能多的外接设备,例如带声音输入的遥控器,带触摸板的遥控器,游戏手柄等等。

8.可能遇到的问题

  • 内存不够

就目前的TV端市场来看,TV设备往往具有较强的图象性能(包含多个GPU芯片),但是CPU和内存能力偏弱,需要尤其注意OOM的问题。

  • 切换到后台,进程没有被杀死

这个要看具体情况,用户的预期是什么,一般TV用户还是习惯单任务操作。

  • 连接有线网络的问题

这个问题在Phone上应该没有,但是TV就会存在有线网络的问题,需要留意。相应的,几乎没人在TV上使用2G/3G网络。

本文分享自微信公众号 - QQ音乐技术团队(gh_287053a877e6),作者:glensun

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​使用Buck构建Android工程

    0.导语 不论是“QQ音乐”亦或是“全民K歌”,其Android客户端目前都是功能繁多、体量庞大、方法数超过10万的庞大应用。庞大体量的工程带来了构建工程的一个...

    QQ音乐技术团队
  • web实时长图实践

    本文将介绍几种浏览器端和服务器端 web 实时生成图片的方案,欲知详情请看文章详情。

    QQ音乐技术团队
  • JsBridge实现JavaScript和Java的互相调用

    前端网页JavaScript(下文简称Js)和Java互相调用在手机应用中越来越常见,JsBridge是最常用的解决方案。 1. Js调用Java,Java调用...

    QQ音乐技术团队
  • 架构爬坑记——从0开始学习分布式锁

    4、子类只需要聚焦自己的小步骤逻辑,实现tryLock,waitLock,unLock方法。

    Java知音
  • PyTorch常见的坑汇总

    最近刚开始用pytorch不久,陆陆续续踩了不少坑,记录一下,个人感觉应该都是一些很容易遇到的一些坑,也在此比较感谢帮我排坑的小伙伴,持续更新,也祝愿自己遇到的...

    Datawhale
  • 架构爬坑记——从0开始学习分布式锁

    1、定义锁的接口Lock 2、在AbstractLock模板锁里面实现getLock方法,实现通用的逻辑。 3、不能确实的步骤,作为虚拟方法,甩锅给子类实现...

    慕容千语
  • 李开复《时代》周刊百大人物峰会演讲:Making A.I. Work for Humans | 中英双语

    他还一直在国际峰会上介绍AI正在给中国——特别是给贫困地区带来的教育、医疗带来的福祉。

    量子位
  • 大数据-数据仓库的概念

    英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环 境,为企业提供决策支持(Decision Suppor...

    cwl_java
  • 【Rust日报】2020-02-15 Roa,异步web框架

    Aleksey Kladov,是一位喜欢简单代码和编程语言的程序员。他写的一篇博客文章,小编这里简单列几个文章中提到的理由:

    MikeLoveRust
  • 小鲜肉崩盘!吴亦凡、鹿晗人气下滑超50%

    这个时间点,跟EXO四子归国日期不谋而合,因此大致可以把EXO四子称为第一届小鲜肉。

    挖数

扫码关注云+社区

领取腾讯云代金券