① 快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
② 在设备上运行shell命令;
③ 管理设备或手机模拟器上的预定端口;
在设备或手机模拟器上上传下载文件
adb的工作方式比较特殊采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。 ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.
1. 显示系统中全部Android平台:android list targets
2. 显示系统中全部AVD(模拟器):android list avd
3. 创建AVD(模拟器):android create avd --name 名称 --target 平台编号
4. 启动模拟器:emulator -avd 名称 -sdcard ~/名称.img (-skin 1280x800)
5. 删除AVD(模拟器):android delete avd --name 名称
6. 创建SDCard:mksdcard 1024M ~/名称.img
7. AVD(模拟器)所在位置:Linux(~/.android/avd) Windows(C:\Documents and Settings\Administrator\.android\avd)
8. 启动DDMS:ddms
10. 对某一模拟器执行命令:abd -s 模拟器编号 命令
11. 安装应用程序:adb install -r 应用程序.apk
12. 获取模拟器中的文件: adb pull
13. 向模拟器中写文件:adb push
14. 进入模拟器的shell模式:adb shell
15. 启动SDK,文档,实例下载管理器: android
16. 缷载apk包:
adb shell
cd data/app
rm apk包
exit
adb uninstall apk包的主包名
adb install -r apk包
17. 删除系统应用:adb remount (重新挂载系统分区,使系统分区重新可写)。
adb shell
cd system/app
rm *.apk
18. 查看adb命令帮助信息:adb help
19. 在命令行中查看LOG信息:adb logcat -s 标签名
20. adb shell后面跟的命令主要来自: 源码\system\core\toolbox目录和源码\frameworks\base\cmds目录。
21. 获取管理员权限:adb root
22. 启动Activity:adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。
23、发布端口:你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如: adb forward tcp:5555 tcp:8000
24、复制文件:你可向一个设备或从一个设备中复制文件,
复制一个文件或目录到设备或模拟器上:
adb push
如:adb push test.txt /tmp/test.txt
从设备或模拟器上复制一个文件或目录:
adb pull
如:adb pull /addroid/lib/libwebcore.so .
25、获取设备的ID和序列号:
adb get-product
adb get-serialno
26、访问数据库SQLite3
adb shell
sqlite3
27、系统命令
#cd system/sd/data //进入系统内指定文件夹
#ls //列表显示当前文件夹内容
#rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件
#rm xxx //删除文件xxx
#rmdir xxx //删除xxx的文件夹
Classes.dex文件所在位子/data/dalvik-cache
系统内置应用apk包在system/app文件夹中
第三方应用apk在data/app文件夹中
Option |
Description |
-b |
加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers. |
-c |
清楚屏幕上的日志. |
-d |
输出日志到屏幕上. |
-f |
指定输出日志信息的 |
-g |
输出指定的日志缓冲区,输出后退出. |
-n |
设置日志的最大数目 |
-r |
每 |
-s |
设置默认的过滤级别为silent. |
-v |
设置日志输入格式,默认的是brief 格 式,要知道更多的支持的格式,参看 |
adb logcat -b main -v time>app.log 打印应用程序的log
adb logcat -b radio -v time> radio.log 打印射频相关的log,SIM STK也会在里面,modem相关的ATcommand等,当然跟QXDM差的很远了。
adb logcat -b events -v time 打印系统事件的日志,比如触屏事件。。。
Adb logcat > xxx.txt此方法最为实时将log保存到xxx.txt文件中,需要手动停止
Adb logcat -d -f /sdcard/xxx.txt
29、该命令可以看到当前运行的是哪个activity,运行的一些进程等
adb shell dumpsys activity
每一个类别都有一个括号内容,给出了更加详细的指令来查看该类别下更多具体内容。因此再来尝试指令:adb shell dumpsys activity activities
另外,用"adb logcat | grep ActivityManager",也可以查看当前正在运行的Activity
adb shell logcat | grep com.android.launcher2.Launcher
1. 只显示需要的输出,白名单
最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:
adb logcat | grep MyAppadb logcat | grep -i myapp #忽略大小写。adb logcat | grep --color=auto -i myapp #设置匹配字符串颜色。更多设置请查看 grep 帮助。
根据这个格式也可以设置只显示某个优先级的 log,再匹配行首第一个字符即可。例如仅显示 Error 级别 tag 为 MyApp 的输出:
adb logcat | grep "^E.MyApp"
当然也可以匹配多个,使用 | 分割多个匹配表达式,要加转义符。例如要匹配 tag 为 MyApp 和 MyActivity 的输出:
adb logcat | grep "^..MyApp\|^..MyActivity"adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 无须转义符
2. 过滤不需要的输出,黑名单
还是使用 grep,用法也跟上面的一样,加一个 -v 即可。例如要过滤 tag 为 MyApp 和 MyActivity 的输出:
adb logcat | grep -v "^..MyApp\|^..MyActivity"adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 无须转义符
3. 显示同一个进程的所有输出
有时一个程序里面的 tag 有多个,需要输出该程序(同一个 PID)的所有 tag;仅使用 tag 过滤有时也会漏掉一些错误信息,而一般错误信息也是和程序同一个 PID。还是通过 grep 实现,思路是先根据包名找到 pid 号,然后匹配 pid。写成 shell 脚本如下,参数是程序的 java 包名(如 com.android.media)。
#!/bin/bash
packageName=$1
pid=`adb shell ps | grep $packageName | awk '{print $2}'`
adb logcat | grep --color=auto $pid
4. 从当前开始显示
logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。
adb logcat -c && adb logcat
5. 过滤 log 文件
有时需要分析 log 文件,过滤 log 文件还是使用 grep。例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:
cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log
优先级是下面的字符,顺序是从低到高:
V — 明细 verbose(最低优先级)
D — 调试 debug
I — 信息 info
W — 警告 warn
E — 错误 error
F — 严重错误 fatal
S — 无记载 silent
adb logcat [TAG:LEVEL ] [TAG:LEVEL ] ...
标签TAG: 在进行log输出时需要指定标签
Log.v("Test", info );
LEVEL:
可以选择:[V D I W E S]中其中一个
TAG:X 的作用为: 输出标签为TAG的log级别大于 X的信息 . 例如:
adb logcat Test:I
输出 Test的I 和I 级别以上的log,包括 i, w, e
注意:
(1)可以指定多个 [TAG:LEVEL ]
(2) level : S 表示为不输出该标签的日志,应为没有大于S级别的日志了
(3) [TAG:LEVEL ] 不会影响其他标签的日志, 所以如果要屏蔽其他log请使用 *:S
adb logcat Test:I *:S
grep 正则表达式参见grep与正则表达式
adb logcat | grep -E '^[VDE]/(TAG1|TAG2)'
想要把日志保存到文件,如果采用IO重定向,就无法输出到屏幕, 针对这个问题可以采用 tee命令
adb logcat | grep -E '^[VDE]/(TAG1|TAG2)' | tee my.log