zoukankan      html  css  js  c++  java
  • 常用的adb

    ADB练习过程可以看:

    https://copyfuture.com/blogs-details/20201129201524578sc97jhn83nr8ypp

    在平时的工作中,会经常用到adb命令,在这里稍微整理了一下。

    一.概要

    1.什么是adb

    adb全称为Android Debug Bridge,就是起到调试桥的作用。顾名思义,adb就是一个debug工具。

    2.adb工作原理

    不是很理解?那就来看看它的工作原理吧。

    adb

    上图是一个简单的adb工作原理图。adb客户端服务器端程序,由上图可以看出它主要三个组件组成:Client,Server,Daemon。

    (1)当你启动一个adb Client(客户端),Client首先会选确认是否已有一个adb Server(服务器)进程在运行,如果没有,则会启动Server进程。此时,adb Server就会绑定本地的TCP端口5037,并监听adb Client发来的命令。

    (2)接着,Server将会扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备,并与之建立连接。一旦Server找到 了adb daemon(守护程序),它将建立一个到该端口的连接,这样,我们就可以使用adb命令控制和访问模拟器或设备了。在这里,需注意的是任何模拟器或设备实例会取得两个连续的端口:

    一个偶数端口用来响应控制台的连接,和一个奇数端口用来响应adb连接。

    3.adb的作用

    借助adb工具,我们可以管理设备或手机模拟器的状态,还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。简而言之,adb就是连接Android手机和PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。

    adb 服务启动后,Windows 可以在任务管理器中找到 adb.exe 这个进程

    运行在 Android 设备上的 adb 后台进程

    执行 adb shell ps | grep adbd ,可以找到该后台进程,windows 请使用 findstr 替代 grep

    image

    通过adb操作android设备

    设置adb Client这边的环境,连接上数据线,然后把手机开发者模式打开,打开usb调试。

    image

    设置adb server这边的环境:将android sdk工作目录添加到系统环境变量中,则可使用adb命令了。

    4.adb 命令

    小技巧:记不住ADB命令?
    ADB 命令的插件 adb-idea
    

      

    在开发或者测试的过程中,我们可以通过 adb 来管理多台设备,其一般的格式为:

    adb [-e | -d | -s <设备序列号>] <子命令>
    

    在配好环境变量的前提下,在命令窗口当中输入 adb help 或者直接输入 adb ,将会列出所有的选项说明及子命令。 

    命令   参数 功能
    adb devices    

    列出当前连接的设备列表,显示出设备的id

    要进入某一个id则

    adb -s 设备id号就可以进入当前的设备

    adb start-server     启动adb服务
    adb nodaemon server     

    启动adb服务后,显示daemon not running;starting now at tcp:5037

    使用当前命令检查5037端口是否被占用

    adb kill-server     停止adb服务

    adb connect

        如果是USB连接,直接会连接ADB,如果是想通过网络连接,则需要在同一个局域网,通过IP连接

    adb disconnect

        断开连接设备
    adb install     安装APP,如果apk已安装,则覆盖安装
      -r 如果apk已安装,则重新安装apk并保留数据和缓存文件
    adb uninstall     卸载APP,不保留数据和缓存文件
     

    -k

    卸载APP,保留数据和缓存文件
    adb shell pm list packages     列出设备上的所有包名
      -s 列出系统应用的所有包名
      -3 列出除了系统应用的第三方应用的包名
    adb shell pm clear     清除应用数据与缓存

    adb shell am start +包名/.MainAcitivity

        启动APP
      -n 携带参数启动 activity
    adb shell am force-stop     强制停止应用
           
    adb push     向设备拷入文件
    adb pull     从设备拷出文件
           
    adb remount    

    获取文件的读写权限

    (有些设备并不能直接执行adb remount,必须要先获取root权限因此要先执行adb root命令)

           
    1.adb root     删除系统应用
    2.adb remount    
    3.adb shell    
    4.cd system/app/    
    5.ls    
    6.rm *.apk    
           
    adb shell     杀死某个进程

    ps

       
    kill pid    
           
    adb logcat     获取日志
           
    adb tcpip 8888     重新设置设备连接端口
           
    adb shell cat /proc/cpuinfo     显示手机cpu信息
    adb shell getprop ro.product.model      查看手机的设备型号
    adb shell cat /sys/class/net/wlan0/address     获取手机的mac地址
    adb shell dumpsys activity | findstr "mFocusedActivity"     windows环境下查看顶部的Activity
    adb shell dumpsys activity | grep "mFocusedActivity"     linux/mac环境下查看顶部的Activity
    adb shell am broadcast -a "broadcastactionfilter"     发送广播
    adb shell am startservice "com.zhy.aaa/com.zhy.aaa.MyService"     启动服务
    adb shell screencap /sdcard/screen.png     屏幕截图
    adb shell screenrecord /sdcard/demo.mp4     录制视频
           

    详细例子参考

    https://yinleilei.blog.csdn.net/article/details/87897863?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1332023.8677.16189947576819859&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

    ① adb devices , 获取设备列表及设备状态

    image

    ② adb get-state , 获取设备的状态

    image

    设备的状态有 3 钟,device , offline , unknown

    device:设备正常连接

    offline:连接出现异常,设备无响应

    unknown:没有连接设备

    ③ adb install 用于安装

    adb install <apk文件路径>,将指定的apk安装到设备上,安装的apk包会放在/data/app目录下。
    
    几个参数:
    
    -r 强制安装
    
    -d(真机,多个设备中只有一个真机时适用)
    
    -e(模拟器,多个设备中只有一个模拟器时适用)
    
    -s(指定设备,后接序列号)
    
    adb –s 44a188f9 install –r test.apk(其中44a188f9即序列号,通过adb devices可获取)
    

      

    image

    安装成功,返回成功提示 "Success";

    安装失败,会返回以下:

    INSTALL_FAILED_ALREADY_EXISTS

    此时需要用 -r 参数来重新安装。

    INSTALL_FAILED_SIGNATURE_ERROR

    应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。

    INSTALL_FAILED_INSUFFICIENT_STORAGE

    存储空间不足,需要检查设备存储情况。

    ④adb uninstall 用于卸载

    adb uninstall <apk包名>
    
    adb uninstall –k <apk包名>
    
    -k参数为卸载软件时保留配置和缓存文件
    

    adb uninstall 后面带的是应用的包名,而不是应用名。

    ⑤下载文件 / 上传文件

    adb pull <设备中的文件路径> <本地路径>:从模拟器或设备中复制文件到本地。

    adb push <本地文件路径> <设备中的路径>:将本地文件或目录复制到模拟器或设备。

    adb pull /sdcard/new.txt    d:
    
    将DLT-RK3288 内部存储器根目录下的new.txt 拉到D盘

    adb push d:/new.txt /sdcard/  
    
    将D盘下new.txt文件 推到内部存储器
    

    ⑥ adb shell pm list package

    Package Manager , 可以用获取到一些安装在 Android 设备上的应用信息

    -s:列出系统应用

    -f:列出应用包名及对应的apk名及存放位置

     过滤应用

     

      ⑦ adb shell

    通过adb shell 命令,就可以进入设备或者模拟器的shell环境了,在这个Linux shell中,我们就可以执行各种Linux命令了。

    如果只想执行一条shell命令,就可以采用:adb shell [shell_command],在实际使用中,经常与grep或findstr一起使用,起到过滤作用,查看自己需要的关键信息。

    常见命令:

    如 ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,进入adb shell即可执行,与linux相似  

      ⑧ adb logcat

    一.在cmd窗口查看手机的Log日志

    有时候我们在手机程序上的日志要在其他地方调试,然后要看里面的Log日志。在cmd窗口中输入如下命令:

    //格式1:打印默认日志数据
    
    adb logcat
    
    //格式2:需要打印日志详细时间的简单数据
    
    adb logcat -v time
    
    //格式3:需要打印级别为Error的信息
    
    adb logcat *:E
    
    //格式4:需要打印时间和级别是Error的信息
    
    adb logcat -v time *:E
    
    //格式5:将日志保存到电脑固定的位置,比如D:log.txt
    
    adb logcat -v time >D:log.txt
    

     

    这时手机日志更新什么日志,cmd窗口也会同步更新数据。

    但是这样没有过滤条件,如果Log日志很多,很难找到我们想要的信息,

    当然也可以复制cmd中的数据到一个文本中慢慢处理的,就是效率不高。

    下面介绍adb logcat中的详细参数命令以及如何才能高效的打印日志,或者把日志保存到我们指定的位置。

    二、adb logcat 详解

    adb logcat如果用过,但是具体命令又不记得,可以输入adb logcat -help,查看一下一些简单的数据格式:

    image

    日志过滤:adb logcat <tag>[:priority]

    tag表示标签,priority输出的级别,日志默认级别是V,如果错误日志我们选择E就可以。

    Android 的日志分为如下几个优先级(priority):

    V —— Verbose(最低,输出得最多)

    D —— Debug

    I —— Info

    W —— Warning

    E —— Error

    F —— Fatal

    S —— Silent(最高,啥也不输出)

    按某级别过滤日志则会将该级别及以上的日志输出。比如,命令:adb logcat *:W

    其实*可以是某个tag,如果没有指明,就表示所有。

    tag可以由多个 [:priority] 组成。比如,命令:

    adb logcat ActivityManager:I MyApp:D *:S

    表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

    adb logcat选项解析

    --"-s"选项 : 设置输出日志*:s的标签, 只显示该标签的日志;

    --"-f"选项 : 将日志输出到文件, 默认输出到标准输出流中, -f 参数执行不成功;

    --"-r"选项 : 按照每千字节输出日志, 需要 -f 参数, 不过这个命令没有执行成功;

    --"-n"选项 : 设置日志输出的最大数目, 需要 -r 参数, 这个执行 感觉 跟 adb logcat 效果一样;

    --"-v"选项 : 设置日志的输出格式, 注意只能设置一项;

    --"-c"选项 : 清空所有的日志缓存信息;

    --"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;

    --"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;

    --"-g"选项 : 查看日志缓冲区信息;

    --"-B"选项 : 以二进制形式输出日志;

    把日志信息保存到电脑中

    adb logcat最后添加” > 保存文件的地址,比如需要将的信息保存到电脑中使用下面的命令: adb logcat -v time > D:log.txt

     

    ⑨ adb shell dumpsys

    Android提供的dumpsys工具用于查看感兴趣的系统服务信息与状态。

    参考下表:

    ⑩ adb shell monkey

    跑monkey是android自动化测试的一种手段,所谓monkey测试就是模拟用户的按键输入触摸屏输入手势输入等。当Monkey程序在模拟器或设备运行的时候,如果用户比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey的随机重复的方法对apk作压力测试,来测试android app的稳定性。

    如下为测试腾讯新闻apk的一个简单实例:

    说明:第一个-s指定设备,如果只连接了一台设备,可不用该参数。

    -p <apk包名>只允许系统启动指定的app,如果不指定,将允许系统启动设备中的所有app,也可指定多个包。

    --throttle <毫秒数> 指定用户操作(事件)间的时延。

    --ignore-crashes 指定当应用程序崩溃时,Monkey依然发送事件,直到事件计数完成。

    --ignore-timeouts 当应用程序发生ANR错误时,Monkey依然会发送事件,直到事件计数完成。

    第2个-s,用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

    -v 用于指定反馈信息级别,总共分为level 0、level 1、level 2三个级别,级别越高,输出的日志越详细。

    最后的数字(这里是500):表示Monkey程序模拟500次随机用户操作事件。

    >输出测试结果到D:monkeylog.txt

    更详细的参数可查看参考文献5

    部分测试结果如下:

    对于测试结果的分析,通过搜索关键词来定位错误,主要包括以下四个方面:

    1)ANR(Application Not Response):程序无响应,一般主线程超过5秒没处理就会出现ANR错误。通过搜索ANR关键词来定位关键的事件信息。除了导出日志外,还可以将/data/anr/目录下的trace.txt文件导出,用来定位分析问题。使用>adb pull /data/anr/trace.txt d: 将trace.txt文件导出到d盘。

    2)ForceClosed或其他异常退出信息:通过搜索Fatal关键词来定位。

    3)崩溃问题:通过搜索Exception关键词来定位。

    4)发生异常后,通过搜索Crash关键词来定位到详细的堆栈信息。

    kill

    kill用来中止一个进程。

    比如我们在跑monkey的时候,怎么强制关闭monkey呢,可以用kill <monkey进程PID>

    说明:开启一个cmd,找到monkey的pid号 然后杀掉即可 

    参考文献:

    1.Android调试桥:http://www.iteye.com/topic/260042

    2.Android性能分析工具dumpsys的使用:http://www.open-open.com/lib/view/open1405061994872.html

    3.adb shell 中的am pm命令:http://www.android100.org/html/201312/09/4957.html

    4.adb shell 启动应用程序的方法:http://blog.chinaunix.net/uid-26997997-id-3350449.html

    5.Monkey压力测试详解:http://blog.csdn.net/huangbiao86/article/details/8490743

    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    vb中5种打开文件夹浏览框的方法总结(转)
    js 日期
    正则表达式
    HTML中meta的作用
    Java操作ElasticSearch
    Elastic安装
    Elasticsearch基本操作
    ubootfs2410移植(转)
    内核驱动系列字符设备驱动流程
    linux 内核移植
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14685562.html
Copyright © 2011-2022 走看看