1.端口转发
Android允许我们通过ADB,把Android上的某个端口映射到电脑的某个端口(adb reverse),或者把电脑的某个端口映射到Android系统的某个端口(adb forward)。
举个例子,假设电脑上开启了一个服务,监听的端口为8088。Android手机通过USB连接电脑后,在终端直接执行adb reverse tcp:8088 tcp:8088,然后在手机中访问127.0.0.1:8088,就可以访问到电脑上启动的服务了。
adb forward 时: 电脑是client,手机是server。
adb reverse 时: 电脑是server,手机是client。
adb命令的文档如下:
adb forward [--no-rebind] LOCAL REMOTE
forward socket connection using:
tcp:<port> (<local> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
vsock:<CID>:<port> (remote only)
acceptfd:<fd> (listen only)
adb reverse [--no-rebind] REMOTE LOCAL
reverse socket connection using:
tcp:<port> (<remote> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
2.查看日志
adb logcat [TAG:LEVEL ] [TAG:LEVEL ] ...
TAG:LEVEL 的作用为: 输出标签为TAG的log级别大于LEVEL的日志. 例如:
adb logcat Test:I
注意:
(1)可以指定多个[TAG:LEVEL ]
(2) TAG:S 表示为不输出该标签的日志
(3) [TAG:LEVEL ] 不会影响其他标签的日志, 所以如果要屏蔽其他标签的log请使用 *:S
adb logcat Test:I *:S
(4) 只查看Info级别以上的日志:
adb logcat *:I
3.清空当前日志缓存并重新开始查看log
adb logcat -c && adb logcat
4.将日志输出到文件
adb logcat -f <filename> 将日志输出到文件,例如:
adb logcat -f /sdcard/test.txt
导出当前日志到文件中:
adb logcat -b all -v time -d > a.log
其中-b all代表导出所有种类的日志,-v time表示导出日志中带时间格式。
adb shell bugreport , 打印dumpsys、dumpstate、logcat的输出,用于分析错误。
输出比较多,建议重定向到一个文件中。例如:
adb shell dumpsys > d:\bugreport.log
5.清除app的数据
adb shell pm clear 这里输入包名
6.手机联系人操作
1)查询联系人
adb shell content query --uri content://com.android.contacts/contacts
2)删除联系人
adb shell content delete --uri content://com.android.contacts/contacts/1
7.修改窗口大小和屏幕密度
adb shell wm size 1920x1080
adb shell wm size reset
adb shell wm density 320
adb shell wm density reset
8.包操作
adb shell pm list package
列出所有的应用的包名 (-s:列出系统应用 -3:列出第三方应用 -f:列出应用包名及对应的apk名称及存放位置 -i:列出应用包名及其安装来源)
adb shell pm path 包名
列出对应包名的.apk 的位置
adb shell pm install apk存放路径
安装应用(目标 apk 存放于PC端,用 adb install 安装; 目标 apk 存放于Android设备上,用 pm install 安装)
9.am(ActivityManager)操作
adb shell am start 包名/.aa.bb.Activity (要启动的Activity)
启动一个 Activity (-s先停止目标应用,再启动 -w 等待应用完成启动 -a 启动默认浏览器打开一个网页,例如:adb shell am start -a android.intent.action.VIEW -d https://wp.minicoda.com)
adb shell am monitor
监控 crash 与 ANR
adb shell am force-stop package
结束某包名代表的应用
adb shell am startservice
启动一个服务
若提示失败,可输入命令adb shell am start-foreground-service -n com.test.demo/com.test.demo.ForegroundServiceDemo
即使用start-foreground-service来替换startservice可以解决这个问题。
原因:Android O 推出了Background Execution Limits,减少后台应用内存使用及耗电,一个很明显的例子就是不准后台应用通过startService启动服务。
adb shell am broadcast
发送一个广播
10.向Android设备发送按键事件
adb shell input text 具体内容
发送文本内容,不能发送中文
adb shell input keyevent 按键事件
发送按键事件 例如:adb shell input keyevent KEYCODE_HOME 模拟按下Home键
adb shell input tap 触摸事件的位置
对屏幕发送一个触摸事件 例如:点击屏幕上坐标为 300 300 的位置(adb shell input tap 300 300)
adb shell input swipe
滑动事件 例如:从右往左滑动屏幕。
adb shell input swipe 800 600 100 600
11.截图和录屏
截图命令
adb shell screencap -p /sdcard/screenCapTest.png
录屏命令
screenrecord
4.4以上系统版本新增的录屏命令
adb shell screenrecord /sdcard/screenRecordTest.mp4
执行命令后操作手机,ctrl + c 结束录制,录制结果保存至 sdcard/ 下。
12.其他
1)查看运行进程
adb shell procrank
2)关闭或杀掉进程
adb shell kill 366
其中366代表应用的pid。
3)保留数据和缓存文件,重新安装,升级
adb install -r test.apk
4)卸载app但保留数据和缓存文件
adb uninstall -k test.apk
5)查看目录下的文件大小
adb shell du -sh *
6)查看正在运行的Services
adb shell dumpsys activity services [packageName]
7)查看正在运行的Activity
adb shell dumpsys activity [packageName]
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!