Android调试工具adb简介

Android调试工具adb简介

对于Android测试和开发,adb使用应该算是一个基本技能,正好最近需要用到这个,结合网上前人经验稍微总结一下。

adb

adb全称Android Debug BridgeAndroid的调试桥,其实就是一个C/S架构的命令行工具。
adb有三个部分:

  1. 运行在PC端(Windows,linux,Mac os)的client,功能是可以进行Android应用的安装,卸载,调试。
  2. 运行在PC端的service,作用是管理客户端到Android设备上adb后台进程的连接(adb服务启动后,在Windows资源管理器中可以查看adb.exe是启动状态)
  3. 运行在Android设备上的adb后台进程(adb shell ps | grep adb可见,占用端口5037)

常用abd命令

  • 安装应用(apk文件在PC本地)
    命令行进入apk文件所在路径,执行adb install kuaikan.apk

  • 卸载应用(应用已安装在Android设备)
    区别与安装应用是试用apk文件,卸载应用试用的是包名,类似:com.android.camera
    连接上设备,执行adb uninstall com.kuaikan.comic
    (关于获取包名,可以问开发,也可以反编译apk文件,从AndroidManifest.xml文件中获取,反编译方法:推荐使用apktool,直接命令行执行java -jar 路径\apktool.jar d 、路径yourApkFile.apk即可,包名在AndroidManifest.xml中的package项可获取,顺便activity也可以在此获取activity)

    apktool下载地址

  • 文件互传
    Android设备和PC之间的文件互传
    adb pull 文件 目录文件从Android设备推送到本地PC
    adb push 文件 目录文件从本地PC上传到Android设备

  • 设备连接
    adb devices 获取设备列表及设备状态
    adb get-state 获取设备状态(device表示连接正常;offline表示连接异常,设备无响应;unknown表示为止设备)

  • 日志操作
    adb logcat打印Android系统日志,类似的bugreportdumpsysdumpstate,建议重定向到本地:
    adb bugreport > D:\applogs\bugreport.log

adb shell

adb shell其实就是调用Android系统中的命令,应该都知道,Android底层其实是linux,adb shell个人理解,和进入linux敲命令差不多,只是敲的是封装好的Android命令,因此,可以直接先执行adb shell进入shell模式:

1
2
3
4
5
E:\app_workstation {git}
{lamb} adb shell
sakura:/ $
2|sakura:/ $ cd /data/
sakura:/data $

另外,adb shell的命令,都是执行的/system/bin目录下的执行文件,如果设备是root过的,可以尝试把这个目录导出来,看看命令:

1
adb pull /system/bin/ E:\app_workstation\BIN

导出之后,可以看一下am命令:

1
2
3
4
5
6
7
8
9
#!/system/bin/sh

if [ "$1" != "instrument" ] ; then
cmd activity "$@"
else
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
fi

其实就是shell脚本

  • 服务启停
    停:adb kill-server
    启:adb start-server
    一般设备连接异常时,adb devices未显示设备,可以先停再重启服务

pm

  • 列出安装在设备上的应用
    adb shell pm list package

  • 列出系统应用
    adb shell pm list package -s

  • 列出第三方应用
    adb shell pm list package -3

  • 列出包名及对应的apk名和存放路径
    adb shell pm list package -f

  • 组合查找,过滤(查找相机包名及安装路径)
    adb shell pm list package -f -i camera

  • 列出对应包名的.apk位置
    adb shell pm path com.android.camera

  • 列出对应包名的dump信息(可重定向到本地)
    adb shell pm dump com.android.camera > E:\app_workstation\android_files\camera.dump

am

  • 启动activity
    adb shell am start -n package/activity
    例如:adb shell am start -n com.android.camera/.Camera

    1
    2
    {lamb} adb shell am start -n com.android.camera/.Camera
    Starting: Intent { cmp=com.android.camera/.Camera }
  • 先停止应用再启动
    adb shell am start -S com.android.camera/.Camera

    1
    2
    3
    {lamb} adb shell am start -S com.android.camera/.Camera
    Stopping: com.android.camera
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.camera/.Camera }
  • 启动默认浏览器并打开网页
    adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com

    1
    2
    {lamb} adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com
    Starting: Intent { act=android.intent.action.VIEW dat=https://www.baidu.com/... }
  • 停止应用
    adb shell am force-stop package

    1
    {lamb} adb shell am force-stop com.android.camera

    其他

  • 截图
    adb shell screencap -p /sdcard/screen.png

  • 录制
    adb shell screenrecord sdcard/record.mp4

  • 查看设备信息(如Android版本号)
    adb shell getprop
    示例:获取sdk版本:adb shell getprop ro.build.version.sdk

  • 查看分辨率
    adb shell wm size

  • 查看屏幕密度
    adb shell wm density

当设备root后,其实能获取的就更多了,例如MAC 地址啥的

获取当前页面activity

用于手上没有apk反编译,也没开发可以问,直接手机打开app,adb shell获取activity

通过adb shell dumpsys window |findstr mCurrent,捕获当前页面的activity
通过adb shell dumpsys activity|findstr realActivity, 捕获到当前页面的activity

以上,完~

文章目录
  1. adb
  2. 常用abd命令
  3. adb shell
    1. pm
    2. am
    3. 其他
  4. 获取当前页面activity
|