整合后台服务和驱动代码注入

整合后台服务和驱动代码注入

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.mzph.cn/news/387963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为数据计算提供强力引擎,阿里云文件存储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…

自定义PopView

改代码是参考一个Demo直接改的&#xff0c;代码中有一些漏洞&#xff0c;如果发现其他的问题&#xff0c;可以下方直接留言 .h文件 #import <UIKit/UIKit.h> typedef void(^PopoverBlock)(NSInteger index); interface CustomPopView : UIView //property(nonatomic,copy…

当编程语言掌握在企业手中,是生机还是危机?

2019年4月&#xff0c;Java的收费时代来临了&#xff01; Java是由Sun微系统公司在1995年推出的编程语言&#xff0c;2010年Oracle收购了Sun之后&#xff0c;Java的所有者也就自然变成了Oracle。2019年&#xff0c;Oracle宣布将停止Java 8更新的免费支持&#xff0c;未来Java的…

数据可视化 信息可视化_动机可视化

数据可视化 信息可视化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…

利用延迟关联或者子查询优化超多分页场景

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…

Nginx:Nginx limit_req limit_conn限速

简介 Nginx是一个异步框架的Web服务器&#xff0c;也可以用作反向代理&#xff0c;负载均衡器和HTTP缓存&#xff0c;最常用的便是Web服务器。nginx对于预防一些攻击也是很有效的&#xff0c;例如CC攻击&#xff0c;爬虫&#xff0c;本文将介绍限制这些攻击的方法&#xff0c;可…

Linux实战教学笔记12:linux三剑客之sed命令精讲

第十二节 linux三剑客之sed命令精讲 标签&#xff08;空格分隔&#xff09;&#xff1a; Linux实战教学笔记-陈思齐 ---更多资料点我查看 1&#xff0c;前言 我们都知道&#xff0c;在Linux中一切皆文件&#xff0c;比如配置文件&#xff0c;日志文件&#xff0c;启动文件等等。…

activiti 为什么需要采用乐观锁?

乐观锁 为什么需要采用乐观锁&#xff1f; 由于activiti一个周期的transaction时间可能比较长&#xff0c;且同一流程实例中存在任务并发执行等场景。设计者将update、insert、delete事务性的操作推迟至command结束时完成&#xff0c;这样尽量降低锁冲突的概率&#xff0c;由…

支付宝架构

支付宝系统架构图如下&#xff1a; 支付宝架构文档有两个搞支付平台设计的人必须仔细揣摩的要点。 一个是账务处理。在记账方面&#xff0c;涉及到内外两个子系统&#xff0c;外部子系统是单边账&#xff0c;满足线上性能需求&#xff1b;内部子系统走复式记账&#xff0c;满足…

Android Studio 导入新工程项目

1 导入之前先修改工程下相关文件 1.1 只需修改如下三个地方1.2 修改build.gradle文件 1.3 修改gradle/wrapper/gradle-wrapper.properties 1.4 修改app/build.gradle 2 导入修改后的工程 2.1 选择File|New|Import Project 2.2 选择修改后的工程 如果工程没有变成AS符号&#xf…

马蜂窝张矗:绩效考核是为了激发工作潜力,而不是逃避问题

3 月 23 日&#xff0c;由高端技术领导者社交平台 TGO 鲲鹏会主办的 GTLC 全球技术领导峰会分站首站在北京举行。会上马蜂窝技术副总裁 \u0026amp; TGO 鲲鹏会会员张矗发表了主题为“我在马蜂窝的技术管理实践”的演讲。本文根据其演讲整理而成。大家好&#xff0c;我是来自马蜂…

fiddler抓包1-抓小程序https包

抓小程序包和抓app包是一样的操作方法&#xff1b;安卓用fiddler&#xff0c;ios用charles&#xff1b; 一、环境准备 1.电脑已装最新版fiddler 2.手机和电脑在同一局域网 二、fiddler设置 1.fiddler>Tools>Options>HTTPS 勾选Capture HTTPS CONNECTs 及下边的子项&am…

冲刺第七天

今天任务进行情况&#xff1a;今天我们将我们的游戏导到界面形成可用的应用程序&#xff0c;并且进行调试与运行&#xff0c;让同学试玩&#xff0c;发现了困难并加以改正。 遇到的困难及解决方法&#xff1a; 运行时发现游戏界面中UI的button和image的位置会随分辨率的不同而发…

Node.js Streams:你需要知道的一切

Node.js Streams&#xff1a;你需要知道的一切 图像来源 Node.js流以难以使用而闻名&#xff0c;甚至更难理解。好吧&#xff0c;我有个好消息 - 不再是这样了。 多年来&#xff0c;开发人员在那里创建了许多软件包&#xff0c;其唯一目的是简化流程。但在本文中&#xff0c;我…

shell之引号嵌套引号大全

万恶的引号 这个能看懂你就出师了! 转载于:https://www.cnblogs.com/theodoric008/p/10000480.html