整合后臺服務和驅動代碼注入

整合后臺服務和驅動代碼注入

Home鍵的驅動代碼:
/dev/input/event1: 0001 0066 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0066 00000000
/dev/input/event1: 0000 0000 00000000
?
對應輸入的驅動代碼:
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
?
從主頁點擊QQ圖標啟動QQ的驅動代碼:
/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
對應輸入的驅動代碼:
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
?
輸入的驅動代碼優化:
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
?
在彈出的輸入法上點擊字母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
對應輸入的驅動代碼:
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
?
優化后的驅動輸入代碼:
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
?
點擊發送按鈕
/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
?
對應輸入的驅動代碼:
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
?
優化后的驅動輸入代碼:
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
?
?
所以整套動作如下:
1、按下Home鍵,讓手機界面回到系統主頁
Home鍵對應輸入的驅動代碼:
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、從主頁點擊QQ圖標啟動QQ
驅動代碼
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、在彈出的輸入法上點擊字母n
驅動代碼
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、點擊發送按鈕
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鍵,讓手機界面回到系統主頁
Home鍵對應輸入的驅動代碼:
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

實現的效果如下:就是從我的手機qq給通過我的設備發送一個字母n

這是發送界面


這是接受界面



上面的步驟是怎么獲取指令的動作,下面描述的這個例子是我從手機主頁打開QQ,然后從搜索列表中找出我的某個好友,然后給他發送消息“你好”,然后返回主頁面。

當然,整套系統不能連續做,中間要有停頓,否則有的時候系統還沒有把響應動作做完,下一個動作又開始了,導致動作出錯。可以在代碼里用sleep函數控制等待的時間。整套動作在PC上用終端演示完全沒有問題,下一步就可以在手機上實現了。

具體的在代碼里的實現:

第一步:在我前兩篇博客里的有個關于Android服務的例子,名字叫Servic.zip,在這個例子里加入了一個動作列表的類,用來保存動作指令,就是上面的指令序列。

第二步:將我上一篇博客里用按鈕來注入代碼的響應函數doXue()重新封裝一下,放服務的類里面,我把參數換成了String數組,每次傳一個動作的指令數組過去,然后用sleep控制等待時間。比如,啟動QQ時間會比較長,我就設置成等待5秒再繼續執行下一個動作。

好了,核心代碼如下:

指令類:從這個類的定義里面可以清楚的看到每個步驟了 ,我就不多解釋每個數組里面的指令的功能了,都寫在注釋里了。

[java]?view plaincopy
在CODE上查看代碼片派生到我的代碼片
  1. public?class?OrderList?{??
  2. ????//1---Home鍵對應輸入的驅動代碼??
  3. ????static?String[]?orderHome1?=?{??
  4. ????????"sendevent?/dev/input/event1?0?0?0",??
  5. ????????"sendevent?/dev/input/event1?1?102?1",??
  6. ????????"sendevent?/dev/input/event1?0?0?0",??
  7. ????????"sendevent?/dev/input/event1?1?102?0",??
  8. ????????"sendevent?/dev/input/event1?0?0?0",??
  9. ????????"sendevent?/dev/input/event1?0?0?0"??
  10. ????};??
  11. ??????
  12. ????//2---從主頁點擊QQ圖標啟動QQ的驅動代碼??
  13. ????static?String[]?orderQQ2??=?{??
  14. ????????"sendevent?/dev/input/event4?0?0?0",??
  15. ????????"sendevent?/dev/input/event4?1?330?1",??
  16. ????????"sendevent?/dev/input/event4?3?53?83",??
  17. ????????"sendevent?/dev/input/event4?3?54?916",??
  18. ????????"sendevent?/dev/input/event4?0?0?0",??
  19. ????????"sendevent?/dev/input/event4?1?330?0",??
  20. ????????"sendevent?/dev/input/event4?0?0?0",??
  21. ????????"sendevent?/dev/input/event4?0?0?0"??
  22. ????};??
  23. ??????
  24. ??????
  25. ??
  26. ????//3---在彈出的QQ界面上點擊搜索??
  27. ????static?String[]?orderSearch3??=?{??
  28. ????"sendevent?/dev/input/event4?0?0?0",??
  29. ????"sendevent?/dev/input/event4?1?330?1",??
  30. ????"sendevent?/dev/input/event4?3?53?363",??
  31. ????"sendevent?/dev/input/event4?3?54?194",??
  32. ????"sendevent?/dev/input/event4?0?0?0",??
  33. ????"sendevent?/dev/input/event4?1?330?0",??
  34. ????"sendevent?/dev/input/event4?0?0?0",??
  35. ????"sendevent?/dev/input/event4?0?0?0"??
  36. ????};??
  37. ??????
  38. ??????
  39. ????//4---輸入hyl?選擇何一柳?前提是輸入法是中文輸入模式??
  40. ????static?String[]?orderInput4??=?{??
  41. ????????"sendevent?/dev/input/event4?0?0?0",??
  42. ????????"sendevent?/dev/input/event4?1?330?1",??
  43. ????????"sendevent?/dev/input/event4?3?53?219",??
  44. ????????"sendevent?/dev/input/event4?3?54?1014",??
  45. ????????"sendevent?/dev/input/event4?0?0?0",??
  46. ????????"sendevent?/dev/input/event4?1?330?0",??
  47. ????????"sendevent?/dev/input/event4?0?0?0",??
  48. ????????"sendevent?/dev/input/event4?1?330?1",??
  49. ????????"sendevent?/dev/input/event4?3?53?530",??
  50. ????????"sendevent?/dev/input/event4?3?54?1127",??
  51. ????????"sendevent?/dev/input/event4?0?0?0",??
  52. ????????"sendevent?/dev/input/event4?1?330?0",??
  53. ????????"sendevent?/dev/input/event4?0?0?0",??
  54. ????????"sendevent?/dev/input/event4?1?330?1",??
  55. ????????"sendevent?/dev/input/event4?3?53?367",??
  56. ????????"sendevent?/dev/input/event4?3?54?1003",??
  57. ????????"sendevent?/dev/input/event4?0?0?0",??
  58. ????????"sendevent?/dev/input/event4?1?330?0",??
  59. ????????"sendevent?/dev/input/event4?0?0?0",??
  60. ????????"sendevent?/dev/input/event4?1?330?1",??
  61. ????????"sendevent?/dev/input/event4?3?53?130",??
  62. ????????"sendevent?/dev/input/event4?3?54?768",??
  63. ????????"sendevent?/dev/input/event4?0?0?0",??
  64. ????????"sendevent?/dev/input/event4?1?330?0",??
  65. ????????"sendevent?/dev/input/event4?0?0?0",??
  66. ????????"sendevent?/dev/input/event4?0?0?0"??
  67. ????};??
  68. ??????
  69. ????//5---從搜索結果中選擇何一柳??
  70. ????static?String[]?orderSelect5??=?{??
  71. ????????"sendevent?/dev/input/event4?0?0?0",??
  72. ????"sendevent?/dev/input/event4?1?330?1",??
  73. ????"sendevent?/dev/input/event4?3?53?438",??
  74. ????"sendevent?/dev/input/event4?3?54?223",??
  75. ????"sendevent?/dev/input/event4?0?0?0",??
  76. ????"sendevent?/dev/input/event4?1?330?0",??
  77. ????"sendevent?/dev/input/event4?0?0?0"??
  78. ????};??
  79. ??????
  80. ????//6---點擊輸入框?彈出輸入法??
  81. ????static?String[]?orderGetInput6??=?{??
  82. ????????"sendevent?/dev/input/event4?0?0?0",??
  83. ????"sendevent?/dev/input/event4?1?330?1",??
  84. ????"sendevent?/dev/input/event4?3?53?412",??
  85. ????"sendevent?/dev/input/event4?3?54?1233",??
  86. ????"sendevent?/dev/input/event4?0?0?0",??
  87. ????"sendevent?/dev/input/event4?1?330?0",??
  88. ????"sendevent?/dev/input/event4?0?0?0",??
  89. ????"sendevent?/dev/input/event4?0?0?0"??
  90. ????};??
  91. ??????
  92. ????//7---從輸入法打字?輸入?你好?四個字??
  93. ????static?String[]?orderInputText7??=?{??
  94. ????????"sendevent?/dev/input/event4?0?0?0",??
  95. ????????"sendevent?/dev/input/event4?1?330?1",??
  96. ????????"sendevent?/dev/input/event4?3?53?524",??
  97. ????????"sendevent?/dev/input/event4?3?54?1020",??
  98. ????????"sendevent?/dev/input/event4?0?0?0",??
  99. ????????"sendevent?/dev/input/event4?1?330?0",??
  100. ????????"sendevent?/dev/input/event4?0?0?0",??
  101. ????????"sendevent?/dev/input/event4?1?330?1",??
  102. ????????"sendevent?/dev/input/event4?3?53?222",??
  103. ????????"sendevent?/dev/input/event4?3?54?1006",??
  104. ????????"sendevent?/dev/input/event4?0?0?0",??
  105. ????????"sendevent?/dev/input/event4?3?53?221",??
  106. ????????"sendevent?/dev/input/event4?3?54?1006",??
  107. ????????"sendevent?/dev/input/event4?1?330?0",??
  108. ????????"sendevent?/dev/input/event4?0?0?0",??
  109. ????????"sendevent?/dev/input/event4?1?330?1",??
  110. ????????"sendevent?/dev/input/event4?3?53?209",??
  111. ????????"sendevent?/dev/input/event4?3?54?1009",??
  112. ????????"sendevent?/dev/input/event4?0?0?0",??
  113. ????????"sendevent?/dev/input/event4?1?330?0",??
  114. ????????"sendevent?/dev/input/event4?0?0?0",??
  115. ????????"sendevent?/dev/input/event4?1?330?1",??
  116. ????????"sendevent?/dev/input/event4?3?53?350",??
  117. ????????"sendevent?/dev/input/event4?3?54?903",??
  118. ????????"sendevent?/dev/input/event4?0?0?0",??
  119. ????????"sendevent?/dev/input/event4?1?330?0",??
  120. ????????"sendevent?/dev/input/event4?0?0?0",??
  121. ????????"sendevent?/dev/input/event4?1?330?1",??
  122. ????????"sendevent?/dev/input/event4?3?53?521",??
  123. ????????"sendevent?/dev/input/event4?3?54?992",??
  124. ????????"sendevent?/dev/input/event4?0?0?0",??
  125. ????????"sendevent?/dev/input/event4?1?330?0",??
  126. ????????"sendevent?/dev/input/event4?0?0?0",??
  127. ????????"sendevent?/dev/input/event4?1?330?1",??
  128. ????????"sendevent?/dev/input/event4?3?53?115",??
  129. ????????"sendevent?/dev/input/event4?3?54?762",??
  130. ????????"sendevent?/dev/input/event4?0?0?0",??
  131. ????????"sendevent?/dev/input/event4?1?330?0",??
  132. ????????"sendevent?/dev/input/event4?0?0?0",??
  133. ????????"sendevent?/dev/input/event4?0?0?0"??
  134. ????};??
  135. ??????
  136. ??????
  137. ????//8---點擊發送按鈕代碼??
  138. ????static?String[]?orderInputSend8??=?{??
  139. ????????"sendevent?/dev/input/event4?0?0?0",??
  140. ????"sendevent?/dev/input/event4?1?330?1",??
  141. ????"sendevent?/dev/input/event4?3?53?658",??
  142. ????"sendevent?/dev/input/event4?3?54?639",??
  143. ????"sendevent?/dev/input/event4?0?0?0",??
  144. ????"sendevent?/dev/input/event4?1?330?0",??
  145. ????"sendevent?/dev/input/event4?0?0?0",??
  146. ????"sendevent?/dev/input/event4?0?0?0"??
  147. ????};??
  148. }??

實際執行這些指令的函數doXue(String[] orders)

[java]?view plaincopy
在CODE上查看代碼片派生到我的代碼片
  1. //指令執行函數??
  2. void?doXue(String[]?orders){??
  3. ????Log.i(TAG,?"doXue-----------------");??
  4. ????Runtime?runtime?=?Runtime.getRuntime();??
  5. ????DataOutputStream?dataOut;??
  6. ????try?{??
  7. ??????????Process?process?=?runtime.exec("su?");??
  8. ????????????InputStream?in?=?process.getInputStream();??
  9. ????????????BufferedReader?bufferReader?=?new?BufferedReader(??
  10. ????????????????????????????new?InputStreamReader(in));??
  11. ????????????BufferedReader?err=new?BufferedReader(new?InputStreamReader(process.getErrorStream()));??
  12. ????????????String?line?=?null;??
  13. ????????????dataOut?=?new?DataOutputStream(process.getOutputStream());??
  14. ??????????//點擊發送按鈕??
  15. ????????????for(String?order?:?orders){??
  16. ????????????????dataOut.writeBytes(order?+?";");??
  17. ????????????}??
  18. ????????????dataOut.flush();??
  19. ??????????????
  20. ????????????dataOut.close();??
  21. ????????????process.waitFor();??
  22. ????????????while?((line?=?err.readLine())?!=?null)?{??
  23. ???????????????Log.i(TAG,line);??
  24. ????????}??
  25. ????????????while?((line?=?bufferReader.readLine())?!=?null)?{??
  26. ????????????????Log.i(TAG,line);??
  27. ????????????}??
  28. ????}?catch?(Exception?e)?{??
  29. ????????????e.printStackTrace();??
  30. ????????????Log.i(TAG,e.getMessage());??
  31. ????}finally{??
  32. ????}??
  33. }??

最后是調用這個注入驅動代碼的服務的代碼:

[java]?view plaincopy
在CODE上查看代碼片派生到我的代碼片
  1. @Override??
  2. public?void?onCreate()?{??
  3. ????//?TODO?Auto-generated?method?stub??
  4. ????Log.i(TAG,?"Service-----------------created");??
  5. ????super.onCreate();??
  6. ??????
  7. ????Thread?thread?=?new?Thread()?{??
  8. ????@Override??
  9. ????public?void?run()?{??
  10. ????????????Log.i(TAG,?"Service-----------------");??
  11. ????????????try?{??
  12. ????????????????Log.i(TAG,?"Service-----------------orderHome1");??
  13. ????????????????doXue(OrderList.orderHome1);??
  14. ????????????????Thread.sleep(1000?*?2);??
  15. ????????????????Log.i(TAG,?"Service-----------------orderHome1");??
  16. ????????????????doXue(OrderList.orderHome1);??
  17. ????????????????Thread.sleep(1000?*?2);??
  18. ????????????????Log.i(TAG,?"Service-----------------orderQQ2");??
  19. ????????????????doXue(OrderList.orderQQ2);??
  20. ????????????????Thread.sleep(1000?*?5);?//啟動QQ時間設置稍微長一點??
  21. ????????????????Log.i(TAG,?"Service-----------------orderSearch3");??
  22. ????????????????doXue(OrderList.orderSearch3);??
  23. ????????????????Thread.sleep(1000?*?2);??
  24. ????????????????Log.i(TAG,?"Service-----------------orderInput4");??
  25. ????????????????doXue(OrderList.orderInput4);??
  26. ????????????????Thread.sleep(1000?*?2);??
  27. ????????????????Log.i(TAG,?"Service-----------------orderSelect5");??
  28. ????????????????doXue(OrderList.orderSelect5);??
  29. ????????????????Thread.sleep(1000?*?2);??
  30. ????????????????Log.i(TAG,?"Service-----------------orderGetInput6");??
  31. ????????????????doXue(OrderList.orderGetInput6);??
  32. ????????????????Thread.sleep(1000?*?2);??
  33. ????????????????Log.i(TAG,?"Service-----------------orderInputText7");??
  34. ????????????????doXue(OrderList.orderInputText7);??
  35. ????????????????Thread.sleep(1000?*?2);??
  36. ????????????????Log.i(TAG,?"Service-----------------orderInputSend8");??
  37. ????????????????doXue(OrderList.orderInputSend8);??
  38. ????????????????Thread.sleep(1000?*?2);??
  39. ????????????????doXue(OrderList.orderHome1);??
  40. ????????????}?catch?(InterruptedException?e)?{??
  41. ????????????????//?TODO?Auto-generated?catch?block??
  42. ????????????????e.printStackTrace();??
  43. ????????????}??
  44. ??????????????
  45. ????}??
  46. ????};??
  47. ????thread.start();??
  48. }??

最后就是啟動服務了,這個代碼就不貼了,網上很多,之前的例子里面也有。這個demo的最終效果就是,打開這個app以后,點擊啟動服務,然后程序會自動請求root權限,如果你的手機root過,或者有root權限管理工具的話,就選擇授權,然后,手機會自動回到主頁,然后打開QQ,然后搜索聯系人,然后發消息,最后再次回到主頁。

Demo的下載地址:不要積分。

http://download.csdn.net/detail/diaoliangwang/7402083

演示效果的gif


當然了,再次說明下,這種驅動代碼不同類型不同款的手機是不同的,同款手機如果Rom不同可能也不同,上面的指令僅僅針對我自己的手機,所以如果你用上面的代碼來測試你自己的手機的話,應該不會又效果,隨便舉個例子,我的QQ圖標放在主頁的那個位置,你的QQ不一定也在那個位置,再加上屏幕大小還不一樣。

?因此,后面我會繼續改進,開始時候讓用戶自己在自己的手機上錄制動作,程序獲取手機的相關驅動代碼,然后編制成一套動作就行了。

后面還需要優化的地方:

1、我在前一篇博客里自己寫的驅動代碼16進制轉10進制轉換工具還不夠完善,沒有去處重復的指令,比如系統模擬了同一個點的多次點擊,這個完全可以過濾掉,還有一些沒用的驅動代碼也可以過濾掉。讓輸出的結果更加簡潔,后面有時間我會繼續優化上傳。

2、目前demo的動作還不夠連貫,需要自己編寫代碼,后面需要改成讓程序自動錄制用戶的操作,這就涉及到另一個問題,怎么用服務從android后臺拿到寫入驅動里的程序,而不是從PC端去獲取,讓整個錄制動作,到系統再次響應同一個動作連續在一起。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387963.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java作業09-異常

6. 為如下代碼加上異常處理 byte[] content null; FileInputStream fis new FileInputStream("testfis.txt"); int bytesAvailabe fis.available();//獲得該文件可用的字節數 if(bytesAvailabe>0){content new byte[bytesAvailabe];//創建可容納文件大小的數組…

為數據計算提供強力引擎,阿里云文件存儲HDFS v1.0公測發布

2019獨角獸企業重金招聘Python工程師標準>>> 在2019年3月的北京云棲峰會上,阿里云正式推出全球首個云原生HDFS存儲服務—文件存儲HDFS,為數據分析業務在云上提供可線性擴展的吞吐能力和免運維的快速彈性伸縮能力,降低用戶TCO。阿里…

對食材的敬畏之心極致產品_這些數據科學產品組合將給您帶來敬畏和啟發(2020年中的版本)

對食材的敬畏之心極致產品重點 (Top highlight)為什么選擇投資組合? (Why portfolios?) Data science is a tough field. It combines in equal parts mathematics and statistics, computer science, and black magic. As of mid-2020, it is also a booming fiel…

android模擬用戶輸入

目錄(?)[-] geteventsendeventinput keyevent 本文講的是通過使用代碼,可以控制手機的屏幕和物理按鍵,也就是說不只是在某一個APP里去操作,而是整個手機系統。 getevent/sendevent getevent&sendevent 是Android系統下的一個工具&#x…

真格量化常見報錯信息和Debug方法

1.打印日志 1.1 在代碼中添加運行到特定部分的提示: 如果我們在用戶日志未能看到“調用到OnQuote事件”文字,說明其之前的代碼就出了問題,導致程序無法運行到OnQuote函數里的提示部分。解決方案為仔細檢查該部分之前的代碼是否出現問題。 1.2…

向量積判斷優劣弧_判斷經驗論文優劣的10條誡命

向量積判斷優劣弧There are a host of pathologies associated with the current peer review system that has been the subject of much discussion. One of the most substantive issues is that results reported in leading journals are commonly papers with the most e…

自定義PopView

改代碼是參考一個Demo直接改的&#xff0c;代碼中有一些漏洞&#xff0c;如果發現其他的問題&#xff0c;可以下方直接留言 .h文件 #import <UIKit/UIKit.h> typedef void(^PopoverBlock)(NSInteger index); interface CustomPopView : UIView //property(nonatomic,copy…

線控耳機監聽

當耳機的媒體按鍵被單擊后&#xff0c;Android系統會發出一個廣播&#xff0c;該廣播的攜帶者一個Action名為MEDIA_BUTTON的Intent。監聽該廣播便可以獲取手機的耳機媒體按鍵的單擊事件。 在Android中有個AudioManager類&#xff0c;該類會維護MEDIA_BUTTON廣播的分發&#xf…

當編程語言掌握在企業手中,是生機還是危機?

2019年4月&#xff0c;Java的收費時代來臨了&#xff01; Java是由Sun微系統公司在1995年推出的編程語言&#xff0c;2010年Oracle收購了Sun之后&#xff0c;Java的所有者也就自然變成了Oracle。2019年&#xff0c;Oracle宣布將停止Java 8更新的免費支持&#xff0c;未來Java的…

sql如何處理null值_如何正確處理SQL中的NULL值

sql如何處理null值前言 (Preface) A friend who has recently started learning SQL asked me about NULL values and how to deal with them. If you are new to SQL, this guide should give you insights into a topic that can be confusing to beginners.最近開始學習SQL的…

名言警句分享

“當你想做一件事&#xff0c;卻無能為力的時候&#xff0c;是最痛苦的。”基拉大和轉載于:https://www.cnblogs.com/yuxijun/p/9986489.html

文字創作類App分享-簡書

今天我用Mockplus做了一套簡書App的原型&#xff0c;這是一款文字創作類的App&#xff0c;用戶通過寫文、點贊等互動行為&#xff0c;提高自己在社區的影響力&#xff0c;打造個人品牌。我運用了Mockplus基礎組件、交互組件、移動組件等多個組件庫&#xff0c;簡單拖拽&#xf…

數據可視化 信息可視化_動機可視化

數據可視化 信息可視化John Snow’s map of Cholera cases near London’s Broad Street.約翰斯諾(John Snow)在倫敦寬街附近的霍亂病例地圖。 John Snow, “the father of epidemiology,” is famous for his cholera maps. These maps represent so many of our aspirations …

android 接聽和掛斷實現方式

轉載▼標簽&#xff1a; android 接聽 掛斷 it 分類&#xff1a; android應用技巧 參考&#xff1a;android 來電接聽和掛斷 支持目前所有版本 注意&#xff1a;android2.3版本及以上不支持下面的自動接聽方法。 &#xff08;會拋異常&#xff1a;java.lang.Securi…

Eclipse External Tool Configration Notepad++

Location&#xff1a; C:\Program Files\Notepad\notepad.exe Arguments&#xff1a;  ${resource_loc} 轉載于:https://www.cnblogs.com/rgqancy/p/9987610.html

利用延遲關聯或者子查詢優化超多分頁場景

2019獨角獸企業重金招聘Python工程師標準>>> MySQL并不是跳過offset行&#xff0c;而是取offsetN行&#xff0c;然后返回放棄前offset行&#xff0c;返回N行&#xff0c;那當offset 特別大的時候&#xff0c;效率就非常的低下&#xff0c;要么控制返回的總頁數&…

客戶流失_了解客戶流失

客戶流失Big Data Analytics within a real-life example of digital music service數字音樂服務真實示例中的大數據分析 Customer churn is a key predictor of the long term success or failure of a business. It is the rate at which customers are leaving your busine…

Java 動態加載class 并反射調用方法

反射方法&#xff1a; public static void main(String[] args) throws Exception { File filenew File("D:/classtest");//類路徑(包文件上一層) URL urlfile.toURI().toURL(); ClassLoader loadernew URLClassLoader(new URL[]{url});//創…

Nginx:Nginx limit_req limit_conn限速

簡介 Nginx是一個異步框架的Web服務器&#xff0c;也可以用作反向代理&#xff0c;負載均衡器和HTTP緩存&#xff0c;最常用的便是Web服務器。nginx對于預防一些攻擊也是很有效的&#xff0c;例如CC攻擊&#xff0c;爬蟲&#xff0c;本文將介紹限制這些攻擊的方法&#xff0c;可…

快速數據庫框架_快速學習新的數據科學概念的框架

快速數據庫框架重點 (Top highlight)數據科學 (Data Science) Success in data science and software engineering depends on our ability to continuously learn new models and concepts.數據科學和軟件工程的成功取決于我們不斷學習新模型和概念的能力。 Both domains are…