adb 命令常用
Android 调试桥
adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。
Tips:
在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。
adb 的工作原理
启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。
启用 adb 调试
要在通过 USB 连接的设备上使用 adb,您必须在设备系统设置中启用 USB debugging(位于 Developer options 下)。
在运行 Android 4.2 及更高版本的设备上,Developer options 屏幕默认情况下处于隐藏状态。如需将其显示出来,请转到 Settings > About phone 并点按 Build number 七次。返回上一屏幕,在底部可以找到 Developer options。
注:当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。
adb常用命令
查看adb版本
1 | adb version |
连接夜神模拟器
1 | adb connect 127.0.0.1:62001 |
Tips:
夜神模拟器的端口是规律的,第一个模拟器端口是62001,第二个模拟器端口是62025,第三个是62025+1,依此类推。
模拟器1:Android 4.4.2 地址:127.0.0.1:62001
模拟器2: Andriod 5.1.1 地址:127.0.0.1:62025
更多详情:夜神安卓模拟器adb命令详解
查看设备信息
1 | adb devices |
如果出现如下提示:
1 | adb server version (31) doesn't match this client (36); killing... |
- 原因: adb版本不对 ,Androd SDK的版本和模拟器的adb版本不一致
- 解决方案:将Android SDK的 adb替换掉模拟器的adb即可。模拟器adb路径 :{安装Path}\Nox\bin
adb shell
android 设备底层是 linux 系统。 shell 是 linux 系统的字符交互界面。
1 | adb shell |
进入adb shell后有两种状态显示:#
代表有root权限,$
代表没有root权限
1 | root@android:/ # |
root知识小科普
“To err is human, but to really foul up everything, you need root password.”
“人非圣贤孰能无过,但是拥有root密码就真的万劫不复了。”
root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限。一些需要root权限的应用,譬如广告阻挡,卸载系统预装App是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root。
在设备安装apk
1 | adb install | -r <apkName> -r 覆盖原安装文件 -s 可以指定设备 |
adb install报错
Failure [INSTALL_FAILED_INVALID_URI]
解决方案:
cmd命令行下执行以下命令:
1 | adb remount |
- 小米设备安装报错
Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]
解决方案:开发者选项-usb安装 把安装开关打开
卸载apk
1.首先进入设备的/data/app目录找到app包名
1 | adb shell |
2.执行命令删除
1 | adb uninstall | -k <apkName> 卸载软件 |
Tips:安装后的包名系统会在末尾加上-1之类的数字,要去掉才可以成功卸载。 软件名称为包名,不要包含.apk
-k 加 -k 参数,为卸载软件但是保留配置和缓存文件.
查看设备上面安装的应用包名
1 | adb shell pm list package |
文件读取写入
将文件从PC写入到设备
1 | adb push <local> <remote> |
将文件从设备读取到PC
1 | adb pull <remote> <local> |
注意:
- 由于权限问题,不能直接pull到电脑磁盘根目录,否则会报错:
1 | C:\Users\Shuqing>adb pull /sdcard/server.log D:\\ |
- 文件夹没有写入权限,可以修改文件夹属性,参考方法:win10怎么设置文件权限
1 | cannot create 'xxxxx': Read-only file system |
屏幕截图
1 | $ adb shell screencap /sdcard/screen.png |
快速写满存储空间
通过如下 adb 命令在 /mnt/sdcard/
目录下产生一个名为 bigfile
的文件,让其自动增长到磁盘剩余空间大小。
1 | adb shell dd if=/dev/zero of=/mnt/sdcard/bigfile |
adb服务启动和关闭
1 | adb kill-server 关闭adb服务 |
Tips:如果5037端口被占用可以使用如下命令释放端口
1 |
|
获取设备信息
获取系统版本
1 | adb shell getprop ro.build.version.release |
获取系统api版本
1 | adb shell getprop ro.build.version.sdk |
获取设备制造商信息
1 | adb shell getprop | grep "model\|version.sdk\|manufacture |
adb 获取App运行日志
- 获取指定app的运行日志,
1 | adb logcat *:I | find "com.hunantv.imgo.activity" |
过滤项格式 : <tag>[:priority]
, 标签:日志等级, 默认的日志过滤项是 “ *:I
“ ;
- – V : Verbose (明细);
- – D : Debug (调试);
- – I : Info (信息);
- – W : Warn (警告);
- – E : Error (错误);
- – F : Fatal (严重错误);
- – S : Silent(Super all output) (最高的优先级, 可能不会记载东西);
- 将日志写入指定文件
1 | adb logcat *:I | find "com.hunantv.imgo.activity" >C:\Users\Shuqing\Desktop\log.txt |
统计多次启动某个Activity的平均用时
1 | adb shell am start -S -R 10 -W com.example.app/.MainActivity |
- 其中
-S
表示每次启动前先强行停止,-R
表示重复测试次数。每一次的输出如下所示信息。 - 其中
TotalTime
代表当前Activity
启动时间,将多次TotalTime
加起来求平均即可得到启动这个Activity
的时间。
adb wifi连接
1.首先使用有线连接设备,开启usb-debug
2.输入下面命令
1 | adb tcpip 5555 |
3.断开数据线,保持手机wifi连接和电脑在一个wifi下,然后连接手机
1 | adb connect <要连接设备的IP地址> |
小结
- adb是自动化非常重要的一个工具
- 目前很多PC客户端手机助手也是基于adb连接原理进行封装的。
- 可以将常用的adb命令封装成bat命令,随时可以运行。如:
adbdevices.bat
1 | adb devices |
AdbConnect.bat
1 | adb connect 127.0.0.1:62025 |
参考文档
- http://www.android-doc.com/tools/help/adb.html
- https://developer.android.com/studio/command-line/adb.html
- https://blog.csdn.net/google_acmer/article/details/78649720?utm_source=blogxgwz0
- https://www.cnblogs.com/lxs1314/p/6214154.html
- https://www.jianshu.com/p/59a2ca7df681
- https://drprincess.github.io/2018/06/29/%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E8%83%BD-%E5%B0%91%E5%B9%B4%EF%BC%8C%E5%BF%AB%E6%8B%94%E6%8E%89%E4%BD%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BA%BF%EF%BC%81/