AndroidTV端开发随笔

Android TV端开发从0到1的一点经验

Posted by lx8421bcd on December 6, 2018

写在前面

一个月前接手了公司AndroidTV端3.0版本开发的任务,虽然说是重构,其实跟重写没有什么区别,2.0版本是公司外包出去做的,据说费用不菲,然而不知道外包的那个老哥是不是之前压根没写过AndroidTV端,浏览他的代码简直一塌糊涂,整个技术架构停留在2012年的水平。3.0版本UI基本换了一遍,这意味着我除了播放器核心外没多少能复用的内容。
尽管如此我还是没怎么加班并按时完成了开发工作,我自己也是第一次开发AndroidTV客户端,这样的速度主要得益于手机端已有的代码积累,手机端的代码库部分移植替换了原来外包的工具类库,为后续开发提供了极大便利。
接近一个月的TV端开发和测试反馈走下来,也算是TV端开发经验从零到一的积累了,此处记录一些TV端开发大概的经验,顺便分享,愿后来者少走弯路。

Android TV端的特点

1. 系统老

与手机两年一换不同,家用智能电视一般买来放家里会放相当长的时间,这也就意味着智能电视硬件的迭代速度会比手机慢2倍以上。在当前时间节点(2018),pre 5.0的用户,在手机端目前可能只有不足1%,但是在TV端,是10%以上。
现在你做一个App说不考虑兼容 5.0(API 21)以下的手机,没什么问题,然而如果你做电视端,最好考虑兼容到 4.0.3(API 14)。
这也意味着很多在5.0以上随便实现的UI效果(比如阴影效果)得注意4.4以下系统的兼容。

2. 性能差

以目前Android手机端的性能下限来说,我们开发的应用,一般只有两种情况会存在卡顿:

  1. 应用规模太大,大到像BAT那几个招牌应用一样,随便启动一个页面哪怕再懒加载都会加载非常多的东西
  2. 代码质量差,主线程做的事情太多导致阻塞,内存泄漏频繁GC导致卡顿

但是对于配置本来就低级且已经老旧的TV端来说,就不止如此了,它能让你体验到久违的“跑不动”的感觉,特别是在处理视频流媒体时更是明显。 在这次TV端开发的过程中,我们发现有些吃鸡主播的直播很卡,播着播着就音画不同步,最开始以为是网速问题,查了网络框架查线路,后来我发现,这些吃鸡主播超清的流普遍码率在4Mbps以上,播放高清(2Mbps以下)就不卡。 最后查到是因为更新了播放器SDK,其内部添加了新功能导致性能下降,这一点在手机端完全无法体现,但是在TV端,就是流畅播8M码率和4M+码率解不动的区别……

3. 交互简陋

不同于手机的触摸屏和PC的键鼠,电视设计出来就是以单向信息广播为目的,遥控器的输入效率极其低下。所以在设计应用时,别指望让用户频繁输入内容,如果哪个产品想经常让用户用遥控器打字,那最好赶快把他打醒。 尽管现在智能家居搞了什么手机遥控器语音输入等功能,但整体并没有方便多少。就算更方便,也需要相当长的时间普及。

Android TV App开发的特点

从上面Android 智能电视的特点来看,我们也可以推导出Android TV应用开发的大致方向:
功能简单,输入较少,音视频为主,性能优化要求较高
首先TV的使用场景决定了TV端不可能部署多少业务,没人会坐在沙发上用电视看文本,其次电视端的性能之差也要求App必须精简,斗鱼、虎牙、优酷、爱奇艺这些媒体大厂可以在手机端玩出花,但是TV端都很知趣的只保留了看和简单的搜索功能。发弹幕功能有的直接砍掉,有的只能选推荐好的热词发。

也正是因为上面的原因,我的直观感觉是,TV端开发并不是特别需求专职去做的一件事,在产品初期赶工的时候可能2-4个人就足够快速出成品,产品进入维护迭代期后,1-2人维护足矣,而且以TV端的更新速度来说,并不需要专职维护。

一点开发经验分享

开发和调试

  • 尽量使用真机调试,正如上面所言,不拿台电视试试,就不会知道真正的TV端性能有多低,同样的SDK和业务实现在手机上和在电视上的差异有时可能大的可怕……
  • 如果有选择测试机的权力,一定要去找能够打开ADB调试的机子,目前我测试下来的机型中,小米打开测试模式最方便,乐视的最烂,只能看log。adb无线调试的常用命令:
    # 工作机与电视同处一个网络下,shell / cmd 输入
    # 连接设备
    adb connect 电视机ip
    # 断开连接
    adb disconnect 电视机ip
    # adb 安装 
    adb install -r "apk在你电脑上的路径"
    # adb 卸载
    adb uninstall 应用的packagename
    
  • 开发过程中如果使用无线网络的话优先使用5G wifi,5G上传apk到电视的速度要比2.4G快很多
  • 所有功能都要分别在4.4以下机型和5.0以上机型单独测试,在审核UI设计稿时需要特别注意5.0前后版本的实现差异,及时跟设计提出意见和建议,对于实现差异过大的设计要做调整,别等到设计验收的时候再去被动的改。

分辨率适配

与手机端正好相反,AndroidTV端设备中,高分屏很罕见。从20几寸到60几寸的电视机,ppi都相差不多,电视端的页面布局相较于手机端也要复杂不少,一般是要求在不同屏幕上等比缩放的,使用保证实际尺寸的dp值,反而会导致适配困难。
Android屏幕适配一二三一文中,我曾经提到过一种歪门邪道,即使用宽高限定符生成适配文件然后填入设计标注值。 这种方法在手机端已经被扫入历史垃圾堆,但是在TV端,ppi相差不大的情况下,暂时仍能够适用,不过这并不是长久之计。 对于TV端的屏幕比例适配,使用百分比布局可以解决一定问题,但是不宜全面使用。相信关注技术的同学都应该有了解过今日头条团队提出的适配方案,在需要保持比例的情况下,这种方案是一个比较优秀的选择。

常见效果实现

焦点问题