• ADB 调试


    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)
    

      

     

  • 相关阅读:
    iOS 接入 招商 一网通的 各种坑
    2016证书无效,看这里
    iOS-响应上下左右滑动手势
    在线HTTP POST/GET接口测试工具
    iOS开发中使用宏定义提高开发效率
    iOS宏定义的使用与规范
    Swift
    koa 第一课
    angular directive的使用
    angular的service服务eg:value,constant,factory,service
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/8207311.html
Copyright © 2020-2023  润新知