Android调试工具adb简介
对于Android测试和开发,adb使用应该算是一个基本技能,正好最近需要用到这个,结合网上前人经验稍微总结一下。
adb
adb全称Android Debug Bridge
Android的调试桥,其实就是一个C/S架构的命令行工具。
adb有三个部分:
- 运行在PC端(Windows,linux,Mac os)的client,功能是可以进行Android应用的安装,卸载,调试。
- 运行在PC端的service,作用是管理客户端到Android设备上adb后台进程的连接(adb服务启动后,在Windows资源管理器中可以查看adb.exe是启动状态)
- 运行在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
)文件互传
Android设备和PC之间的文件互传adb pull 文件 目录
文件从Android设备推送到本地PCadb push 文件 目录
文件从本地PC上传到Android设备设备连接
adb devices
获取设备列表及设备状态adb get-state
获取设备状态(device表示连接正常;offline表示连接异常,设备无响应;unknown表示为止设备)日志操作
adb logcat
打印Android系统日志,类似的bugreport
、dumpsys
、dumpstate
,建议重定向到本地:adb bugreport > D:\applogs\bugreport.log
adb shell
adb shell其实就是调用Android系统中的命令,应该都知道,Android底层其实是linux,adb shell个人理解,和进入linux敲命令差不多,只是敲的是封装好的Android命令,因此,可以直接先执行adb shell进入shell模式:
1 | E:\app_workstation {git} |
另外,adb shell的命令,都是执行的/system/bin目录下的执行文件,如果设备是root过的,可以尝试把这个目录导出来,看看命令:
1 | adb pull /system/bin/ E:\app_workstation\BIN |
导出之后,可以看一下am
命令:
1 | #!/system/bin/sh |
其实就是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
以上,完~