adb
ADB是什么?
ADB是android debug bridge–> 安卓调试桥
下载
一般来说,作为android开发人员,不需要下载。在sdk里自带就有。在sdk的platform-tools目录下就有。
如果是测试人员的话,可以到这个地址上去下载:
下载好了然后需要配置环境变量:
右键此电脑->属性->高级系统设置->环境变量->系统变量->Path(添加adb.exe的文件夹路径)->一直点击确定即可
测试:WIN+R,输入cmd进入命令行,输入adb出现下面结果就说明成功了
手机配置
- 打开开发者模式—>不同手机不一样,可以在设置里搜索一下。默认开发者模式是不可见的,需要多次点击android版本号
- 要允许USB调试
- 允许Usb安装应用
- 关闭各种系统优化
插上手机usb时,可能会弹窗需要授权,点击允许就可以了。
常用命令
查看设备
adb devices
:查看当前连接设备
重新挂载
命令:adb remount
remount就是重新挂载的意思。
一般做系统开发才会用到这个命令。
比如说,你要推送东西进system目录下,你需要重新挂载,默认情况下是只读的状态。
如果出现如下提示,提示说我不是root,我得adb root才行。那我们就执行一下adb root,再执行adb remount
Not running as root. Try “adb root” first.
设备重启
命令:adb reboot
如果提示你不是root的,你切换一下root用户就好了。
设备关机
adb shell reboot -p
选择设备
如果你执行adb名的话,则会提示你有多台设备,比如说,我电脑现在有两个手机设备
我执行adb reboot
就会提示多台设备,可以加-s参数来指定设备。
adb -s xxx设备名称
进入shell
命令:adb shell
就进入到了安卓系统的shell了。
常用的shell命令
列出文件
ls -l
目录切换
cd 目录地址
比如说我去查看data/data/下的目录,这个是我们应用的内部目录,里面有很多包名,对应着各应用的文件夹。
我没有权限,那怎么办呢?我们输入su就可以了
查看文件路径
pwd
删除文件
rm命令,如果是文件夹则要加参数-r,强制删除-f,force
创建文件夹
mkdir 文件夹名称
创建文件
touch 文件名
移动文件
mv 需要移动的文件 移动到的文件夹路径(./ 当前路径)
文件查看
有时候临时查看,我们可以用里面的命令cat,vim,vi,more这些命令可能没有,被阉割掉了。或者说本来就是没有的,毕竟android要的是linux的内核。
cat 文件名
发现全是乱码。怎么解决呢?得设置一下编码
chcp 65001
65001是utf-8,936是gbk,再看就行了
文件操作
从Android系统中拉取文件出来
命令: adb pull 内部文件地址 本地目录
如果我们进去里面是用了su命令的, 切换到超级用户。我们就要先adb root
推送文件到android系统中
命令: adb push 本地文件 安卓系统内部路径
应用场景
抓取Log
命令: adb logcat > xxx.log
输入ctrl+c停止抓取log
adb抓取Log有好些个参数,比如说等级,输出时间之类的。
一般建议全抓取,然后用Notepad++来搜索Log
ADB获取包名
应用场景: 我们在开发的时候,有时需要打开别人的应用,如果没有别人的文档的时候。你怎么知道别人的action,category之类的是什么呢?或者用显式意图,你也得知道别人的包名和入口类的全名称呀。然后构建compoment,用于启动。
那怎么获取到包名呢?
我一般会用logcat抓取log,然后过滤一些特定的标识
比如说
1 | adb shell |
然后去打开你的目标应用
1 | locat | grep START |
这个也是有的
应用安装
命令: adb install 本地apk地址
直接拖拽apk也可
不过需要这个手机端得允许usb安装应用
卸载应用
adb uninstall 包名
直接adb跟包名就好,一般我们只卸载自己的,不过你可以去卸载一下系统的应用试试看!
一般系统应用的目录是:
1 | /system/priv-app |
第三方应用的目录在
1 | /data/app |
启动一个Acitivity
命令: adb shell am start -n 包名/类名
这种是显示意图启动
后面的斜杠不是或的意思,就是要两个都写。比如说:
adb shell am start -n com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity
这样子就启动了google浏览器了, 前提是得有哈。
adb发送广播
这个做系统开发比较常用,比如说做一些测试的时候。不需要写代码。
直接发就好了
1 | adb shell am broadcast -a 参数 |
这样子,我们写个广播接收者,然后我们发送一下。
1 | public class TestBroadcast extends BroadcastReceiver { |
注册
1 | <receiver android:name=".test.TestBroadcast"> |
ADB截图
adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png ./
截图,放到特定位置
ADB发送模拟按键
命令: adb shell input keyevent 键码(keyCode)
具体的KeyCode可以去看源码:
android.view.KeyEvent
Home和Back按钮
1 | public static final int KEYCODE_HOME = 3; |
eg: adb shell input keyevent 3