ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备。它的功能如下:
- 运行设备的shell(命令行)
- 管理模拟器或设备的端口映射
- 图片链接和图片上传
- 计算机和设备之间上传/下载文件
- 将本地apk软件安装至模拟器或android设备
其实ADB是一个客户端-服务器端 程序,客户端即PC端, 服务器端是android设备。客户端包含在sdk里。设备上不需要安装,只需要在手机上打开选项settings-applications-development-USBdebugging。
ADB常用的几个命令都是在PC端执行的:
1.查看设备
adb devices
这个命令是查看当前连接的设备,连接到计算机的android设备或者模拟器将会列出显示。
2.安装应用程序
adb install <apk文件路径>
这个命令将指定的apk文件安装到设备上。
adb install -r apk包
这个命令将指定的apk文件安装到设备上(如果存在则覆盖安装)
3.卸载应用程序
adb uninstall <apk的包名>
或者
adb shell
cd data/app
rm apk包
exit
如果加 -k 参数,为卸载软件但是保留配置和缓存文件。
4.登录设备shell,进入设备的shell模式
adb shell <command命令>
这个命令将登录设备的shell。 后面加
adb push <本地路径> <远程路径>
adb pull <远程路径> <本地路径>
示例代码如下(完成sd卡下的20160712目录拷贝到PC端的e盘根目录下):
adb pull/storage/sdcard0/20160712 e://
push 完成从PC端到Android端,pull 反之。 这里要注意,如果在PC端cmd直接adb shell再执行adb pull会发生“device not found”错误,必须退出shell命令才可以完成文件传输。因此,在代码里实现文件通过ADB传输到电脑,是不可能的,代码里如果按照如下命令执行adb pull会在返回除非的错误输出流中读取到“device not found”错误信息,同时可以看到waitFor()返回值为1,虽然官方表示返回值为1是权限问题,但在这里明显不是权限问题,希望遇到同样问题的小伙伴止住继续探索权限的步伐。要想在代码里实现文件传输,最好还是使用Socket等技术。
process =Runtime.getRuntime().exec("su");
os = newDataOutputStream(process.getOutputStream());
os.write(command.getBytes());
os.flush();
5.删除系统自带软件(需Root)
adb shell
cd system/app
rm <目标APP>.*
接着重启手机即可。
6.对某一设备执行命令:
adb -s 编号命令
这个命令在存在多个设备的时候选择其中某一个设备
7.查看adb命令帮助信息:
adb help
8. 在命令行中查看LOG信息:
adb logcat -s 标签名
9.删除系统应用:
adb remount (重新挂载系统分区,使系统分区重新可写)。
adb shell
cd system/app
rm *.apk
10.获取管理员权限:
adb root
=========================以上比较常用,下面的很少用到,有兴趣可以看下================
11.启动Activity:
adb shell am start -n包名/包名+类名(-n类名,-aaction,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。
12、发布端口:
你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:
adbforward tcp:5555 tcp:8000
13、复制文件:
你可向一个设备或从一个设备中复制文件,
复制一个文件或目录到设备或模拟器上:
adb push <source> <destination></destination></source>
如:adbpush test.txt /tmp/test.txt
从设备或模拟器上复制一个文件或目录:
adb pull <source><destination></destination></source>
如:adbpull /addroid/lib/libwebcore.so .
14、查看bug报告:
adbbugreport
15、记录无线通讯日志:
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
adb shell
logcat -b radio
16、获取设备的ID和序列号:
adb get-product
adb get-serialno
19、访问数据库SQLite3
adb shell
sqlite3
#cdsystem/sd/data //进入系统内指定文件夹
#ls//列表显示当前文件夹内容
#rm-r xxx //删除名字为xxx的文件夹及其里面的所有文件
#rmxxx //删除文件xxx
#rmdir xxx //删除xxx的文件夹