ADB,全名Android Debug Bridge,是Android提供的一个通用的调试工具,是一个C/S架构的命令行工具,通过这个工具,使得我们的PC能够和Android设备来进行通信。
adb包含三个部分:
a. Client端:运行在开发机器中,用来发送adb命令,比如电脑
b. Daemon守护进程:运行在调试设备,比如手机、模拟器中,用来接收并执行adb命令
c. Server端:运行在开发机器中,用来管理Client端和手机端Daemon之间的通信。
当在电脑命令行窗口中输入adb 命令时,会先执行adb客户端,客户端拿到命令之后,会发送给adb服务端,server再将命令传给Daemon,最后在手机上执行。假如在手机上安装一个应用,会有一个返回信息,会将信息传递给adb服务器,adb 在给客户端,最后显示在命令行。
总结:
a.client端将命令发送给server端
b.server端会将命令发送给daemon端
c.daemon端进行执行
d.将执行结果,返回给server端
e.server端将结果再返回给client端
验证adb 是否安装成功
- adb help
- 或者
- adb --help
- 会出现adb的版本和帮助信息
-
查看adb版本
- adb version
-
重启手机
- 重启到 Recovery 模式
- adb reboot recovery
-
- 从 Recovery 重启到 Android
- adb reboot
-
- 重启到 Fastboot 模式
- adb reboot bootloader
-
adb devices : 查看电脑是否连接设备
- #查看连接的设备
- adb devices
- 或者
- adb devices -l
-
- #查看设备连接状态
- adb get-state
-
使用该指令将返回设备状态信息,该状态信息包含三种
以 root 权限运行 adbd
- adb root
-
开启或者关闭服务
- adb start-server:开启adb服务
- adb kill-server:关掉adb服务
-
指定 adb server 的网络端口
- adb -P <port> start-server
-
ADB的默认端口为 5037
adb install :安装
第一种情况:当只有一台设备时
- a. adb install apk路径
- b. adb install -r :覆盖原来安装的软件,并保留数据
- c. adb install-multiple demo1.apk demo2.apk
- d. adb install -t demo1.apk : 如果在安装中,遇到Failure [INSTALL_FAILED_TEST_ONLY installPackageLI],则使用该命令
- e. adb install -d demo.apk :允许版本代码升级
- f. adb install -g demo.apk :授权所有运行时权限
-
第二种情况:当有多台设备时,使用-s 序列号 进行指定设备
- adb -s 序列号 install apk路径
-
adb uninstall :卸载
- #packagename是应用包名
- #包名问开发或自己去查询
- adb uninstall [-k]<packagename>
-
- -k表示卸载应用但保留数据和缓存文件
-
- adb unstall demo.apk
- 卸载设备中的应用,并希望保留配置和缓存文件
- adb -s 序列号 shell pm uninstall -k 包名
-
adb pull : 将移动设备中的文件传送到PC上
- adb pull 移动设备路径 PC路径
-
adb push :将PC中的文件传送到移动设备端
- adb push PC路径 移动设备路径
- adb push PC路径 /sdcard/
-
截图保存到电脑
- adb exec-out screencap -p > sc.png
-
如果 adb 版本较老,无法使用 exec-out 命令,这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法:
先截图保存到设备里:
- adb shell screencap -p /sdcard/sc.png
-
然后将 png 文件导出到电脑
- adb pull /sdcard/sc.png C:\Users\Administrator\Desktop
-
可以使用 adb shell screencap -h 查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:
参数 | 含义 |
---|---|
-p | 指定保存文件为 png 格式 |
-d display-id | 指定截图的显示屏编号(有多显示屏的情况下) |
实测如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要使用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout。
另外一种一行命令截图并保存到电脑的方法:
Linux 和 Windows
- adb shell screencap -p | sed "s/\r$//" > sc.png
-
Mac OS X
- adb shell screencap -p | gsed "s/\r$//" > sc.png
-
这个方法需要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安装目录的 bin 文件夹下也有。如果确实找不到该命令,可以下载 sed for Windows 并将 sed.exe 所在文件夹添加到 PATH 环境变量里。
而在 Mac 下使用系统自带的 sed 命令会报错:
- sed: RE error: illegal byte sequence
-
需要安装 gnu-sed,然后使用 gsed 命令:
- brew install gnu-sed
-
录制屏幕以 mp4 格式保存到 /sdcard:
- adb shell screenrecord /sdcard/filename.mp4
-
需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
如果需要导出到电脑:
- adb pull /sdcard/filename.mp4
-
可以使用 adb shell screenrecord --help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:
参数 | 含义 |
---|---|
–size WIDTHxHEIGHT | 视频的尺寸,比如 1280x720,默认是屏幕分辨率。 |
–bit-rate RATE | 视频的比特率,默认是 4Mbps。 |
–time-limit TIME | 录制时长,单位秒。 |
–verbose | 输出更多信息。 |
注:需要 root 权限。
- adb shell
- su
- cat /data/misc/wifi/*.conf
-
注:需要 root 权限。
- adb shell
- su
- date -s 20160823.131500
-
表示将系统日期和时间更改为 2016 年 08 月 23 日 13 点 15 分 00 秒。
注:需要 root 权限。
开启 WiFi:
- adb root
- adb shell svc wifi enable
-
关闭 WiFi:
- adb root
- adb shell svc wifi disable
-
若执行成功,输出为空;若未取得 root 权限执行此命令,将执行失败,输出 Killed。
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
简单用法:
- adb shell monkey -p <packagename> -v 500
-
表示向 指定的应用程序发送 500 个伪随机事件。
- #查看日志,ctrl+c结束
- adb logcat
-
- #如果使用logcat不指定输出哪个缓冲区的日志,则默认输出main和system的日志
- #如果要指定,则
- adb logcat -b
- #例如指定main缓冲区:adb logcat -b main
-
- #指定输出到文件(格式自己搞)
- adb logcat -b main > d:\log.txt
-
- adb logcat -c:清理日志
- 注意:logcat是实时日志
-
- adb logcat >/Users/xxxx/demo.log
- 或者
- adb -s 序列号 logcat >/Users/xxxx/demo.log
-
可查看手机四个缓冲区日志, 包括radio, system, main, event
可以看到main和system的日志信息
日志等级,优先级从低到高分为以下几种:
- V——Verbose(最低等级,开发调试中的一些详细信息,仅在开发中使用,不可再发布产品中)
-
- D——Debug(调试,用于调试的信息,可以在发布产品中关闭,比较常见)
-
- I——info(信息,一般提示性的信息)
-
- W——Warning(警告)
-
- E——Error(错误,已经出现可影响运行的错误,比如应用crash时输出的日志)
-
- 在 E级别中可以搜索这个关键字:fatal exception
-
- ANR全名Application Not Responding,也就是应用无响应当操作在一段时间内系统无法处理时,系统层面会弹出ANR对话框
-
- 在日志中查询:ANR in
-
- 在查到ANR in 之后 上一行会有
-
查看日志常用的参数
- adb logcat -v time 打印时间
- adb logcat -v color 使用不同的颜色来显示每个优先级
- adb logcat -f <filename> 将日志输出到文件(文件存在手机上),例如,adb logcat -f /sdcard/log.log
- adb logcat > log.log 保存日志到PC上
- adb logcat -c 清理已存在的日志
- adb logcat *:W 打印Warning以上级别的日志
- adb logcat ActivityManager:D '*:S' 过滤tag 为ActivityManager,level为Debug及以上级别的日志(S表示无记载silent,最高优先级,绝不输出任何内容)
-
输出更多日志内容
- #包含logcat日志、功耗、cpu等信息日志
- adb bugreport
-
- adb connect ip:port
-
- adb tcp:port tcp:port
-
- adb reboot bootloader
-
Android系统是基于Linux系统开发的,支持常见的Linux命令,这些命令都保存在手机/system/bin文件中,shell 是 linux 系统的字符交互界面。
- $ adb shell ls
- 或者
- $ adb shell
- ls
-
- # -s 进入指定设备shell
- adb -s 127.0.0.1:62001 shell
-
- #退出adb shell
- exit
-
- #进入adb shell后有两种状态显示:#代表有root权限,$代表没有root权限
- root@android:/ #
- shell@mx4:/ $
-
- 如果在操作过程中出现没有权限的问题,则需要切换root用户
- su root
-
备注:root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限。一些需要root权限的应用,譬如广告阻挡,卸载系统预装App是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root。
- adb shell ps
-
- adb shell top
-
- adb shell df
-
- adb shell settings get secure android_id
-
- #获取手机型号
- adb shell getprop | grep product
- adb shell getprop ro.product.model
-
- #获取手机序列号
- adb get-serialno
-
- #获取系统版本号
- adb shell getprop ro.build.version.release
-
首先我们先看一下使用adb查看Android手机信息的指令
- #获取手机名称
- NAME = 'adb shell getprop ro.product.model'
- #获取手机版本
- VERSION = 'adb shell getprop ro.build.version.release'
- #获取手机厂商
- PRODUCER = 'adb shell getprop ro.product.brand'
-
如果我们忘记具体系统属性的名字,我们可以使用grep进行过滤,比如:
- adb shell getprop | grep product
-
那么我们在用python写自动化测试的时候应该这样使用:
- import os
-
- deviceName = os.popen('adb shell getprop ro.product.model').read()
- print(deviceName)
- platformVersion = os.popen('adb shell getprop ro.build.version.release').read()
- print(platformVersion)
- device = os.popen('adb shell getprop ro.product.name ').read()
- print(device)
-
这样我们就实现了自动化获取手机信息
- adb shell dumpsys battery
-
- 描述信息:
- Current Battery Service state: // 当前电池服务状态
- AC powered: false // 交流供电,false表示没有使用AC电源供电
- USB powered: true // true表示使用USB电源供电
- Wireless powered: false // false表示没使用无线电源
- Max charging current: 500000 // 最大充电电流
- Max charging voltage: 4713000 // 最大充电电压
- Charge counter: 29000 // 电荷计数器??
- status: 2 // 电池状态: 2:正充电;3:没插充电器;4:不充电; 5:电池充满
- health: 2 // 电池健康状态:2:良好; 3:过热; 4:无用的; 5:超压; 7:温度过低
- present: true // 电池是否安装在机身
- level: 42 // 电池百分比
- scale: 100 //满电量时电池百分比为100%(不确定是否正确)
- voltage: 3868 // 电池电压
- temperature: 330 // 电池温度,单位是0.1摄氏度
- technology: Li-ion // 电池类型为锂电池
-
- adb shell dumpsys battery set ac/usb/wireless 1
-
- adb shell dumpsys battery set status 2
-
- adb shell dumpsys battery set status 1
-
- adb shell dumpsys battery set level 100
-
- adb shell dumpsys battery unplug
-
- adb shell dumpsys battery reset
-
获取整个设备的电量消耗信息: adb shell dumpsys batterystats | more
获取某个apk的电量消耗信息: adb shell dumpsys batterystats com.Package.name | more
由于输出信息太多,可使用命令more 或者 less 分篇查看
电量监控脚本
使用adb命令查询电量信息,使用split分隔,取出需要的信息
- # 通过adb devices 查看手机device
- device=''
- # 获取当前时间
- date_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
- # adb命令查询电量
- adb_msg = os.popen('adb -s %s shell dumpsys battery'%device)
- phone_msg = adb_msg.buffer.read().decode(encoding='utf-8')
- print('phone_msg:%s'%phone_msg)
-
- # 分隔返回的信息,取出是否充电状态
- status = (phone_msg.split('status:')[1]).split('health:')[0].strip()
- status_ch = '是' if status == '2' else "否"
- # 分隔返回的信息,取出电量
- level = (phone_msg.split('level:')[1]).split('scale:')[0].strip()
-
- print('status:%s,status_ch:%s,level:%s'%(status,status_ch,level))
-
- content = "当前时间:%s, 手机编号:%s, 是否在充电:%s, 剩余电量:%s %s \n"%(date_now,p_num,status_ch,level,"%")
- print(content)
-
使用adb命令查询内存信息,使用split分隔出所需要的信息,添加到txt文档,循环输出
- // An highlighted block
- import os,time
- now = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime()) # 获取当前时间
- class mem():
- while True:
- now2 = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime()) # 获取当前时间
- a = os.popen('adb shell dumpsys meminfo com.cnsj.cuiniaopad')
- b = a.buffer.read().decode(encoding='utf8')
- meminfo = float((((b.split('TOTAL ')[1]).split('App Su')[0]).split(' ')[0]))
- MB = meminfo / 1024
- if 'No process found for: com.cnsj.cuiniaopad' in b:
- break
- # print(meminfo)
- # print(b)
- c = os.popen('adb shell dumpsys meminfo')
- d = c.buffer.read().decode(encoding='utf8')
- e = d.split('Other mtrack')[1]
- zong = (e.split('Total RAM: ')[1]).split('K ')[0]
- sheng = e.split('Free RAM: ')[1].split('K ')[0]
- yong = e.split('Used RAM: ')[1].split('K ')[0]
- qita = (e.split('Lost RAM: ')[1].replace(' ', '')).split('K')[0]
- zong1 = float(zong.replace(',', '')) / 1024
- sheng1 = float(sheng.replace(',', '')) / 1024
- yong1 = float(yong.replace(',', '')) / 1024
- qita1 = float(qita.replace(',', '')) / 1024
-
-
- jilu = '当前时间:' + now2 + ' 占用系统内存:%.2fMB 总内存:%.2fMB 剩余内存:%.2fMB 可用内存:%.2fMB 其他内存:%.2fMB' % (MB, zong1, sheng1, yong1, qita1)
- print(jilu)
-
- data = open(r'D:\Test_python\automation1_0\Pad0_2\log_screen_html\meminfo' + '/' + now + r"_meminfo.txt", 'a+',encoding="utf-8")
- print(jilu,file=data)
- time.sleep(10)
-
- adb shell dumpsys wifi
- 由于该指令输出的信息很多,所以在此加入参数,当输出信息在显示满一页的时候就暂停输出
- 如果想再继续输出,则需要按空格键继续显示下页内容。按“Q”停止显示后续输出信息。
- adb shell dumpsys wifi | more
-
- adb shell dumpsys power
- 含义:可以判断手机是否处于锁屏状态
-
- 根据关键信息进行查询,仅输出屏幕关闭时间的设置信息
- windows设置:
- adb shell dumpsys power | findstr "mScreenOffTimeoutSetting"
- Linux设置:
- adb shell dumpsys power | grep "mScreenOffTimeoutSetting"
-
- #查看当前活动的包的信息
- adb shell dumpsys activity
-
- #查看正在运行的包名
- adb shell dumpsys window | findstr mCurrentFocus
-
- 这个也行(查到包名和当前的活动):
- adb shell dumpsys activity | find "mFocusedActivity"
-
- #获取com.eg.android.AlipayGphoneRC应用的耗电情况
- adb shell dumpsys batterystats com.eg.android.AlipayGphoneRC
-
- adb shell dumpsys window displays
-
- adb shell dumpsys iphonesubinfo
-
- $ adb shell dumpsys telephony.registry
-
(1)“mCallState”:表示呼叫状态。0,表示待机;1,表示来电尚未接听;2,表示电话占线。
(2)“mCallIncomingNumber”:表示最近一次来电的电话号码。
(3)“mServiceState”:表示服务状态。0,表示正常使用;1,表示电话没有连接任何电信运营网络;2,表示只能拨打紧急呼叫号码;3,表示电话已关机。
(4)“mSignalStrength”:表示信号强度信息。
(5)“mMessageWaiting”:表示是否在等待无线电信息。
(6)“mCallForwarding”:表示是否启用了呼叫转移。
(7)“mDataActivity”:表示无线数据通话情况。0,表示未通话;1,表示正在接收IP PPP信号;2,表示正在发送IP PPP信号;3,表示正在发送和接收IP PPP信号。
(8)“mDataConnectionState”:表示无线数据连接情况。0,表示无数据连接;1,表示正在创建数据连接;2,表示已连接;3,表示挂起状态,已经创建好连接,但IP数据通信暂无法使用。
(9)“mDataConnectionPossible”:表示是否有数据连接。
(10)“mDataConnectionReason”:表示数据连接的原因。
(11)“mDataConnectionApn”:表示APN(Access Point Name),接入点名称。
(12)“mDataConnectionLinkProperties”:表示数据连接的链路属性。
(13)“mDataConnectionLinkCapabilities”:表示数据链路连接的能力。
(14)“mCellLocation”:表示基站的相关信息。
(15)“registrations”:表示登记记录计数。
1)查看当前系统CPU使用情况:
- # 获取的是一段时间的均值
- adb shell dumpsys cpuinfo
-
2)进程占用情况
- adb shell top
- adb shell top | grep "包名" —— 查看某个包的一些性能
- adb shell top -d 1 |grep "包名"
-
3)内存使用情况
- adb shell dumpsys meminfo
-
获取CPU信息
- adb shell cat /proc/cpuinfo
-
clflush:64 CPU是64位的处理器
processor:1 逻辑处理器的ID
cpu MHz cpu的主频
physical id : 0 物理cpu的ID (如果都是0表示就1个物理cpu)
cpu cores cpu的逻辑个数
model name cpu型号
查看cpu运行情况
- #-t显示进程名称;-s按指定行排序;-n在退出前刷新几次;-d刷新间隔;-m显示最大数量
- adb shell top -m 10 -s cpu
-
- am 全称为Activity Manager ,可以使用am去模拟各种系统的行为
- adb shell am start com.taobao.taobao/com.taobao.tao.TBMainActivity
-
- 强制停止应用
- adb shell am force-stop <packagename>
-
- 启动app
- #com.ss.android.ugc.aweme:抖音包名
- #.account.white.login.DYLoginActivity:登录活动
- adb shell am start -n com.ss.android.ugc.aweme/.account.white.login.DYLoginActivity
-
获取启动时间 adb shell am start -W 包名/界面名
- ➜ ~ adb shell am start -W com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity
- Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity }
- Status: ok
- Activity: com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity
- ThisTime: 289
- TotalTime: 289
- WaitTime: 311
- Complete
-
- 以毫秒为单位
- 点击图标然后松开,这个时间是系统时间(分配内存和CPU的时间),应用application等待资源启动的时间
- ThisTime:为界面启动耗时
- TotalTime:应用自身启动耗时=ThisTime + 应用application等资源启动时间
- WaitTime:系统启动耗时=TotalTime + 系统资源启动时间
-
pm全称为package manager ,可以使用pm命令模拟Android行为或者查询设备上的应用。
- 列出所有的包名
- adb shell pm list packages
-
- 列出通过第三方安装的包
- adb shell pm list packages -3
-
- 包名包含某字符串的应用,比如要查看包名包含字符串 huawei 的应用列表
- adb shell pm list packages huawei
-
- #列出系统apk路径和包名
- adb shell pm list package -s
-
- 找到 apk 的位置
- $ adb shell pm path com.tence01.mm
- package:/data/app/com.tence01.mm-1.apk
-
- #清除应用数据及缓存
- adb shell pm clear 包名
-
- adb shell wm size
-
- adb shell wm density
-
注: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。
修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。
- adb shell wm size 480x1024
-
表示将分辨率修改为 480px * 1024px。
- adb shell wm size reset
-
- adb shell wm density 160
-
表示将屏幕密度修改为 160dpi。
- adb shell wm density reset
-
- adb shell wm overscan 0,0,0,200
-
四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。
- adb shell wm overscan reset
-
- adb shell settings put global adb_enabled 0
-
用命令恢复不了了,毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。
去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」。
- setprop persist.internet.adb.enable 1
-
该方法当次设置有效,重启后无效
- setprop service.adb.tcp.port 5555
- adb push init.rc sdcard
-
该方法是设置后,放到手机int.rc文件中,但是现在 The init.rc script resides in within the RAMDisk attached to the boot image. 所有重启也是无效的。
提取手机boot.img,修改default.prop中的配置重新打包刷回,应该是可以的,但是太折腾。
最佳方案:
- setprop persist.adb.tcp.port 5555
-
应该就是在 /data/property目录下创建了persist.adb.tcp.port文件,内容为端口号,需要su。手机重启后,adb无线调试自动开启。
相关文档:https://developer.android.com/reference/android/view/KeyEvent
1.打开“指针位置” 设置
设置——开发者选项——指针位置
2.执行 adb shell input 命令
- C:\Users\enmonster>adb shell input
- Usage: input [<source>] <command> [<arg>...]
-
- The sources are:
- dpad
- keyboard
- mouse
- touchpad
- gamepad
- touchnavigation
- joystick
- touchscreen
- stylus
- trackball
-
- The commands and default sources are:
- text <string> (Default: touchscreen)
- keyevent [--longpress] <key code number or name> ... (Default: keyboard)
- tap <x> <y> (Default: touchscreen)
- swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
- draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
- press (Default: trackball)
- roll <dx> <dy> (Default: trackball)
- tmode <tmode>
-
- - 模拟点击事件
- adb shell input tap x坐标 y坐标
- adb shell input tap 528 1539
-
- - 输入文本
- 首先需要把光标移到输入框,然后执行以下命令
- adb shell input text zengzengzeng
-
- - 模拟滑动事件
- adb shell swip <起点x> <起点y> <终点x> <终点y> <滑动时长>
- adb shell input swipe 528 1539 528 1300 2000
- 2000为滑动时间,单位是毫秒
-
- - 返回键
- adb shell input keyevent 4
-
- - 返回home键(置应用于后台)
- adb shell input keyevent 3
-
- - 音量放大
- adb shell input keyevent 24
-
- - 音量缩小
- adb shell input keyevent 25
-
adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能
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 shell ifconfig | grep Mask
-
在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:
- adb shell ifconfig wlan0
-
如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):
- adb shell netcfg
-
- adb shell cat /sys/class/net/wlan0/address
-
输出示例:
- f8:a9:d0:17:42:4d
-
这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的 adb shell netcfg 命令来查看。
设备的更多硬件与系统属性可以通过如下命令查看:
- adb shell cat /system/build.prop
-
启用 SELinux
- adb root
- adb enable-verity
-
禁用 SELinux
- adb root
- adb shell setenforce 0
-
启用 dm_verity
- adb root
- adb enable-verity
-
禁用 dm_verity
- adb root
- adb disable-verity
-