网站网页栅格化,flash网站方案,建设局网站策划书,上海app系统开发1、adb简介 adb的全称为Android Debug Bridge#xff0c;就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序#xff0c;说白了就是debug工具。adb的工作方式比较特殊#xff0c;采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯#xff…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 //在屏幕上点击坐标点x50 y250的位置。 adb shell input tap 50 250 //输入字符abc adb shell input text abc 每个数字与keycode对应表如下0 -- KEYCODE_UNKNOWN1 -- KEYCODE_MENU2 -- KEYCODE_SOFT_RIGHT3 -- KEYCODE_HOME4 -- KEYCODE_BACK5 -- KEYCODE_CALL6 -- KEYCODE_ENDCALL7 -- KEYCODE_08 -- KEYCODE_19 -- KEYCODE_210 -- KEYCODE_311 -- KEYCODE_412 -- KEYCODE_513 -- KEYCODE_614 -- KEYCODE_715 -- KEYCODE_816 -- KEYCODE_917 -- KEYCODE_STAR18 -- KEYCODE_POUND19 -- KEYCODE_DPAD_UP20 -- KEYCODE_DPAD_DOWN21 -- KEYCODE_DPAD_LEFT22 -- KEYCODE_DPAD_RIGHT23 -- KEYCODE_DPAD_CENTER24 -- KEYCODE_VOLUME_UP25 -- KEYCODE_VOLUME_DOWN26 -- KEYCODE_POWER27 -- KEYCODE_CAMERA28 -- KEYCODE_CLEAR29 -- KEYCODE_A30 -- KEYCODE_B31 -- KEYCODE_C32 -- KEYCODE_D33 -- KEYCODE_E34 -- KEYCODE_F35 -- KEYCODE_G36 -- KEYCODE_H37 -- KEYCODE_I38 -- KEYCODE_J39 -- KEYCODE_K40 -- KEYCODE_L41 -- KEYCODE_M42 -- KEYCODE_N43 -- KEYCODE_O44 -- KEYCODE_P45 -- KEYCODE_Q46 -- KEYCODE_R47 -- KEYCODE_S48 -- KEYCODE_T49 -- KEYCODE_U50 -- KEYCODE_V51 -- KEYCODE_W52 -- KEYCODE_X53 -- KEYCODE_Y54 -- KEYCODE_Z55 -- KEYCODE_COMMA56 -- KEYCODE_PERIOD57 -- KEYCODE_ALT_LEFT58 -- KEYCODE_ALT_RIGHT59 -- KEYCODE_SHIFT_LEFT60 -- KEYCODE_SHIFT_RIGHT61 -- KEYCODE_TAB62 -- KEYCODE_SPACE63 -- KEYCODE_SYM64 -- KEYCODE_EXPLORER65 -- KEYCODE_ENVELOPE66 -- KEYCODE_ENTER67 -- KEYCODE_DEL68 -- KEYCODE_GRAVE69 -- KEYCODE_MINUS70 -- KEYCODE_EQUALS71 -- KEYCODE_LEFT_BRACKET72 -- KEYCODE_RIGHT_BRACKET73 -- KEYCODE_BACKSLASH74 -- KEYCODE_SEMICOLON75 -- KEYCODE_APOSTROPHE76 -- KEYCODE_SLASH77 -- KEYCODE_AT78 -- KEYCODE_NUM79 -- KEYCODE_HEADSETHOOK80 -- KEYCODE_FOCUS81 -- KEYCODE_PLUS82 -- KEYCODE_MENU83 -- KEYCODE_NOTIFICATION84 -- KEYCODE_SEARCH85 -- 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 mathdef 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) 1imgDir 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.sizetokenX, tokenY 0, 0
tokenXs []boardX, boardY 0, 0
boardWidth 0
widthCnt 0DIFF_THERESHOLD 10# 寻找小人
for i in range(h):if i h/3:continuetokenL, tokenR 0, 0# 左边界for j in range(w):p img.getpixel((j, i))if isToken(p):
# showPixel(j, i)tokenL jtokenY ibreak# 右边界if tokenL:for k in range(w):j w - k - 1if j tokenL:breakp img.getpixel((j, i))if isToken(p):
# showPixel(j, i)tokenR jbreak# 中心点if tokenR:tokenXs.append((tokenL tokenR)/2)# 微调, 定位 token 的底座中心点
tokenX sum(tokenXs)/len(tokenXs) 5
tokenY tokenY - 15showPixel(int(tokenX), tokenY)# 寻找跳板
lastL, lastR 0, 0for i in range(h):if i h/3:continueboardL, boardR 0, 0base img.getpixel((0, i))# 左边界for j in range(w): # 跳过小人周围像素if abs(j - tokenX) 45:continuep img.getpixel((j, i)) diff colorDiff(p, base)if diff DIFF_THERESHOLD:showPixel(j, i)boardL jbreak#右边界if boardL:for k in range(w):j w - k - 1# 跳过小人周围像素if abs(j - tokenX) 45:continueif j boardL:breakp img.getpixel((j, i)) diff colorDiff(p, base)if diff DIFF_THERESHOLD:showPixel(j, i)boardR jbreakif boardR:if not boardX:boardX (boardR boardL)/2width boardR - boardL 1if width boardWidth:boardWidth widthwidthCnt 0else:boardY i# 这里连续寻找多次边界防止圆形跳台的局部宽度稳定widthCnt 1if widthCnt 15:break# 减去多次边界寻找产生的溢出量
boardY boardY - 15showPixel(int(boardX), boardY)转载于:https://www.cnblogs.com/ruo-li-suo-yi/p/8207311.html