adb的那點小事——360電視助手實現研究

歡迎轉載,轉載請註明:http://blog.csdn.net/zhgxhuaa

1.   前言

1.1.  行業背景簡介

當下,智能家居與智能穿戴設備無疑是繼智能手機後兩個最熱門的方向,而智能家居在佔領用戶客廳的行動中,電視無疑佔據着一個十分重要的位置。最近兩年,智能電視(包括盒子),發展的如火如荼,引發了一波電視換機潮。現在購買電視,不是智能電視,甚至都不好意思拿出來說。

然而,國內移動應用市場激戰正酣的三巨頭(百度、360、騰訊)在電視應用分發上都鮮有舉動,市面上只有一些小公司在做,其中做的還算不錯的有:奇珀市場、愛家電視應用市場。

直到在今年(2014年)4360推出了“360電視助手以及”360電視助手手機端,電視市場逐漸開始改變。

1.2.  一次糟糕的個人體驗

講一個小故事:一張SD卡引發的血案

背景:

在去年的時候,我購買了2臺創維的Android智能電視和一臺大麥盒子。拿到電視以後,我只有一個很簡單的想法:我不想花錢看電視,我要在電視上面看優酷、看愛奇藝、看騰訊視頻。現實情況是,電視廠商爲了推廣自己的付費視頻,在電視機自帶的電子市場中,根本沒有這些應用。

看到這裏有些朋友會說,你找張SD卡把應用拷貝進去,然後按照不就行了?沒錯!可是,我木有SD卡呀……於是開始了一段崎嶇的折騰之路。

我的坎坷看片經歷:

1、  打開電視瀏覽器搜索優酷下載,提示沒有SD卡下載不了

2、  安裝電視市場中的QQ,遠程發生優酷到電視,提示沒有SD卡,無法接收

3、  於是乎在絞盡腦汁之後,在QQ更多裏面我找到了應用寶,這裏真要慶幸哥們是開發的啊,否則估計打死都找不到這裏。此過程完全通過鼠標進行,遙控器操作不了

4、  H5的應用寶中搜索豌豆莢,安裝後,在裏面搜索優酷,提示沒有SD卡下載不了;果斷卸載豌豆莢,安裝百度手機助手,提示沒有SD卡下載不了”……到這裏哥們已經接近崩潰了。

5、  最後在H5的應用寶中下載應用寶客戶端,發現沒有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.  局域網應用安裝

局域網內直接安裝apkTV端是通過我們萬能的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電視助手客戶端是如何在wifi環境下,直接安裝到電視端的就都明白了。

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

在電視中安裝了TV端以後,TV端會作爲一個Server與手機端(Client)形成一個C/S結構,接下來的事情就是ClientServer直接的網絡通信了。

這裏之所以採用C/S結構進行通信,個人覺得原因有兩點:

A.        adb connect建立的連接不穩定,隨時可能會斷開,而且也無法感知連接是否可用等連接狀態。

B.        有些操作通過adb是完成不了的,必須通過C/S的方式,將指令發生到Server端(電視),在Server端執行完成後,再將結果返回到手機。舉個簡單的例子,比如說我想要獲取電視上已安裝應用列表等。

360電視助手中,C/S接口,用的是12333端口,也就是說TV端會以socket監聽12333端口。這從手機端反編譯的代碼也可以看出:

 

在手機端將命令以http請求的方式發送到TV端。手機端與TV端的數據以jeson的形式進行傳輸,下面是反編譯代碼:

 

好了,到這裏360電視助手是如何局域網下進行通信的,就清楚了。

360電視助手中,除了上面介紹的局域網通信方式外,也有利用普通無線網絡進行push的方式。先將手機端的操作指令發送的360的服務器,再從服務器push到目標端進行響應。這些不是本文想要分析的重點,不再分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章