adb shell:
C:\Users\chenhong>cd ADB
C:\Users\chenhong\ADB>adb
C:\Users\chenhong\ADB>adb devices
List of devices attached
YCYNW18109016358 device
进入shell
C:\Users\chenhong\ADB>adb -s YCYNW18109016358 shell
HWFIG-H:/ $
抓取log
C:\Users\chenhong\ADB>adb -s YCYNW18109016358 logcat >logcat.txt
^C
C:\Users\chenhong\ADB>
Andriod系统日志分为两部分,底层的Linux内核日志输出到/proc/kmsg,Android的日志输出到/dev/log。
[adb] logcat [<option>] ... [<filter-spec>] ...
按级别过滤日志(优先级):
V —— Verbose(最低,输出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不输出)
按级别过滤日志则会将该级别及以上的日志输出。
比如命令:
adb logcat *:W
会将Warning、Error、Fatal和Silent日志输出。
按tag和级别过滤日志
adb logcat ActivityManager:I MyApp:D *:S
日志格式:
可以用adb logcat -v <format>选项指定日志输出格式
日志支持以下几种<format>:
brief 默认格式, <priority>/<tag>(<pid>): <message>
process格式, <priority>(<pid>) <message>
tag格式, <priority>/<tag>: <message>
raw格式,<message>
time格式,<datetime> <priority>/<tag>(<pid>): <message>
示例: 08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
threadtime格式,<datetime> <pid> <tid> <priority> <tag>: <message>
示例: 08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
long格式, [ <datetime> <pid>:<tid> <priority>/<tag> ]
<message>
示例: [ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine]
Disconnected process message: 10, size: 0
指定格式可与上面的过滤同时使用,如 adb logcat -v long ActivityManager:I *:S
清空日志
adb logcat -c
内核日志
adb shell dmesg
adb获取包名和Activity的方法:
adb shell dumpsys activity | find "mFocusedActivity"
adb logcat -d -s ActivityManager
安装apk
adb -s <Devices SN> install <apk name>
adb install [-lrtsdg] <path_to_apk>
adb install实际分三步完成:
1. push apk 文件到/data/local/tmp
2. 调用pm install 安装
3. 删除/data/local/tmp下的对应apk文件
覆盖安装
adb install -r <apk name>
卸载apk
adb uninstall <apk name>
从手机中拷贝文件到电脑:local 地址为空,则默认拷贝到电脑当前目录下
adb pull /sdcard/crime.apk
adb pull <remote> [local]
把电脑中的文件拷贝到手机中:
adb push [local] <remote>
adb push crime.apk /sdcard/data/data
设备上的文件路径普通权限可能无法直接写入,如果你的设备已经root过,可以先adb push /path/on/pc /sdcard/filename,
然后adb shell 和su在adb shell 里获取root权限后,cp /sdcard/filename /path/on/device.
清楚app 数据
adb shell pm clear <apk name>
adb shell pm clear com.example.packageneme
查看APP名称,-f 显示APP 路径:
adb shell pm list packges -f
查看系统应用:
adb shell pm list packages -s
查看第三方应用:
adb shell pm list packages -3
过滤查询
adb shell pm list packages | grep mazhuang
向屏幕输入信息:
adb shell input text "insert%stext%shere"
(%s表示空格)
模拟屏幕点击事件:
adb shell input tap 500 1450
(500,1450)表示屏幕上的坐标
模拟手势滑动事件:
adb shell input swipe 100 500 100 1450 100
表示从屏幕坐标(100,500)开始,滑动到(100,1450)结束,整个过程耗时100ms
模拟长按操作,两个相同的坐标,耗时超过500ms
adb shell input swipe 100 500 100 500 500
模拟点按实体按钮:
adb shell input keyevent <keycode>
增加音量
adb shell input keyevent 24
降低音量
adb shell input keyevent 25
静音
adb shell input keyevent 164
25是在AOSP源码中的KeyEvent类里面定义的一个事件常量。该类定义了将近300个事件常量。
keycode 含义
3 HOME键
4 返回键
5 打开拨号应用
6 挂断电话
24 增加音量
25 降低音量
26 电源键
27 拍照(需要在相机应用里)
64 打开浏览器
82 菜单键
85 播放/暂停
86 停止播放
87 播放下一首
88 播放上一首
122 移动光标到行首或列表顶部
123 移动光标到行末或列表底部
126 恢复播放
127 暂停播放
164 静音
176 打开系统设置
187 切换应用
207 打开联系人
208 打开日历
209 打开音乐
210 打开计算器
220 降低屏幕亮度
221 提高屏幕亮度
223 系统休眠
224 点亮屏幕
231 打开语音助手
276 如果没有wakelock则让系统休眠
adb am(Activity Manager)命令启动一个APP、启动Activity、启动广播和服务等等:
启动Activity:
adb shell am start com.example.crime/com.example.crime.MainActivity
启动带参数的:
adb shell am start com.example.crime/com.example.crime.SecondActivity -e argus_name QiuShui
启动隐式引用:(启动谷歌浏览器打开谷歌网址)
adb shell am start -a "android.intent.action.VIEW" -d "https://www.google.com"
-a表示action
-c表示category
-d表示data_uri
-e表示额外Key-Value信息
发送广播和启动服务
adb shell am broadcast [options] <INTENT>
adb shell am broadcast -a "our.specified.action"
手机重启
adb shell am broadcast -a andriod.intent.action.BOOT_COMPLETED
只向广播BOOT_COMPLETED
adb shell am broadcast -a andriod.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReciver
系统预定义广播:
android.net.conn.CONNECTIVITY_CHANGE 网络连接发生变化
android.intent.action.SCREEN_ON 屏幕点亮
android.intent.action.SCREEN_OFF 屏幕熄灭
android.intent.action.BATTERY_LOW 电量低,会弹出电量低提示框
android.intent.action.BATTERY_OKAY 电量恢复了
android.intent.action.BOOT_COMPLETED 设备启动完毕
android.intent.action.DEVICE_STORAGE_LOW 存储空间过低
android.intent.action.DEVICE_STORAGE_OK 存储空间恢复
android.intent.action.PACKAGE_ADDED 安装了新的应用
android.net.wifi.STATE_CHANGE WiFi连接状态发生变化
android.net.wifi.WIFI_STATE_CHANGED WiFi状态变为启用/关闭/正在启动/正在关闭/未知
android.intent.action.BATTERY_CHANGED 电池电量发生变化
android.intent.action.INPUT_METHOD_CHANGED 系统输入法发生变化
android.intent.action.ACTION_POWER_CONNECTED 外部电源连接
android.intent.action.ACTION_POWER_DISCONNECTED 外部电源连接断开
android.intent.action.DREAMING_STARTED 系统开始休眠
android.intent.action.DREAMING_STOPPED 系统停止休眠
android.intent.action.WALLPAPER_CHANGED 壁纸发生变化
android.intent.action.HEADSET_PLUG 插入耳机
android.intent.action.MEDIA_UNMOUNTED 卸载外部介质
android.intent.action.MEDIA_MOUNTED 挂载外部介质
android.intent.action.POWER_SAVE_MODE_CHANGED 省电模式开启
启动一个服务
adb shell am startservice "com.example.crime/com.example.crime.MyService"
停止Service
adb shell am stopservice [options] <INTENT>
强制停止应用
adb shell am force-stop <packagename>
停止360安全卫士的一切进程与服务
adb shell am force-stop com.qihoo360.mobilesafe
收紧内存
adb shell am send-trim-memory <pid> <level>
pid : 进程PID
level : HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
adb shell am send-trim-memory 12345 RUNNING_LOW
查看dumpsys 能提供查询信息的服务:
adb shell service list
查看设备型号:
adb shell gerprop ro.product.model
查看电池信息
adb shell dumpsys battery
查看activity 信息
adb shell dumpsys activity
adb shell dumpsys activity activities
adb shell dumpsys activity permissions
adb shell dumpsys activity processes
adb shell dumpsys activity services
查看应用详细信息:
adb shell dumpsys package <package name>
查看应用安装路径:
adb shell pm path <pachage name>
grep过滤查询
adb shell dumpsys activity activities | grep mFocusedActivity
查询进程
adb shell dumpsys activity p <packagename> | grep -i ‘ProcessRecord’ | grep -i 'PID’
查询服务
adb shell dumpsys activity s <package name> | grep -i ‘ServiceRecord’
查询内存使用情况
adb shell dumpsys meminfo <package name>
屏幕分辨率
adb shell wm size
屏幕密度
adb shell wm density
输出示例:Physical density: 420
显示屏参数
adb shell dumpsys window displays
屏幕截图
老版:adb shell screencap /sdcard/screen1.png
新版:adb exec-out screencap -p > sc.png
录制屏幕视频(Andriod 4.4以上):
adb shell screenrecord /sdcard/demo1-0623.png
(录制时可选参数:--size设置视频大小,--time-limit设置最大录制时长等)
需要停止按Ctrl+C,默认录制时间和最长录制时间都是180秒。
如果需要导出到电脑: adb pull /sdcard/filename.mp4
查看进程信息
adb shell ps
查看CPU实时使用情况:
adb shell top
查看进程UID:
1. adb shell dumpsys package <packagename> | grep userId=
2. adb shell cat /proc/<pid>/status | grep Uid
其他常用命令:
命令 功能
cat 显示文件内容
cd 切换目录
chmod 改变文件的存取模式/访问权限
df 查看磁盘空间使用情况
grep 过滤输出
kill 杀死指定PID的进程
ls 列举目录内容
mount 挂载目录的查看和管理
mv 移动或重命名文件
ps 查看正在运行的进程
rm 删除文件
top 查看进程的资源占用情况
以root权限运行adbd
adb root
adb shell
恢复为非root权限
adb unroot
android_id
adb shell settings get secure andriod_id
IMEI
adb shell dumpsys iphonesubinfo (Android 4.4以下版本)
adb shell
su
service call iphonesubinfo 1 (Android 5.0以上版本)
Android系统版本
adb shell getprop ro.build.version.release
IP地址
adb shell ifconfig | grep Mask
输出示例:
inet addr:10.130.245.230 Mask:255.255.255.252
inet addr:127.0.0.1 Mask:255.0.0.0
连着WiFi,查看局域网IP
adb shell ifconfig wlan0
查看网络连接信息:网络连接名称、启用状态、IP地址、MAC地址
adb shell netcfg
MAC 地址
adb shell cat /sys/class/net/wlan0/address
CPU信息
adb shell cat /proc/cpuinfo
内存信息
adb shell cat /proc/meminfo
更多硬件与系统属性
adb shell cat /system/build.prop
adb shell getprop <属性名>
属性名 含义
ro.build.version.sdk SDK版本
ro.build.version.release Android系统版本
ro.build.version.security_patch Android安全补丁程序级别
ro.product.model 型号
ro.product.brand 品牌
ro.product.name 设备名
ro.product.board 处理器型号
ro.product.cpu.abilist CPU支持的abi列表
persist.sys.isUsbOtgEnabled 是否支持OTG
dalvik.vm.heapsize 每个应用程序的内存上限
ro.sf.lcd_density 屏幕密度
修改设置
主要是通过settings命令修改/data/data/com.android.providers.settings/databases/settings.db里存放的设置值
重启设备: adb reboot
修改分辨率:adb shell wm size 480x1024
恢复原分辨率: adb shell wm size reset
修改屏幕密度: adb shell wm density 160
恢复原屏幕密度: adb shell wm density reset
修改显示区域:adb shell wm overscan 0,0,0,200
恢复原显示区域: adb shell wm overscan reset
关闭USB调试模式: adb shell settings put global adb_enabled 0
恢复调试模式: 手机上手动恢复
允许/禁止访问非SDK API:
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
状态栏和导航栏的显示隐藏:
adb shell settings put global policy_control <key-values>
示例: adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
重新挂载系统system分区:
adb shell
su
mount
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
查看连接过的WiFi密码:
adb shell
su
cat /data/misc/wifi/*.conf
设置系统日期和时间
adb shell
su
date -s 20160823.131500
重启手机
adb reboot
检测设备是否已root:
adb shell
su
此时命令提示符是$则表示没有root权限,是#则表示已root
使用Monkey进行压力测试
Monkey可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
adb shell monkey -p <packagename> -v 500
开启/关闭WiFi:
adb root
adb shell svc wifi enable
adb root
adb shell svc wifi disable
刷机相关命令
重启到Recovery模式: adb reboot recovery
从Recovery重启到Android: adb reboot
重启到Fastboot模式: adb reboot bootloader
通过sideload更新系统:
1. 重启到Recovery模式:adb reboot recovery
2. 在设备的Recovery界面上操作进入Apply update-Apply for ADB
3. 通过adb上传和更新系统:adb sideload <path-to-update.zip>
安全相关命令
启用/禁用SELinux:
adb root
adb shell setenforce 1
adb root
adb shell setenforce 0
启用/禁用dm_verity
adb root
adb enable-verity
adb root
adb disable-verity
启动server默认连接端口5037:
adb -P <port> start-server
无线连接设备:(设备和电脑在同一个局域网,在端口5555监听TCP/IP连接)
adb tcpip 5555
adb connect <device-ip-address>
或安装终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
再连接设备IP
adb connect <device-ip-address>
断开无线连接:
adb disconnect <device-ip-address>
---------------------------------------------
几个系统课程:
Docker应用与实战_共39课时-51CTO学院
https://edu.51cto.com/course/18073.html
Docker快速入门视频课程(通俗易懂)_共23课时-51CTO学院
https://edu.51cto.com/course/14479.html
Kubernetes/K8s入门与进阶实战_共69课时-51CTO学院
https://edu.51cto.com/course/12537.html