Android中探究抖音短視訊的動態桌布功能以及擴充功能使用

編碼美麗發表於2018-06-11
一、前言

最近玩抖音感覺都快廢了,所以我決定不玩了我要學習所以先從他的動態桌布學起,因為整個應用中也就是動態桌布有點好玩的技術,而且也就是抖音能做這個功能,其他的短視訊或許做不了比如快手如果要做你覺得有幾個人會把老鐵雙擊666這樣的視訊作為桌布,而抖音中的小姐姐作為桌布的可能性會很大。其實動態桌布在Android中早就用到了,之前說的很神奇的透明螢幕其實可以用動態桌布來做:

640?wx_fmt=png


二、使用方法

但是先不說這個,先把抖音的動態桌布功能說一下吧,在Android中開發動態桌布其實很簡單,只需要兩步就可以了:

第一步:定義一個動態桌布服務

640?wx_fmt=png

繼承系統桌布服務類,然後在回撥方法中建立一個引擎返回即可。關於引擎後面會說。


第二步:在XML中宣告服務

640?wx_fmt=png

這裡需要宣告許可權以及定義桌布的額外附屬資訊,比如桌布的預覽圖片等。


然後我們需要啟動系統設定桌布的頁面:

640?wx_fmt=png

這樣我們就完成了所以設定操作了,所以接下來就需要在上面的那個引擎中進行操作了,我們還是回到抖音中檢視他是如何做到的,這樣的跟蹤就簡單了,直接去他的xml中搜尋那個許可權:

640?wx_fmt=png

找到這個類之後,直接去Jadx中去搜尋:

640?wx_fmt=png

找到建立的回撥方法中,然後點進去進行檢視:

640?wx_fmt=png


三、方法說明

看到這裡就明白了,他是會把當前視訊下載下來,然後結合MediaPlayer來進行操作的,而播放載體的SurfaceHolder就來自於引擎回撥方法,接下來詳細看看引擎有哪些重要的方法:

640?wx_fmt=png

第一個方法:getSurfaceHolder

獲取當前動態桌布需要展示的SurfaceHolder,這個型別相信大家弄過視訊都對這個不陌生了,如果有了SurfaceHolder作為渲染載體我們可以自己手動畫畫,用攝像頭,播放視訊等操作了。所以這個方法是多麼至關重要。


第二個方法:onSurfaceCreated

渲染建立的時候也就是桌布啟動的時機,所以一般初始化操作都會在這裡做,比如上面的抖音設定視訊準備工作就在這裡做的。這個方法是個回撥方法,可以獲取到SurfaceHolder變數。


第三個方法:onTouchEvent

這個方法其實不陌生了,就是觸控事件,我們如果在對手指觸控螢幕的時候需要做一些事情的時候可能需要在這裡記錄觸控的座標資訊進行後面操作。


第四個方法:onOffsetsChanged

這個方法是在桌布滑動的時候位置變化回撥,這個對於做動態桌布特效用的會比較多,現在市面上不是有很多酷炫的3D桌布效果,其實這個方法必不可少。


第五個方法:onVisibilityChanged

這個方法非常重要,他表示當前桌布是否可見,比如在桌面上點選應用圖示進入應用的時候這時候桌布就不可見了,我們可以暫停一些事情,當我們按返回鍵或者home鍵回到桌面的時候桌布又可見了,這時候我們在繼續做一些事情。


第六個方法:onSurfaceDestroyed

這個方法和之前的建立方法對應就是銷燬的時候我們需要釋放資源操作。


四、案例操作

第一、實現視訊動態桌布

主要就是這幾個方法非常關鍵,下面我們就用三個場景來看看動態桌布的玩法,首先第一個把抖音的視訊做成動態桌布功能實現了,其實很簡單,這裡就模擬本地一個視訊,直接用MediaPlayer類進行操作,把視訊展示在引擎的SurfaceHolder上即可:

640?wx_fmt=png

因為有了桌布的SurfaceHolder,結合MediaPlayer就可以直接操作了。沒有任何難度,我們可以在桌布可見和不可見的時候暫停播放視訊。看看效果圖:

640?wx_fmt=gif


第二、自定義繪畫動態桌布

因為了有了SurfaceHolder,我們可以獲取到畫布,然後隨便在上面塗鴉操作,這裡結合觸控點事件進行操作

640?wx_fmt=png

每次觸控桌布就在畫布上畫一個圓圈,當然有了畫布和畫筆你想怎麼塗都可以。看看效果圖:

640?wx_fmt=gif


第三、用攝像頭拍攝製作動態桌布

因為之前開發過攝像頭的知道,攝像頭採集到的資料也是需要展示出來的,那麼這裡也是展示到一個SurfaceHolder即可:

640?wx_fmt=png

這樣我們就可以做了之前說的透明桌布功能了,也可以對攝像頭的每一幀資料進行處理比如美顏等看到不同的效果。看看效果圖:

640?wx_fmt=gif


第四、結合OpenGL做酷炫桌面

這個這裡不在弄了,因為大家懂得OpenGL還是很麻煩的,但是都需要藉助SurfaceHolder的,我們看一下市面上的一個3D效果桌面動態桌布:

640?wx_fmt=gif


五、技術延伸

好了到這裡我們就說完了Android中動態桌布的幾種玩法了,其實很簡單,實現系統服務返回自己的引擎,在引擎回撥中難道當前桌布的SurfaceHolder,有了這玩意就可以做很多事了,當然這裡最好了解一下Android中的視訊開發,之前其實已經開設了一個專欄詳細介紹了視訊開發知識,可以去我的網站搜尋,一張神圖總結如下:

640?wx_fmt=png

如果看懂這樣圖其實還有很多東西可以做,具體的就留給感興趣的同學去做吧。


最後在來說一下為啥系統設定桌布還需要許可權呀?其實這裡有一個問題如果沒有許可權那麼使用者的桌面就會被濫用,比如惡意者可以製作一個視訊或者繪畫一些資訊比如這裡暫時廣告資訊,然後在後臺偷偷的設定了桌布,這樣使用者的桌面就變成了廣告了,這樣使用者也會瘋掉的。所以許可權肯定要有的。但是Android始終是Android,安全性的確和iOS沒法比,我們通過抖音就可以看到Android版本下載之後直接就跳轉到設定桌布頁面了,這樣使用者體驗的確很好但是安全性其實不怎麼好,而iOS下載完之後會提示你自己去系統設定頁面進行設定桌布操作:

640?wx_fmt=png

這個細微的差距可以看到Android系統給出什麼開發許可權,iOS給出什麼樣的開發許可權,個人看來偏向於iOS越安全越好。


嚴重說明

本文的目的只有一個就是學習逆向分析技巧,如果有人利用本文技術進行非法操作帶來的後果都是操作者自己承擔,和本文以及本文作者沒有任何關係,本文涉及到的程式碼專案可以去編碼美麗小密圈自取,長按下方二維碼加入小密圈一起學習探討技術

640?wx_fmt=png


六、總結

我們在玩遊戲或者應用的時候有時候不要只是一味的尋求歡樂,而不去思考別人家的技術怎麼實現的,因為我們是世界上獨一無二的程式猿所以玩應用的時候有什麼好的技術和特效一定要有敏感性,最好是自己動手實踐這樣才能學習到更多,走的更遠。最後祝願抖音越來越好,微信越來越呵呵!


手機檢視文章不方便,可以網頁看

http://www.520monkey.com


《Android應用安全防護和逆向分析》 

 點選檢視圖書詳情

640?wx_fmt=jpeg

長按下面

相關文章