什么是adb?
- 缩写:android debug bridge,是Android SDK提供的一个程序,路径:\SDK\platform-tools\adb.exe,
- 配置:把adb 路径添加进系统环境变量path里面,例:D:\sdk\platform-tools; 这样在cmd 窗口就能响应adb命令,不用每次都进入adb目录。
什么是shell?
Shell俗称壳(用来区别于核 kernel),是指“为使用者提供操作界面”的软件(命令解析器)。说白了,它就是类似于Windows系统的cmd.exe的一个交互程序。作用:接收用户命令后,然后调用相应的应用程序。
常见的shell有图形shell 和终端shell:
- 图形shell:如:Windows的explorer.exe、桌面、开始菜单,它们是一种图形shell
Linux的Gnome/Kde .... - 终端Shell:如Windows下的cmd.exe,其他的操作系统都是比较强悍的;
终端Shell最大的特点是字符操作,没有图形。试想,如果你的操作系统显卡驱动崩溃了,绘图功能不能用了,这就是最后的稻草了。事实上,几乎所有的显卡驱动都是在终端Shell下编写,然后用于绘制图形Shell....
特别是在Linux、Mac、Android的终端Shell是非常的强大的。如:bash
搜索结果过多,需要过滤的话,可以利用find关键字:
一些基本命令:
盘符跳转:
在 C:\Users\xglv 想要跳转到 E:/test,有以下方法:
方法1:输入 cd .. 回车,直到回到根目录C,两个点是上一级目录,一个点是当前目录
在根目录C:下,一级级输入文件夹路径
cd E:
cd test
(推荐) 方法2:输入: cd /D E:\test 即可,记住:一定要加参数(/D) ,否则还是会返回原来的目录。
在“C:\Documents and Settings\Administrator>”,要进入E根目录时,直接输入盘符名+冒号即可切换,因为“盘符之间的切换是不需要CD命令“,
C:\Users\xglv>E: 即可
am命令:am可以理解是ActivityManager的缩写
直接启动指定Activity:adb shell am start -n package/.XXXactivity
适用于一个应用有多个Activity,不想从AActivity-->BActivity-->CActivity,而是直接运行CActivity,可以调用上述命令。
adb shell
启动的方法为
# am start -n 包(package)名/包名.活动(activity)名称
启动的方法可以从每个应用的AndroidManifest.xml的文件中得到
Music 和 Video(音乐和视频)的启动方法为:
# am start -n com.android.music/com.android.music.MusicBrowserActivity
# am start -n com.android.music/com.android.music.VideoBrowserActivity
# am start -n com.android.music/com.android.music.MediaPlaybackActivity
Camera(照相机)的启动方法为:
# am start -n com.android.camera/com.android.camera.Camera
Browser(浏览器)的启动方法为:
# am start -n com.android.browser/com.android.browser.BrowserActivity
启动浏览器 :
am start -a android.intent.action.VIEW -d http://www.google.cn/
拨打电话 :
am start -a android.intent.action.CALL -d tel:10086
启动 google map 直接定位到北京 :
am start -a android.intent.action.VIEW geo:0,0?q=beijing
命令 | 作用 | 例子 |
---|---|---|
am start [options] | 启动Activity | am start -n com.eg.Android.AlipayGphone/com.alipay.mobile.payee.ui.PayeeQRSetMoneyActivity |
am startservice | 启动Service | am startservice com.miui.powerkeeper |
am stopservice | 停止Service | |
am broadcast | 发送广播 | |
am kill | kill指定进程 | |
am force-stop | 强制停止某进程 | |
am hang | 系统hang住 | |
am restart | 重启手机 | |
am dumpheap | 将进程pid的堆信息输出到file |
am start [options] 的options参数
(1)am启动activity:
adb shell am start -n com.android.settings/com.android.settings.Settings
adb shell am start - com.android.settings/com.android.settings.Settings
(2)-a :am start -a -d
am start -a android.intent.action.DIAL -d tel:10010 //编辑电话(在拨号盘界面按下电话号码,但是不拨打)
am start -a android.intent.action.VIEW -d http://www.baidu.com //打开某个网址
am start -a android.intent.action.MUSIC_PLAYER //打开音乐播放器
(3)-d <DATA_URI>:启动时,要传入的URI
am start -d content://contacts/people/1
(4)-n :直接启动一个组件
adb shell am start -n com.android.settings/com.android.settings.Settings
(5)-t <MIME_TYPE>: 指定Intent MIME Type
am start -t image/png
(6)-c [-c ] …]:指定Intent category
am start -c android.intent.category.APP_CONTACTS
查看设备: 查看当前连接的设备
adb devices
断开可用的无线设备
在Android Studio调试过程中,有时会发现弹出同一个局域网的其他设备,可以用以下命令关闭:
adb disconnect
登录设备shell
- 登录默认设备(当只有一台设备时)
adb shell
adb shell <command命令>
如: adb shell cat /proc/kmsg
登录设备的shell,后面加<command命令>将是直接运行设备命令, 相当于执行远程命令
- 登录指定设备(当存在一台设备时)---> adb -s 【设备序列号】 shell
C:\Users\admin>adb devices
输出:List of devices attached
03ba45d84381a8d3 device
04e9a66c25234a67 device
FEJNOBD6IND6HU5H device
C:\Users\admin>adb -s FEJNOBD6IND6HU5H shell
输出(登录成功):
root@4G+:/ #
关闭某个应用/进程
方法1:
adb shell
ps -A
kill 123456 //123456是进程PID,由第二步可得
方法2:
adb shell
am force-stop com.lvxiangan.helloworld // 包名
查看某个文件内容
cat hello.text
文件夹创建及删除
mkdir Vw // 创建Vw 文件夹
//删除 注意:删除 文件夹/文件 必须包含完整的路径
adb shell rm -r /data/local/tmp/local/tmp // 删除tmp文件夹及下面所有文件
adb shell rmdir /data/local/tmp/local/tmp // 删除空文件夹:如果不为空,则删除不了,报:Directory not empty
adb shell rm /data/local/tmp/local/tmp/*.* // 删除文件夹下所有的文件
adb shell rm /data/local/tmp/*.xml // 删除文件夹下所有的xml文件
// 复制,将当前目录中的Res\QQ文件夹包括其中的文件复制到sd卡下目录下
D:\Workspace\aaa>adb push .\Res\QQ\ /sdcard/
安装软件:将指定的apk文件安装到设备上
adb install <apk文件路径>
如: adb install com.sina.weibo
参数“-r”,它是更新安装的意思,
参数 -s ,安装到sdcard.
补充:在命令行中先输入adb,然后直接把apk拉进去cmd即可
卸载软件
adb uninstall <包名>
如: adb uninstall com.sina.weibo
如果加 -k 参数,为卸载软件但是保留配置和缓存文件.
prop /local/
同步更新
adb sync [ <directory> ]
如: adb sync /data/
如果不指定目录,将同时更新 /data 和 /system/
显示帮助信息
adb help 注意没有横杠 -
把系统设置为可读写
adb remount
设置手机系统的权限为可读写。
Android文件系统默认是只读权限,如果要对文件做删除/修改,需要用以上命令获取读写权限,当然,前提是有root权限。
重启adb.exe服务
adb kill-server - kill the server if it is running
adb start-server - ensure that there is a server running
5037为adb默认端口,通过一下命令查看该端口的使用情况:
netstat -aon|findstr "5037"
重启设备
adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
查看Log
[adb] logcat [<option>] ... [<filter-spec>] ..
- -b 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers.
- -c 清除屏幕的日志.
- -d 输出日志到屏幕上.
- -f 指定输出日志信息的 ,默认是stdout .
- -g 输出指定的日志缓冲区,输出后退出.
- -n 设置日志的最大数目 .,默认值是4,需要和 -r 选项一起使用。
- -r 每 时输出日志,默认值为16,需要和-f 选项一起使用.
- -s 设置默认的过滤级别为silent.
- -v 设置日志输入格式,默认的是brief 格式
常用logcat命令如下:
- 输出log到 123.txt
adb logcat -v time > 123.txt
time"格式 : "日期 时间 优先级 / 标签 (进程ID) : 进程名称 : 日志信息
adb logcat -v time
"long"格式 : " [ 日期 时间 进程ID : 线程ID 优先级 / 标签] 日志信息 "
adb logcat -v long - 清空日志缓存 adb logcat -c
- 输出缓存日志 adb logcat -d
- 输出最近的5行日志 adb logcat -t 5
- 使用管道过滤日志
过滤指定字符串 adb logcat | grep wifi - 过滤忽略大小的字符串 adb logcat | grep -i wifi
- 正则匹配V/ActivityManager adb logcat | grep '^..Activity'
按键事件
可用于特殊按键模拟
input text <string> // 向设备输入一个字符串
input keyevent <event_code> // 向设备发送一个Key事件
如: adb shell input keyevent 26 // 26 是电源键
pm 命令
命令 | 作用 |
---|---|
pm list packages | 列举app包信息 |
pm install [options] | 安装应用 |
pm uninstall [options] | 卸载应用 |
pm hide | 隐藏应用 |
pm unhide | 显示应用 |
pm get-install-location | 获取安装位置 |
pm clear | 清空App数据 |
pm force-dex-opt | dex优化 |
pm dump | dump信息 |
pm install [options] 的options参数
- -r: 覆盖安装已存在Apk,并保持原有数据;
- -d: 运行安装低版本Apk;
- -t: 运行安装测试Apk
- -i <installer_package_name style=“box-sizing: border-box;”>: 指定Apk的安装器;</installer_package_name>
- -s: 安装apk到共享快存储,比如sdcard;
- -f: 安装apk到内部系统内存;
- -l: 安装过程,持有转发锁
- -g: 准许Apk manifest中的所有权限;
另外,这篇文章总结得也不错。