1. 程式人生 > >android遠端控制(一)---從PC端寫資料到android系統驅動讓android系統

android遠端控制(一)---從PC端寫資料到android系統驅動讓android系統

技術難點1--- 第一步:

從PC端寫資料到android系統驅動讓android系統做出反應

2014年5月25日星期日 鏖戰了大半天,終於邁出了第一步

實現步驟:

1、手機通過資料線連上PC

2、開啟win7的cmd終端

3、在終端開啟android除錯工具 輸入命令adb shell 效果如下:


4、獲取手機(我自己的手機)的驅動檔案的輸出,在終端輸入getevent,然後隨便在手機上操作,會看到終端很多輸出結果,

比如 我在我的手機主頁上按了下微信圖示,輸出結果如下圖所示:

我的手機螢幕截圖如下:

終端輸出的程式碼如下:

/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000047
/dev/input/event4: 0003 0036 000001f5
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f5
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f4
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f4
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0001 014a 00000000
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000

這些指令都同一個格式,device   type  code value,

裝置號,一般是event0~9;type是指響應的事件型別,比如滑鼠鍵盤事件;code是指事件的更細的分類,比如按鈕觸控之類。value就是具體的值了,比如X座標的值,Y座標的值,或者鍵盤按下彈起的值。

這段程式碼的解釋需要先把裡面的十六進位制轉成10進位制,我寫了個小工具,java程式,

可以直接將這種型別的輸出結果中的十六進位制轉成十進位制輸出,關鍵是

轉成十進位制才能更好弄明白每一行的含義,而且從PC端注入程式碼到驅動程式的時候也要用十進位制的,輸出結果如下:

我寫的java轉換工具在每行結果前面都加了指令sendevent ,主要是為了重新注入方便,直接複製就可以了。

 sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 71
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 500
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 500
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0

好了 下面我就解釋下這段程式碼的含義:

sendevent /dev/input/event4 0 0 0--------事件分割,避免和之前的事件衝突    
sendevent /dev/input/event4 1 330 1------1在linux中代表EV_KEY  330即0x14a在linux中代表 BTN_TOUCH  1代表按下
sendevent /dev/input/event4 3 53 89------我手機上的X座標 這個值可以變化 但是不要超出圖示的點選範圍
sendevent /dev/input/event4 3 54 899-----我手機上的Y座標 這個值可以變化 但是不要超出圖示的點選範圍
sendevent /dev/input/event4 0 0 0--------事件分割
sendevent /dev/input/event4 1 330 0------EV_KEY  BTN_TOUCH  0代表彈起
sendevent /dev/input/event4 0 0 0--------事件分割
sendevent /dev/input/event4 0 0 0--------事件分割

sendevent /dev/input/event4 3 48 1 沒有用 刪除不影響
sendevent /dev/input/event4 0 2 0 沒有用 應該也是事件分割 其他人的手機上沒有這一行輸出 刪除不影響

上述含義的發現,對我來講是個很痛苦而且很有意義的過程,具體的發現過程我寫在另一個部落格裡了,有興趣可以看看。

這下基本就瞭解了上述程式碼的含義了,其實精簡一下上述程式碼,如下

sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 71
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0

就這幾行,其他的程式碼是android系統自己加上去的,其實好好讀讀那幾十行程式碼,發現有好幾段是重複的,主要是在重複傳送點選的座標的x,y的值。

然後,再重新開啟一個終端,然後輸入adb shell, 然後把上面經過我的java工具轉換的輸出或者我上面精簡過的輸出,複製到終端裡執行,

手機就會自動進行啟動微信,前提是,手機當前顯示的介面也要在主頁。注意一個問題,上面的這些程式碼是我的手機的輸出,放到其他手機上基本是不能用的,

我的手機是山寨智慧機,但是基本測試沒有問題,如果你要自己測試用,要用自己的手機測試輸出。