整合后台服务和驱动代码注入
整合后臺服務(wù)和驅(qū)動(dòng)代碼注入
Home鍵的驅(qū)動(dòng)代碼:
/dev/input/event1: 0001 0066 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0066 00000000
/dev/input/event1: 0000 0000 00000000
?
對應(yīng)輸入的驅(qū)動(dòng)代碼:
sendevent/dev/input/event1 0 0 0
sendevent/dev/input/event1 1 102 1
sendevent/dev/input/event1 0 0 0
sendevent/dev/input/event1 1 102 0
sendevent/dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0
?
從主頁點(diǎn)擊QQ圖標(biāo)啟動(dòng)QQ的驅(qū)動(dòng)代碼:
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000053
/dev/input/event4: 0003 0036 00000394
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000052
/dev/input/event4: 0003 0036 00000394
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000052
/dev/input/event4: 0003 0036 00000394
/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
對應(yīng)輸入的驅(qū)動(dòng)代碼:
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 83
sendevent/dev/input/event4 3 54 916
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 82
sendevent/dev/input/event4 3 54 916
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 82
sendevent/dev/input/event4 3 54 916
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
?
輸入的驅(qū)動(dòng)代碼優(yōu)化:
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 83
sendevent /dev/input/event4 3 54 916
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
?
在彈出的輸入法上點(diǎn)擊字母n
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/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
對應(yīng)輸入的驅(qū)動(dòng)代碼:
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 517
sendevent/dev/input/event4 3 54 1123
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 517
sendevent/dev/input/event4 3 54 1123
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 517
sendevent/dev/input/event4 3 54 1123
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
?
優(yōu)化后的驅(qū)動(dòng)輸入代碼:
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 1330 1
sendevent /dev/input/event4 353 517
sendevent /dev/input/event4 354 1123
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 1330 0
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 00 0
?
點(diǎn)擊發(fā)送按鈕
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000291
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/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
?
對應(yīng)輸入的驅(qū)動(dòng)代碼:
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 658
sendevent/dev/input/event4 3 54 639
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 657
sendevent/dev/input/event4 3 54 639
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 658
sendevent/dev/input/event4 3 54 639
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 658
sendevent/dev/input/event4 3 54 639
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 0
sendevent /dev/input/event40 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 0 0 0
?
優(yōu)化后的驅(qū)動(dòng)輸入代碼:
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 658
sendevent /dev/input/event4 3 54 639
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
?
?
所以整套動(dòng)作如下:
1、按下Home鍵,讓手機(jī)界面回到系統(tǒng)主頁
Home鍵對應(yīng)輸入的驅(qū)動(dòng)代碼:
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0
?
2、從主頁點(diǎn)擊QQ圖標(biāo)啟動(dòng)QQ
驅(qū)動(dòng)代碼
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 83
sendevent /dev/input/event4 3 54 916
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
?
3、在彈出的輸入法上點(diǎn)擊字母n
驅(qū)動(dòng)代碼
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 517
sendevent /dev/input/event4 3 54 1123
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
?
4、點(diǎn)擊發(fā)送按鈕
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 658
sendevent /dev/input/event4 3 54 639
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
?
5、按下Home鍵,讓手機(jī)界面回到系統(tǒng)主頁
Home鍵對應(yīng)輸入的驅(qū)動(dòng)代碼:
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0
實(shí)現(xiàn)的效果如下:就是從我的手機(jī)qq給通過我的設(shè)備發(fā)送一個(gè)字母n
這是發(fā)送界面
這是接受界面
上面的步驟是怎么獲取指令的動(dòng)作,下面描述的這個(gè)例子是我從手機(jī)主頁打開QQ,然后從搜索列表中找出我的某個(gè)好友,然后給他發(fā)送消息“你好”,然后返回主頁面。
當(dāng)然,整套系統(tǒng)不能連續(xù)做,中間要有停頓,否則有的時(shí)候系統(tǒng)還沒有把響應(yīng)動(dòng)作做完,下一個(gè)動(dòng)作又開始了,導(dǎo)致動(dòng)作出錯(cuò)。可以在代碼里用sleep函數(shù)控制等待的時(shí)間。整套動(dòng)作在PC上用終端演示完全沒有問題,下一步就可以在手機(jī)上實(shí)現(xiàn)了。
具體的在代碼里的實(shí)現(xiàn):
第一步:在我前兩篇博客里的有個(gè)關(guān)于Android服務(wù)的例子,名字叫Servic.zip,在這個(gè)例子里加入了一個(gè)動(dòng)作列表的類,用來保存動(dòng)作指令,就是上面的指令序列。
第二步:將我上一篇博客里用按鈕來注入代碼的響應(yīng)函數(shù)doXue()重新封裝一下,放服務(wù)的類里面,我把參數(shù)換成了String數(shù)組,每次傳一個(gè)動(dòng)作的指令數(shù)組過去,然后用sleep控制等待時(shí)間。比如,啟動(dòng)QQ時(shí)間會(huì)比較長,我就設(shè)置成等待5秒再繼續(xù)執(zhí)行下一個(gè)動(dòng)作。
好了,核心代碼如下:
指令類:從這個(gè)類的定義里面可以清楚的看到每個(gè)步驟了 ,我就不多解釋每個(gè)數(shù)組里面的指令的功能了,都寫在注釋里了。[java]?view plaincopy
實(shí)際執(zhí)行這些指令的函數(shù)doXue(String[] orders)
[java]?view plaincopy最后是調(diào)用這個(gè)注入驅(qū)動(dòng)代碼的服務(wù)的代碼:
[java]?view plaincopy
最后就是啟動(dòng)服務(wù)了,這個(gè)代碼就不貼了,網(wǎng)上很多,之前的例子里面也有。這個(gè)demo的最終效果就是,打開這個(gè)app以后,點(diǎn)擊啟動(dòng)服務(wù),然后程序會(huì)自動(dòng)請求root權(quán)限,如果你的手機(jī)root過,或者有root權(quán)限管理工具的話,就選擇授權(quán),然后,手機(jī)會(huì)自動(dòng)回到主頁,然后打開QQ,然后搜索聯(lián)系人,然后發(fā)消息,最后再次回到主頁。
Demo的下載地址:不要積分。 http://download.csdn.net/detail/diaoliangwang/7402083
演示效果的gif
當(dāng)然了,再次說明下,這種驅(qū)動(dòng)代碼不同類型不同款的手機(jī)是不同的,同款手機(jī)如果Rom不同可能也不同,上面的指令僅僅針對我自己的手機(jī),所以如果你用上面的代碼來測試你自己的手機(jī)的話,應(yīng)該不會(huì)又效果,隨便舉個(gè)例子,我的QQ圖標(biāo)放在主頁的那個(gè)位置,你的QQ不一定也在那個(gè)位置,再加上屏幕大小還不一樣。
?因此,后面我會(huì)繼續(xù)改進(jìn),開始時(shí)候讓用戶自己在自己的手機(jī)上錄制動(dòng)作,程序獲取手機(jī)的相關(guān)驅(qū)動(dòng)代碼,然后編制成一套動(dòng)作就行了。
后面還需要優(yōu)化的地方:
1、我在前一篇博客里自己寫的驅(qū)動(dòng)代碼16進(jìn)制轉(zhuǎn)10進(jìn)制轉(zhuǎn)換工具還不夠完善,沒有去處重復(fù)的指令,比如系統(tǒng)模擬了同一個(gè)點(diǎn)的多次點(diǎn)擊,這個(gè)完全可以過濾掉,還有一些沒用的驅(qū)動(dòng)代碼也可以過濾掉。讓輸出的結(jié)果更加簡潔,后面有時(shí)間我會(huì)繼續(xù)優(yōu)化上傳。
2、目前demo的動(dòng)作還不夠連貫,需要自己編寫代碼,后面需要改成讓程序自動(dòng)錄制用戶的操作,這就涉及到另一個(gè)問題,怎么用服務(wù)從android后臺拿到寫入驅(qū)動(dòng)里的程序,而不是從PC端去獲取,讓整個(gè)錄制動(dòng)作,到系統(tǒng)再次響應(yīng)同一個(gè)動(dòng)作連續(xù)在一起。總結(jié)
以上是生活随笔為你收集整理的整合后台服务和驱动代码注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux查看系统各类信息
- 下一篇: android模拟用户输入