前言:adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有:
* 运行设备的shell(命令行)
* 管理模拟器或设备的端口映射
* 计算机和设备之间上传/下载文件
* 将本地apk软件安装至模拟器或android设备
ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备
Device offiline 处理方法
在调试Android设备时,时常会遇到Device offiline情况,尽管我们的设备已经连接到计算机上,遇到此类情况,可尝试如下方法。
一、adb device offline
1、打开设置 > 开发者选项 > 开启手机USB调试,连接到电脑,新版本Android此时会进行指纹弹出认证(手机端),此时如果不点确认的话,即使在电脑上使用adb devices指令,依然看到设备处于offline状态,此时只要在手机上点击同意调试即可。
2、重启adb kill-server、adb devices。端口USB设备并再次连接到计算机,或者重启USB设备一次。
3、如果此时还是找不到设备状态在位(offline),可怀疑是adb版本问题,在部分早期adb版本会有此问题,此时升级adb工具到新版本上(发文截至,最新版本adb 1.03)。
如果是使用Ubuntu等Linux系统可,还可尝试使用Eclipse SDK管理工具更新驱动包。
adb devices找不到
之前还遇到过adb devices找不到情况,这时启动adb shell当然也是无法进入, 由于是进行裸板调试 所以就无法像用真机那样把手机调成USB调试模式 经过反复的查阅资料和探索 找到了解决办法 通过adb help可以查到相关的命令 我们通过执行命令 adb wait-for-device 这条命令是等待设备上线 执行后把usb拔出来再插上后就可以看到设备已经连接上 可以顺利的进入adb的shell 问题成功解决
adb 命令
adb help 查看adb帮助
adb get-serialna 获取序列号
adb devices 获取设备列表及状态
adb bugreport 查看bug报告
adb remount 将system分区重新挂载为可读写分区
adb devices -l 查看连接计算机设备详细列表
adb get-state 获取设备状态:device offline unknown
adb reboot 重启安卓设备
adb reboot bootloader 重启到刷机模式
adb reboot recovery 重启到恢复模式
adb kil-server 终止adb服务进程
adb start-server 重启adb服务进程
adb install xxx.apk 安装apk
adb install -r 保留数据与缓存文件,覆盖安装apk
adb install -s 安装apk到sd卡
sdb uninstall xxx包 卸载apk
adb uninstall -k xxx包 卸载app但保留数据和缓存文件
adb push local remote 推送本地文件至 Android 设备
adb pull remote local 将Android设备上的文件或文件夹复制到本地
adb forward 将 宿主机上的某个端口重定向到设备的某个端口
adb forward tcp:1314 tcp :8888
adb connect 远程连接设备 (手机pc要处于同一网络环境下,手机root,手机安装adbwireless,启动然后再pc运行adb connect ip号 即可实现无线连接)
-------------------------------------------------------------------------
adb locat 命令
adb logcat 查看log
adb logcat -d 输出当前日志,自动结束
adb logcat > log1.txt 输出重定向续输出
adb logcat -d > log1.txt 输出结束就退出
adb logcat -c 清空日志缓存信息
adb bugreport > d:\bugreport.log 日志输出
adb logcat —t 5 输出最近的5行日志
adb logcat -b 产看日志缓冲区信息
adb logcat -B 以二进制形式输出日志
logcat -f /sdcard/log.txt 将日志保存到手机端的文件中
可以指定logcat的日志输出格式
-v 选项 :
adb logcat -v time
add logcat -v thread time
add logcat -v process
adb logcat -v tag
add local -v thread
raw
time
long
logcat 日志的过滤
使用管道过滤固定字符串
adb logcat | grep 过滤某个文件
adb logcat | grep Wifi
adb logcat | grep -i Wifi 过滤字符串忽略大小写
根据规则过滤
adb -e logcat Android:W *.s
adb -e logcat mes:I *.s > 1og3.txt I D S W E
adb logcat 10 *:E 显示error以上级别的日志
adb logcat WifiHW:D *:S (过滤指定标签等级日志) 含义: 输出10条日志,日志的标签为WifiHW,并且优先级为Debug以上
adb logcat WifiHW:D dalvikvm:I *:S 命令,(同时设置多个过滤器) 输出 WifiHW 标签 的 Debug 以上级别 和 dalvikvm 标签的 Info 以上级别的日志;
- 日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就是查看系统的标签)
- 优先级有下列几种,是按照从低到高顺利排列的:
-
- V — Verbose (lowest priority)
- D — Debug
-
- I — Info
- W — Warning
-
- E — Error
- F — Fatal
-
- S — Silent (highest priority, on which nothing is ever printed
例子1:过滤出标签ActivityManager,级别高于I的日志,以及标签为dalvikvm,级别高于D的日志,其它屏蔽 *.s
adb -e logcat ActivityManager:I dalvikvm:D *.s
例子2:过滤出级别高于W的所有日志
adb -e logcat *:w
例子3:过滤出级别高于I的,标签为mes的日志,其它屏蔽 *.s
如何过滤adb logcat输出
本文介绍如何在 shell 命令行中过滤 adb logcat 输出的几个小技巧。
开发当中经常看到别人的 log 如洪水般瞬间刷满了屏幕,对自己有用的信息都被淹没了,影响心情也影响效率。下面是几个我所知道的过滤方法。
1. 只显示需要的输出白名单
最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小写。
adb logcat | grep --color=auto -i myapp #设置匹配字符串颜色。更多设置请查看 grep 帮助。
进阶一点可以使用 grep 的正则表达式匹配。例如上一个例子会匹配一行中任意位置的 MyApp,可以设置为仅匹配 tag。默认的 log 输出如下,如果修改过输出格式相应的表达式也要修改。
命令停止方法
1、获取logcat_pid adb shell ps|grep logical
2、 停止方法 adb shell kill -9 <logcat_pid>
------------------------------------------------------------------------
adb shell 命令
adb 命令是 adb 这个程序自带的一些命令
ddb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下(am ,pm. shell)
adb shell cat/sys/class/net/wlan0/address 获取器Mac地址
adb shell cat/proc/cpuinfo 获取CPU序列号
adb shell top 查看设备cpu和内存占用情况
adb shell top -m6 查看占用内存前6的app
adb shell top -n1 刷新一次内存信息,然后返回
adb shell procrank 查询各进程内存使用情况
adb shell cat /proc/meminfo 查看当前手机内存占用
adb shell cat /proc/iomem 查看IO内存分区
adb shell kill pid 杀死一个进程
adb shell ps 查看进程列表
adb shell ps -ef 查看详细进程信息
adb shell ps -x pid 查看指定的进程状态
adb shell service list 查看后台services信息
adb shell dumpsys cpuinfo 查看CPU信息 cl
adb shell dumpsys meminfo 查看所有内存信息
adb shell dumpsys meminfo 应用包名 查看应用的内存信息
adb shell dumpsys pkg_name 查看某个包的内存信息
adb shell dumpsys battery 查看电量信息
adb shell pm path 应用包名 查看应用的安装路径
adb shell pm list packages 获取手机上已经安装的所有的程序 (-s 列出系统应用 -3 列出第三方应用 -f 列出应用报名及对应的 apk名字 及存放位置-i 列出应用包及其安装来源)
adb shell ls 查看目录下的文件
adb shell ls -l 查看目录下的文件及详细属性
adb shell ls -a 查看目录下的隐藏文件
adb shell ls -F 展开目录层次层次结构
adb shell ls -R 展示文件扩展类型
adb shell ls -t 将文件进行先后顺序排序再展示
adb shell cd 进入文件目录
adb shell rename path/oldfilename path/newfilename 重命名文件
adb shell rm /system/avi.apk 删除 avi.qpk
adb shell rm -r folder 删除文件及其下面所有文件
adb shell mv path/file newpath/file 移动文件
adb shell chmod 777 /system/fonts/DroidSansFallback.ttf 设置文件权限
adb shell mkdir path/foldelname 新建文件夹
adb shell cat file 查看文件内容
adb shell cat /data/misc/eifi/*.conf 查看WiFi密码
adb shell cat /system/build.prop 获取设备名称
adb shell screencap -p /sdcard/Download/screen.png 截图
adb shell screenrecord sdcard/record.mp4 执行命令后录制手机屏幕活动,按ctrl+c结束录制,并保存
adb shell uiautomator dump 获取当起界面的控件信息
pm
adb shell pm path
adb shell pm instrumentation 列出家含有单元测试用例的应用
adb shell pm dump 后跟包名,列出指定应用的各种信息
adb shell pm install (目标apk安装在pc端用adb install,目标安装在Android设备上,用pm install)
adb shell pm uninstall
adb shell pm clea
adb shell pm set-install-location
adb shell pm get-install-location
am
am start 启动一个Activity
adb shell am start -n com.android.camera/.Camera
启动一个浏览器打开一个网页
adb shell am start -a android.intent.action.VIEW -d http://testhome.com
如:打开团队商品详情兜底页
adb shell am start -a android.intent.action.VIEW -d imeituan://www.meituan.com/merchant?id=119794726
启动拨号10086
adb shell am start -a android.intent.action.CALL -d tel:10086
Music 和 Video(音乐和视频)的启动
adb shell am start -n com.android.music/com.android.music.MusicBrowserActivity
adb shell am start -n com.android.music/com.android.music.VideoBrowserActivity
adb shell am start -n com.android.music/com.android.music.MediaPlaybackActivity
Camera(照相机)的启动
adb shell am start -n com.android.camera/com.android.camera.Camera
Browser(浏览器)的启动
adb shell am start -n com.android.browser/com.android.browser.BrowserActivity
启动 google map 直接定位到北京
am start -a android.intent.action.VIEW geo:0,0?q=beijing
am instrument
am monitor 监控crash与ANR
am force-stop 强制结束应用
am startservice 启动一个服务
am broad cast 发送一个广播
input
该命令可以想Android设备发送按键事件
adb shell input text yiduanfeihanziwenben 需要将手机端设为英文输入
adb shell input keyevent KEYCODE_HOME
adb shell input keyevent 3
key event.java : http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/view/KeyEvent.java#KeyEvent
adb shell input tap 500 500 在屏幕500 500 位置发送触摸事件
adb shell input swipe 900 500 100 500从右向左滑动屏幕
adb shell input swipe 500 500 501 501 2000 在一个很小的范围内,持续长时间的滑动,就表现出长按动作
runtest 与 dump
adb shell ime list -s 列出系统上的输入法
adb shell wm size 获取设备的分辨率
adb shell getprop 得到key : value
adb shell getprop key 得到该key值对应的value 以查看设备参数信息
-----------------------------------------------------------------------------
adb获取手机所有参数参
adb shell getprop
adb获取iccid
service call iphonesubinfo 4(需要权限android.permission.READ_PHONE_STATE)
adb获取imei
adb -d shell dumpsys iphonesubinfo
adb获取androidid
androidid藏在这里[net.hostname]: [android-b33f3ac550112627]
命令:getprop net.hostname
adb获取serialno
命令:getprop ro.boot.serialno或者getprop ro.serialno
adb获取imei
service call iphonesubinfo 1
更多信息参考这个
----------------------------------------------------------------------------
截屏
1、adb shell /system/bin/screencap -p /sdcard/screenshot.png
2、adb pull /sdcard/screenshot.png ~/screenshot.png
----------------------------------------------------------------------------------------
aapt 命令
aapt d badging xx.apk aapt命令可查看 package/class