欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa

1.   前言

1.1.  行业背景简单介绍

当下,智能家居与智能穿戴设备无疑是继智能手机后两个最热门的方向。而智能家居在占领用户“客厅”的行动中。电视无疑占领着一个十分重要的位置。

近期两年,智能电视(包含盒子),发展的如火如荼,引发了一波电视换机潮。如今购买电视,不是智能电视,甚至都不好意思拿出来说。

然而,国内移动应用市场激战正酣的三巨头(百度、360、腾讯)在电视应用分发上都鲜有举动,市面上仅仅有一些小公司在做,当中做的还算不错的有:奇珀市场、爱家电视应用市场。

直到在今年(2014年)4月360推出了“360电视助手”以及”360电视助手手机端”,电视市场逐渐開始改变。

1.2.  一次糟糕的个人体验

讲一个小故事:一张SD卡引发的血案。

背景:

在去年的时候,我购买了2台创维的Android智能电视和一台大麦盒子。拿到电视以后。我仅仅有一个非常easy的想法:我不想花钱看电视,我要在电视上面看优酷、看爱奇艺、看腾讯视频。

现实情况是。电视厂商为了推广自己的付费视频。在电视机自带的电子市场中,根本没有这些应用。

看到这里有些朋友会说,你找张SD卡把应用拷贝进去,然后依照不即可了?没错。但是。我木有SD卡呀……于是開始了一段崎岖的折腾之路。

我的坎坷看片经历:

1、  打开电视浏览器搜索优酷下载。提示”没有SD卡下载不了”

2、  安装电视市场中的QQ,远程发生优酷到电视,提示”没有SD卡,无法接收”

3、  于是乎在绞尽脑汁之后。在QQ的”很多其它“里面我找到了”应用宝”。这里真要庆幸哥们是做开发的啊。否则预计打死都找不到这里。

此过程全然通过鼠标进行,遥控器操作不了。

4、  在H5的应用宝中搜索”豌豆荚“,安装后。在里面搜索优酷,提示”没有SD卡下载不了”;果断卸载“豌豆荚”。安装“百度手机助手”。提示”没有SD卡下载不了”……到这里哥们已经接近崩溃了。

5、  最后在H5的应用宝中下载应用宝client,发现没有SD卡也能够下载(这里说一下应用宝在没有SD卡时会先下载到/data/文件夹)。于是乎感叹“应用宝真好。”。

6、  带着从绝望中刚恢复过来的喜悦,在应用宝中搜索优酷,下载安装完毕、打开。

尼玛。是横屏的有木有?!原来手机市场里面一般都仅仅有手机和pad的应用,木有TV版本号。不仅屏幕是横的,并且不支持遥控器。

那究竟要怎么办?我仅仅想看个片而已呀,My
God !!。

7、  幸亏哥们练过!我想到了没有SD卡。我可不能够挂载一张虚拟的SD卡到电视上?于是開始了新一轮验证。

8、  在应用宝中,下载“ES文件浏览器”。然后在个人电脑中注冊申请“百度云”账号,在“ES文件浏览器”的设置中与百度云绑定。然后在“ES文件浏览器”中挂载虚拟存储。

9、 在电脑上搜索TV版的优酷、爱奇艺等,将这些APK复制到百度云里面去。然后在电视机上打开“ES文件浏览器”。找到挂载的虚拟存储位置,点击APK安装。最终成功安装了!当看到电视上出现优酷的画面是。哥们都要泪奔了,有木有……

整个过程下来。浪费了哥们大半个下午的时间。

或许有些人会说,怎么不通过电脑USB连接。然后安装。

可是USB须要驱动呀…..并且对小白用户的话,是根本不可能通过USB安装应用的。

1.3.  360电视助手体验

前面说过,我购买了2台电视和一台盒子。在购买盒子的时候,我无意中发现了“360电视助手”,于是乎我在前面的体验一下子简单多了:扫描局域网、建立连接,然后在手机端选择自己喜欢的应用安装。发现盒子就已经给我安装好了。然后在手机上选择一个电影打开播放,此时电视也開始播放了…..

整个过程下来,不超过5分钟。

1.4.  360电视助手概览

首先看一下360电视助手TV端的界面:

以下是TV端首页截图:

以下是手机端的截图:

1.5.  360电视助手的创新点

那这款360电视助手与其它的手机助手或者电视应用市场相比有什么特别之处呢?

一般的电视电视版助手有两大功能:一是帮助用户下载和更新应用。二是做视频、软件、应用分发。360电视助手具有例如以下一些特点:

1、  在同一个局域网环境下。能够通过手机端直接安装TV端到电视上,而不须要复制到SD卡或者U盘上。

2、  在TV端安装后会作为Server与手机端进行局域网通信,手机端能够控制TV端进行应用安装、视频播放、甚至玩游戏等。

3、  TV端集成暂时root能力。在通过手机端操作“安装到电视”时,电视上会静默安装好该应用。

4、  提供遥控器功能。能够通过手机遥控电视。

2.   技术实现分析

本文主要对360电视助手中的两个核心技术点进行分析研究:

A.        怎样通过局域网(Wifi)环境。直接安装应用到电视端。

B.        在电视上安装电视助手(TV端)后。手机端怎样与TV端进行局域网内通信。

2.1.  局域网应用安装

局域网内直接安装apk到TV端是通过我们万能的adb实现的。

关于adb的使用方法这里就不详细介绍了,不熟悉的读者能够自行查阅Android官方文档,或者在cmd环境中运行“adb”命令查看。这里仅仅介绍电视助手的原理。

电视助手的实现原理例如以下:

1.         首先确保电视端中“设置 ->开发人员选项->开启开发人员选项”处于开启状态,这个在非常多电视中默认是开启的。而且在没有开启的电视中,360会引导用户开启。

2.         在手机端通过“ping”命令扫描探測局域网内可用的ip,以下是反编译之后的代码:

关于“ping”命令的使用方法例如以下:

3.         通过“cat /system/build.prop | grep \"product\"”命令获取TV端的产品名称,反编译代码例如以下:

4.         在获得到TV端的名称后。会提示是否要连接到TV端。

此时,通过“adb
connect <host>[:<port>]”命令连接电视,以下是反编译后的代码:

5.         在连接到TV端,通过下“cat/system/build.prop”命令获取TV端的相关信息,以下是反编译后的代码:

6.         在连接到TV端后,就能够通过“adb
install –r ”命令进行局域网内远程安装了,反编译代码例如以下:

在运行“adb install”命令后,依据运行结果中是否包括“Success”推断是否成功安装,再不是“Success”的情况会返回详细的错误原因。能够进行解析。

7.         在运行结束。断开连接时,能够运行“adb disconnect”命令,反编译代码例如以下:

8.         在TV端安装后,手机端能够通过”am
start“命令唤起TV端,反编译代码例如以下:

好了,到这里360电视助手client是怎样在wifi环境下,直接安装到电视端的就都明确了。

2.2.  搭建局域网C/S通信

在电视中安装了TV端以后,TV端会作为一个Server与手机端(Client)形成一个C/S结构,接下来的事情就是Client与Server直接的网络通信了。

这里之所以採用C/S结构进行通信,个人认为原因有两点:

A.        adb connect建立的连接不稳定。随时可能会断开,并且也无法感知连接是否可用等连接状态。

B.        有些操作通过adb是完毕不了的,必须通过C/S的方式,将”指令“发生到Server端(电视),在Server端运行完毕后,再将结果返回到手机。举个简单的样例,比方说我想要获取电视上已安装应用列表等。

360电视助手中,C/S接口。用的是12333port,也就是说TV端会以socket监听12333port。这从手机端反编译的代码也能够看出:

在手机端将命令以http请求的方式发送到TV端。手机端与TV端的数据以jeson的形式进行传输,以下是反编译代码:

好了,到这里360电视助手是怎样局域网下进行通信的,就清楚了。

在360电视助手中。除了上面介绍的局域网通信方式外,也有利用普通无线网络进行push的方式。先将手机端的操作指令发送的360的server,再从serverpush到目标端进行响应。这些不是本文想要分析的重点,不再分析。

adb的那点小事——360电视助手实现研究的更多相关文章

  1. 360手机助手内部资料曝光,63张PPT纯干货

    360手机助手内部资料曝光,63张PPT纯干货 日前,国内最大的安卓应用商店360手机助手发布了<2016年手机软件行业趋势绿皮书>,这份绿皮书对2015年以来移动互联网的趋势做了总结,展 ...

  2. 柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布

    柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布 由于JAVA和Android的平台型,所以APP很容易被反编译,这对于我们开发者来说,是一个不想要 ...

  3. Android静默安装实现方案,仿360手机助手秒装和智能安装功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有非常多朋友都问过我.在Android系统中如何才干实现静默安装 ...

  4. 安卓app上传到应用宝、360手机助手、小米应用商店、百度手机助手/安卓市场/91助手

    1.小米应用商店 小米开放平台网站:https://account.xiaomi.com 注册帐号教程地址:http://dev.xiaomi.com/doc/?p=90 应用提交流程:http:// ...

  5. 发布阶段 github和360移动助手及总结

    经过一系列的冲刺和加工 最激动人心的无非在发布平台上公布上自己辛苦奋斗了一个周期的产品,这个时候的我们就像Iphone 6发布会上得CEO,为自己的产品完美画上了研发的句号. 接下来的日子就是准备ve ...

  6. 360手机助手: App上架(提交资料)注意事项

    提交app资料尤其注意: .keystore和密码?由HBuilder提供公有证书: 签名证书KeyStore证书别名:hbuilder证书密码:123456keystore密码:123456 360 ...

  7. android 浮动窗体学习笔记及个人理解(仿360手机助手)

    很感谢原文作者 http://blog.csdn.net/guolin_blog/article/details/8689140 经自己理解 程序执行界面例如以下图: 1.程序入口界面 2.小浮动窗体 ...

  8. adb这点小事——远程adb调试

    欢迎转载.转载请注明:http://blog.csdn.net/zhgxhuaa 1.   前言 1.1.  写在前面的话 在之前的一篇文章<360电视助手实现研究>中介绍了在局域网内直接 ...

  9. Android手机、电视(盒子) 打开ADB调试 一览表

    手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...

随机推荐

  1. 【Luogu】P1280尼克的任务(DP)

    做顺序DP做惯了,死活没想到这是个倒序DP. f[i]表示时刻i的最大空闲时.有以下两种可能. 1.时刻i没有任务.此时f[i]=f[i+1]+1; 2.时刻i有许多任务.此时f[i]=max(f[i ...

  2. 刷题总结——电影(ssoi)

    题目: 题目背景 SOURCE:NOIP2014-SXYZ T2 题目描述 小美去看电影,发现这个电影票很神奇,有一个编号 (x,y) 表示为第 x 排第 y 位. 小美是个聪明的女孩子,她有自己的一 ...

  3. 素数判定 2(codevs 1702)

    题目描述 Description 一个数,他是素数么? 设他为P满足(P<=263-1) 输入描述 Input Description P 输出描述 Output Description Yes ...

  4. XPath中的轴

    这个博客中有一系列的例子,不仅有child的例子:http://www.cnblogs.com/zhaozhan/archive/2009/09/10/1563723.html XPath 是一门在 ...

  5. Xcode6 pch文件

    XCode6里, 默认是没有pch文件的,如果我们想使用pch文件,需要手动添加,添加步骤如下 1.在XCode6中是么有pch文件的,如下图     2.创建pch文件     3.配置pch文件 ...

  6. 由String作为方法参数,引起的值传递,引用传递,及StringBuffer

    原文引用: http://www.cnblogs.com/zuoxiaolong/p/lang1.html http://www.cnblogs.com/clara/archive/2011/09/1 ...

  7. HDU 5667 Sequence【矩阵快速幂+费马小定理】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意: Lcomyn 是个很厉害的选手,除了喜欢写17kb+的代码题,偶尔还会写数学题.他找到 ...

  8. 洛谷—— P2515 [HAOI2010]软件安装

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...

  9. Loj #6307. 「雅礼国庆 2017 Day1」Clique

    link: https://loj.ac/problem/6307 最大团转补图的独立集,这样的话只有r[x]<l[y]或者r[y]<l[x],x和y才能连边,所以排序之后乱搞就行了. 需 ...

  10. for 循环进化史

    ECMAScript 6已经逐渐普及,经过二十多年的改进,很多功能也有了更成熟的语句,比如 for 循环 这篇博客将介绍一下从最初的 for 循环,到 ES6 的 for-of 等四种遍历方法 先定义 ...