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. FC及BFC

    1.什么是FC 2.BFC块级格式化上下文(Block formatting context) Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类 ...

  2. 原生js实现replace方法

    今天看到有人提问js的replace方法怎么实现的,自己就试了试js手册里的String对象的介绍replace大概是这样: string.replace(regexp, replacement) 第 ...

  3. SQLyog试用到期的解决方法(仅供个人学习使用,禁止转载或用于商业盈利)

    作者:EzrealYi 本章链接:https://www.cnblogs.com/ezrealyi/p/12434105.html win+r->输入regedit->进入注册表 在计算机 ...

  4. Vue请求第三方接口跨域最终解决办法!2020最终版!

    废话少说,再百度的近三个小时尝试了近10种方法无解后,终于皇天不负有心人! 这个vue axios 跨域问题被我解决了! 需求:请求客户端ip地址获取客户ip,再根据ip获取用户位置 工具:Vue,a ...

  5. 使用ZXingObjC扫描二维码横竖屏对应

    /** 根据屏幕的方向设置扫描的方向 * @author maguang * @param parameter * @return result */ - (void)showaCapture { C ...

  6. 内网渗透之跨边界传输 - LCX转发

    跨边界转发 端口转发 lcx 流程 目标机 ./lcx -slave 跳板机ip 监听的端口 127.0.0.1 要转发的端口 跳板机(公网) ./lcx -listen 监听的端口 转发给攻击机访问 ...

  7. kafka集群搭建及结合springboot使用

    1.场景描述 因kafka以前用的不多,只往topic中写入和读取过数据,这次刚好又要用到,记录下kafka集群搭建及结合springboot使用. 2. 解决方案 2.1 简单介绍 (一)关于kaf ...

  8. js中字符串 stringObject 的 replace() 方法

    一.定义 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的字符串. 二.语法 stringObject.replace(regexp/substr,repl ...

  9. mongo的聚合操作

    对图7-1所示的数据集exampledata1,使用聚合操作实现以下功能: (1)不返回_id字段,只返回age和sex字段. (2)所有age大于28的记录,只返回age和sex. (3)在$mat ...

  10. 原生Canvas循环滚动弹幕(现金红包活动带头像弹幕)

    效果 gif有些糊,可以 在线预览 实现关键点 requestAnimationFrame 循环帧: 绘制单条弹幕,画框子 -> 画头像 -> 写黑色的字 -> 写红色的字, mea ...