1、adb简介

adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。

借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。
(1)快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
(2)在设备上运行Shell命令;
(3)管理设备或手机模拟器上的预定端口;
(4)在设备或手机模拟器上复制或粘贴文件。

2、

步骤1:安装USB驱动

这个相关步骤其实笔者已经在Android前系列教程中介绍,故今天简要叙述一下过程。进入设置-应用程序-开发-USB调试,将第一个选项打钩选中。然后通过USB线连接电脑,提示安装驱动。如果是32位的系统选择x86文件夹安装驱动,如果是64位系统选择amd64文件夹。

步骤2:软件准备

https://pan.baidu.com/s/1mgGkNZM

压缩文件解压到如图

3、adb 版本和检测是否连接

4、

上一段是将手机屏幕截图保存在手机里

下一段是将手机里的截图,保存在电脑里

5、模拟按键事件

//这条命令相当于按了设备的Backkey键
adb shell input keyevent 4

//可以解锁屏幕

adb shell input keyevent  82

//在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)

adb shell input swipe 50 250 250 250 500

手机分辨率一般为1080*1920,其中左上角为(0,0),右下角为(1080*1920)

//在屏幕上点击坐标点x=50  y=250的位置。

adb shell input tap 50 250

//输入字符abc

adb shell input text abc

每个数字与keycode对应表如下:
0 -->  "KEYCODE_UNKNOWN"
1 -->  "KEYCODE_MENU"
2 -->  "KEYCODE_SOFT_RIGHT"
3 -->  "KEYCODE_HOME"
4 -->  "KEYCODE_BACK"
5 -->  "KEYCODE_CALL"
6 -->  "KEYCODE_ENDCALL"
7 -->  "KEYCODE_0"
8 -->  "KEYCODE_1"
9 -->  "KEYCODE_2"
10 -->  "KEYCODE_3"
11 -->  "KEYCODE_4"
12 -->  "KEYCODE_5"
13 -->  "KEYCODE_6"
14 -->  "KEYCODE_7"
15 -->  "KEYCODE_8"
16 -->  "KEYCODE_9"
17 -->  "KEYCODE_STAR"
18 -->  "KEYCODE_POUND"
19 -->  "KEYCODE_DPAD_UP"
20 -->  "KEYCODE_DPAD_DOWN"
21 -->  "KEYCODE_DPAD_LEFT"
22 -->  "KEYCODE_DPAD_RIGHT"
23 -->  "KEYCODE_DPAD_CENTER"
24 -->  "KEYCODE_VOLUME_UP"
25 -->  "KEYCODE_VOLUME_DOWN"
26 -->  "KEYCODE_POWER"
27 -->  "KEYCODE_CAMERA"
28 -->  "KEYCODE_CLEAR"
29 -->  "KEYCODE_A"
30 -->  "KEYCODE_B"
31 -->  "KEYCODE_C"
32 -->  "KEYCODE_D"
33 -->  "KEYCODE_E"
34 -->  "KEYCODE_F"
35 -->  "KEYCODE_G"
36 -->  "KEYCODE_H"
37 -->  "KEYCODE_I"
38 -->  "KEYCODE_J"
39 -->  "KEYCODE_K"
40 -->  "KEYCODE_L"
41 -->  "KEYCODE_M"
42 -->  "KEYCODE_N"
43 -->  "KEYCODE_O"
44 -->  "KEYCODE_P"
45 -->  "KEYCODE_Q"
46 -->  "KEYCODE_R"
47 -->  "KEYCODE_S"
48 -->  "KEYCODE_T"
49 -->  "KEYCODE_U"
50 -->  "KEYCODE_V"
51 -->  "KEYCODE_W"
52 -->  "KEYCODE_X"
53 -->  "KEYCODE_Y"
54 -->  "KEYCODE_Z"
55 -->  "KEYCODE_COMMA"
56 -->  "KEYCODE_PERIOD"
57 -->  "KEYCODE_ALT_LEFT"
58 -->  "KEYCODE_ALT_RIGHT"
59 -->  "KEYCODE_SHIFT_LEFT"
60 -->  "KEYCODE_SHIFT_RIGHT"
61 -->  "KEYCODE_TAB"
62 -->  "KEYCODE_SPACE"
63 -->  "KEYCODE_SYM"
64 -->  "KEYCODE_EXPLORER"
65 -->  "KEYCODE_ENVELOPE"
66 -->  "KEYCODE_ENTER"
67 -->  "KEYCODE_DEL"
68 -->  "KEYCODE_GRAVE"
69 -->  "KEYCODE_MINUS"
70 -->  "KEYCODE_EQUALS"
71 -->  "KEYCODE_LEFT_BRACKET"
72 -->  "KEYCODE_RIGHT_BRACKET"
73 -->  "KEYCODE_BACKSLASH"
74 -->  "KEYCODE_SEMICOLON"
75 -->  "KEYCODE_APOSTROPHE"
76 -->  "KEYCODE_SLASH"
77 -->  "KEYCODE_AT"
78 -->  "KEYCODE_NUM"
79 -->  "KEYCODE_HEADSETHOOK"
80 -->  "KEYCODE_FOCUS"
81 -->  "KEYCODE_PLUS"
82 -->  "KEYCODE_MENU"
83 -->  "KEYCODE_NOTIFICATION"
84 -->  "KEYCODE_SEARCH"
85 -->  "TAG_LAST_KEYCODE"

6、adb shell 获得点击屏幕的位置坐标

(1)计算比例

获得event 体系里 宽(0035)和高(0036)

手机屏幕的分辨率是已知的,还以当前我使用的手机为例

手机屏幕分别率是1080p即:1080(宽) * 1920(高)

计算比例:

rateW = 1080(手机屏幕的宽) / 1080(event里0035的max) = 1

rateH = 1920(手机屏幕的高) / 1920(event里0036的max) =1

(2)第二步:点击屏幕计算点击位置的坐标

import random
import os
from PIL import Image
import math def colorDiff(p1, p2):
return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2 + (p1[2] - p2[2])**2) def showPixel(x, y):
for i in range(5):
for j in range(5):
img.putpixel((x - i, y - j), (0, 0, 0)) # 小人的底部颜色标识点
# 标识点选法:打开PS,->选择 ->色彩范围,容差设为0,使用吸管工具找底部连续同色区域
# 使用此法可以找到相对不动点,加固定偏移量可获得底部中心坐标
tokenC = (54, 60, 102)
def isToken(p):
return colorDiff(p, tokenC) <= 1 imgDir = 'C:/Users/ning wang/Desktop/Python/wechat/123.jpg'
imgPath = random.choice(list(os.path.join(imgDir, name) for name in os.listdir(imgDir))) img = Image.open(imgPath) w, h = img.size tokenX, tokenY = 0, 0
tokenXs = [] boardX, boardY = 0, 0
boardWidth = 0
widthCnt = 0 DIFF_THERESHOLD = 10 # 寻找小人
for i in range(h):
if i < h/3:
continue
tokenL, tokenR = 0, 0
# 左边界
for j in range(w):
p = img.getpixel((j, i))
if isToken(p):
# showPixel(j, i)
tokenL = j
tokenY = i
break
# 右边界
if tokenL:
for k in range(w):
j = w - k - 1
if j < tokenL:
break
p = img.getpixel((j, i))
if isToken(p):
# showPixel(j, i)
tokenR = j
break
# 中心点
if tokenR:
tokenXs.append((tokenL + tokenR)/2) # 微调, 定位 token 的底座中心点
tokenX = sum(tokenXs)/len(tokenXs) + 5
tokenY = tokenY - 15 showPixel(int(tokenX), tokenY) # 寻找跳板
lastL, lastR = 0, 0 for i in range(h):
if i < h/3:
continue
boardL, boardR = 0, 0
base = img.getpixel((0, i))
# 左边界
for j in range(w):
# 跳过小人周围像素
if abs(j - tokenX) < 45:
continue
p = img.getpixel((j, i))
diff = colorDiff(p, base)
if diff > DIFF_THERESHOLD:
showPixel(j, i)
boardL = j
break
#右边界
if boardL:
for k in range(w):
j = w - k - 1
# 跳过小人周围像素
if abs(j - tokenX) < 45:
continue
if j < boardL:
break
p = img.getpixel((j, i))
diff = colorDiff(p, base)
if diff > DIFF_THERESHOLD:
showPixel(j, i)
boardR = j
break
if boardR:
if not boardX:
boardX = (boardR + boardL)/2
width = boardR - boardL + 1
if width > boardWidth:
boardWidth = width
widthCnt = 0
else:
boardY = i
# 这里连续寻找多次边界,防止圆形跳台的局部宽度稳定
widthCnt += 1
if widthCnt == 15:
break # 减去多次边界寻找产生的溢出量
boardY = boardY - 15 showPixel(int(boardX), boardY)

  

 

ADB 调试的更多相关文章

  1. [转] Android实时抓包分析 : 善用adb调试桥

    Android实时抓包分析 : 善用adb调试桥   谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...

  2. ADB调试桥安装(方式二)

    想使用ADB工具可以通过安装安卓SDK套件,然后通过SDK里面的adb工具连接手机进行调试, 然而这种方式安装起来多多少少还是有点麻烦,ADB调试桥安装(方式一). 另一种方式来的就更为舒服一些了,即 ...

  3. WIFI无线adb调试android

    有个需求需要支持android插上键盘,鼠标等外设,但是这样就不能使用microusb口进行adb调试了. 研究了一番,发现可以利用wifi进行adb无线调试(adb应该本身已经支持无线调试). WI ...

  4. adb这点小事——远程adb调试

    欢迎转载.转载请注明:http://blog.csdn.net/zhgxhuaa 1.   前言 1.1.  写在前面的话 在之前的一篇文章<360电视助手实现研究>中介绍了在局域网内直接 ...

  5. 如何通过网络连接进行ADB调试

    点击打开链接 大家在使用adb调试Android系统时可能会遇到麻烦,比如usb端口只有一个,如果用作adb调试,就不能通过usb连接其它器件,或者usb端口不能使用时也没法进行adb调试. Andr ...

  6. adb调试

    adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...

  7. android默认开启adb调试方法分析

    用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...

  8. adb调试android设备 说的比较清楚的一篇文章

    ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...

  9. android判断adb调试是否打开及代码跳转到开发者选项界面

    boolean enableAdb = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0) &g ...

  10. Android关闭USB的ADB调试和文件传输功能(禁用USB)【转】

    本文转载自:https://blog.csdn.net/jun4331247/article/details/51201825 通过设置系统属性(System Property)[persist.sy ...

随机推荐

  1. 每个 JavaScript 工程师都应当知道的 10 个面试题

    1. 能说出来两种对于 JavaScript 工程师很重要的编程范式么? JavaScript 是一门多范式(multi-paradigm)的编程语言,它既支持命令式(imperative)/面向过程 ...

  2. Python实战之制作瘟疫传播实验

    2020年爆发新型冠状病毒,让大家在见证中国的团结也让大家感受到疫情传播的骇人 在这里先道一声“武汉加油.中国加油” 那么现在我们尝试制作一个模拟疫情爆发的模型,以数字的形式展现疫情爆发点恐怖. (1 ...

  3. js中的this和arguments.callee

    this和 arguments.callee this 全局作用域下,this指向Window 其他情况下,谁调用this就指向谁 console.log(this) //对调用就指向谁系列 func ...

  4. vue项目npm run dev 报错Uncaught SyntaxError: Unexpected token <

    目前代码所处位置是micro分支,该分支是从dev分支直接拉下来进行npm run dev的,而dev分支是可以正常运行的,网上的诸多解释是babel转义时候报错,其实对比可见,两个分支不同的地方应该 ...

  5. 15 Spring Data JPA概述

    Spring Data JPA 概述 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和 ...

  6. JS数组遍历方法集合

    就让我们在逆战中成长吧,加油武汉,加油自己 1.for循环 使用零时变量将长度存起来,当数组较大时优化效果才会比较明显. var ar1=[2,4,6,8] for(var i=0;i<ar1. ...

  7. kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署

    模板机操作 # cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # uname -a //内核升级到4.4.X以后, 关于如何 ...

  8. 在 centos6 上安装 LAMP

    LAMP 代表的是 Linux, Apache, MySQL, 以及 PHP.   第一步,安装 Apache 使用 yum 安装 sudo yum install httpd 启动 httpd 服务 ...

  9. vue组件通信(props,$emit,$attrs,$listeners)

    朝颜陌   vue基础----组件通信(props,$emit,$attrs,$listeners) 一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. ...

  10. Flask wtforms 表单验证使用

    目录 wtforms 使用1(简单版): 使用2(复杂版): wtforms 安装:pip3 install wtforms 使用1(简单版): from flask import Flask, re ...