pull 到电脑的当前路径下
push 到安卓系统文件路径
查看sdcard剩余存储空间 检查文件系统的磁盘空间占用情况。
adb shell df
格式:df [选项] 说明:df命令可显示所有文件系统对I节点和磁盘块的使用情况。
命令中各个选项的含义:
df -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统。
df -h:以容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。
df -i:显示i节点信息,而不是磁盘块。
df -t:显示各指定类型的文件系统的磁盘空间使用情况。
df -x:列出不是某一指定类型文件系统的磁盘空间使用情况。
df -T:显示文件系统类型。
df 以512字节为单位
df –k 以1024字节为单位.
adb logcat 命令,这个命令会输出Log的格式为:
日志时间,进程号,线程号,Log级别,TAG(标签),Log内容
感谢其他作者:主干来源简书作者;ps命令部分 来自简书
shell 是(壳)交互,例如:你用Windows系统连接安卓手机,但是你不能直接通过Windows命令操作 Android系统
adb 命令是什么?adb的全称为Android Debug Bridge.是android司机经常用到的工具.
adb devices -l 查看连接到pc设备的手机 序列号、型号、名称、传输id,然后通过:adb -s <串列号>shell 指定设备,什么时候使用这个命令,当一个电脑连接多个手机时,分别操作:如下图序列号是33301995 。就是说:当多手机共同连接你的pc时,你想要操作手机时,先告诉电脑你选的那个序列号,如果只有一个设备,不需要指定,就是默认的;操作如下
如果 grep不是内部或外部命令,grep是Linux系统窗口的查找命令,说明 不是在 bash窗口或者 虚拟的Linux环境的窗口 比如Cygwin;这样就只好用 Windows 的 findstradb install :将电脑上的apk包安装到手机上
格式:adb install -参数 "路径下\包名" 注意命令间的一个空格,参数可省略,参数起到权限和强制安装的作用,如果你的手机,权限比较放开了,不加参数也可以。因地制宜!
例如:adb install -t C:\Program Files\ss.apk 没加双引好可能会报错,提示找不到路径
例如:adb install -t "C:\Program Files\ss.apk"
官方参数解释 -l: forward lock application、-r: replace existing application、-t: allow test packages、-i: specify the installer package name、-s: install application on sdcard、-f: install application on internal flash、-d: allow version code downgrade (debuggable packages only)、-p: partial application install、-g: grant all runtime permissions、-S: size in bytes of entire session
pc连接手机后,如何进入 手机,输入adb shell 。如下;进入root,需要先 adb root
如果fiddler来不及修改数据,就用adb pull 下来 里面network 的数据,这里就是网络云控配置的 数据 ,pull命令 需要root手机;华丽分割线,前面我还没写完,后面copy其他作者的和自己补充的,统一补全,方便Crtl+F查找
一. 基本指令
进入指定设备 adb -s serialNumber shell (注解:serialNumber 是序列号 见第一张图)
查看版本 adb version
查看日志 adb logcat
查看设备 adb devices
连接状态 adb get-state
启动ADB服务 adb start-server
停止ADB服务 adb kill-server
电脑推送到手机 adb push local remote
手机拉取到电脑 adb pull remote local
二. adb shell下的am 与 pm 与 ps
注:am和pm和ps命令必须先进入shell(先输入 adb shell) 才能使
am全称activity manager,可以启动Service、Broadcast,杀进程,监控等功能你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。
启动app :am start -n {packageName}/.{activityName}
杀app的进程 :am kill
强制停止一切:am force-stop
启动服务:am startservice
停止服务: am stopservice
打开简书 :am start -a android.intent.action.VIEW -d http://www.jianshu.com/
拨打10086 :am start -a android.intent.action.CALL -d tel:10086
介绍adb shell中一个很重要的命令pm(Package Manager),这个命令主要用于获取和安装在 Android 设备上的应用信息
windows PC 查找 :findstr -------------- linux PC 查找:grep
adb shell pmpm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
adb shell pm list package 列出所有应用 adb shell pm list package -3 列出第三方应用 adb shell pm list instrumentation 列出所有测试包pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm list libraries
pm list users
pm path PACKAGE
pm dump PACKAGE
pm install [-lrtsfd] [-i PACKAGE] [PATH]
pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]
pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]
pm install-commit SESSION_ID
pm install-abandon SESSION_ID
pm uninstall [-k] [--user USER_ID] PACKAGE
pm set-installer PACKAGE INSTALLER
pm clear [--user USER_ID] PACKAGE
pm enable [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable-user [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable-until-used [--user USER_ID] PACKAGE_OR_COMPONENT
pm hide [--user USER_ID] PACKAGE_OR_COMPONENT
pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT
pm grant PACKAGE PERMISSION
pm revoke PACKAGE PERMISSION
pm set-install-location [0/auto] [1/internal] [2/external]
pm get-install-location
pm set-permission-enforced PERMISSION [true|false]
pm trim-caches DESIRED_FREE_SPACE
pm create-user [--profileOf USER_ID] [--managed] USER_NAME
pm remove-user USER_ID
pm get-max-users
官方英文描述
pm list packages: prints all packages, optionally only
those whose package name contains the text in FILTER. Options:
-f: see their associated file.
-d: filter to only show disbled packages.
-e: filter to only show enabled packages.
-s: filter to only show system packages.
-3: filter to only show third party packages.
-i: see the installer for the packages.
-u: also include uninstalled packages.
pm list permission-groups: prints all known permission groups.
pm list permissions: prints all known permissions, optionally only
those in GROUP. Options:
-g: organize by group.
-f: print all information.
-s: short summary.
-d: only list dangerous permissions.
-u: list only the permissions users will see.
pm list instrumentation: use to list all test packages; optionally
supply <TARGET-PACKAGE> to list the test packages for a particular
application. Options:
-f: list the .apk file for the test package.
pm list features: prints all features of the system.
pm list users: prints all users on the system.
pm path: print the path to the .apk of the given PACKAGE.
pm dump: print system state associated with the given PACKAGE.
pm install: install a single legacy package
pm install-create: create an install session
-l: forward lock application
-r: replace existing application
-t: allow test packages
-i: specify the installer package name
-s: install application on sdcard
-f: install application on internal flash
-d: allow version code downgrade
-p: partial application install
-S: size in bytes of entire session
pm install-write: write a package into existing session; path may
be '-' to read from stdin
-S: size in bytes of package, required for stdin
pm install-commit: perform install of fully staged session
pm install-abandon: abandon session
pm set-installer: set installer package name
pm uninstall: removes a package from the system. Options:
-k: keep the data and cache directories around after package removal.
pm clear: deletes all data associated with a package.
pm enable, disable, disable-user, disable-until-used: these commands
change the enabled state of a given package or component (written
as "package/class").
pm grant, revoke: these commands either grant or revoke permissions
to applications. Only optional permissions the application has
declared can be granted or revoked.
pm get-install-location: returns the current install location.
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media
pm set-install-location: changes the default install location.
NOTE: this is only intended for debugging; using this can cause
applications to break and other undersireable behavior.
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media
pm trim-caches: trim cache files to reach the given free space.
pm create-user: create a new user with the given USER_NAME,
printing the new user identifier of the user.
pm remove-user: remove the user with the given USER_IDENTIFIER,
deleting all data associated with that user
adb shell ps(Process status )查看进程状态的命令,该命令显示瞬间进程的状态
简单用法,直接adb shell ps命令
$ adb shell ps --help
usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]
List processes.
Which processes to show (selections may be comma separated lists):
-A All processes
-a Processes with terminals that aren't session leaders
-d All processes that aren't session leaders
-e Same as -A
-g Belonging to GROUPs
-G Belonging to real GROUPs (before sgid)
-p PIDs (--pid)
-P Parent PIDs (--ppid)
-s In session IDs
-t Attached to selected TTYs
-T Show threads
-u Owned by USERs
-U Owned by real USERs (before suid)
Output modifiers:
-k Sort FIELDs in +increasing or -decreasting order (--sort)
-M Measure field widths (expanding as necessary)
-n Show numeric USER and GROUP
-w Wide output (don't truncate fields)
Which FIELDs to show. (Default = -o PID,TTY,TIME,CMD)
-f Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)
-l Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)
-o Output FIELDs instead of defaults, each with optional :size and =title
-O Add FIELDS to defaults
-Z Include LABEL
Command line -o fields:
ARGS CMDLINE minus initial path CMD Command (thread) name (stat[2])
CMDLINE Command line (argv[]) COMM Command filename (/proc/$PID/exe)
COMMAND Command file (/proc/$PID/exe) NAME Process name (argv[0] of $PID)
Process attribute -o FIELDs:
ADDR Instruction pointer BIT Is this process 32 or 64 bits
CPU Which processor running on ETIME Elapsed time since PID start
F Flags (1=FORKNOEXEC 4=SUPERPRIV) GID Group id
GROUP Group name LABEL Security label
MAJFL Major page faults MINFL Minor page faults
NI Niceness (lower is faster)
PCPU Percentage of CPU time used PCY Android scheduling policy
PGID Process Group ID
PID Process ID PPID Parent Process ID
PRI Priority (higher is faster) PSR Processor last executed on
RGID Real (before sgid) group ID RGROUP Real (before sgid) group name
RSS Resident Set Size (pages in use) RTPRIO Realtime priority
RUID Real (before suid) user ID RUSER Real (before suid) user name
S Process state:
R (running) S (sleeping) D (device I/O) T (stopped) t (traced)
Z (zombie) X (deader) x (dead) K (wakekill) W (waking)
SCHED Scheduling policy (0=other, 1=fifo, 2=rr, 3=batch, 4=iso, 5=idle)
STAT Process state (S) plus:
< high priority N low priority L locked memory
s session leader + foreground l multithreaded
STIME Start time of process in hh:mm (size :19 shows yyyy-mm-dd hh:mm:ss)
SZ Memory Size (4k pages needed to completely swap out process)
TCNT Thread count TID Thread ID
TIME CPU time consumed TTY Controlling terminal
UID User id USER User name
VSZ Virtual memory size (1k units) %VSZ VSZ as % of physical memory
WCHAN What are we waiting in kernel for
示例:
localhost:~ name$ adb shell ps
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 5368 1492 SyS_epoll_ 0000000000 S /init
root 2 0 0 0 kthreadd 0000000000 S kthreadd
root 3 2 0 0 smpboot_th 0000000000 S ksoftirqd/0
root 5 2 0 0 worker_thr 0000000000 S kworker/0:0H
root 7 2 0 0 smpboot_th 0000000000 S migration/0
root 8 2 0 0 rcu_gp_kth 0000000000 S rcu_preempt
root 9 2 0 0 rcu_gp_kth 0000000000 S rcu_bh
root 56 2 0 0 down_timeo 0000000000 D blackbox_main_t
shell 14905 4519 5996 1312 0 7f9b3f4114 R ps
各字段的含义:
USER进程当前用户
PID进程ID
PPID父进程ID
VSIZE进程的虚拟内存大小,以KB为单位
RSS实际占用的内存大小,以KB为单位
WCHAN进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
PCProgram Counter
NAME进程状态及名称
休眠进程:这个是进程的状态,从上面打印的内容中可看出进程的状态
进程状态有不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
W - 进入内存交换(从内核2.6开始无效)
X - 死掉的进程
< - 高优先级
N - 低优先级
L - 有些页被锁进内存
s - 包含子进程
l - 多线程,克隆线程
*+ - 位于后台的进程组 *
program counter:计算机中提供要从[存储器]中取出的下一个指令地址的[寄存器]
ps 命令参数:-P -p -t -x -c [pid] [name]
-P 显示调度策略,通常是bg或fg,当获取失败将会是un和er
-p 显示进程的优先级和nice等级
-t 显示进程下的线程列表
-x 显示进程耗费的用户时间和系统时间,格式:(u:0, s:0),单位:秒(s)
-c 显示进程耗费的CPU时间 (可能不兼容Android 4.0以前的老版本系统)
[pid] 过滤指定的进程PID
[name] 过滤指定的进程NAME
ps xxx 显示过滤指定名称的进程
和Linux的ps不同,Linux的ps命令可以这样子:ps -aux,Android上ps的参数并不能一起使用,如ps -txPc.
查看进程调度等级
localhost:~ name$adb shell ps -P
USER PID PPID VSIZE RSS PCY WCHAN PC NAME
root 1 0 5368 1492 fg SyS_epoll_ 0000000000 S /init
root 3056 1 4280 476 tv SyS_epoll_ 0000000000 S /sbin/healthd
u0_a58 5183 3261 1939580 86688 bg SyS_epoll_ 0000000000 S com.huawei.secime
比之前打印的内容多出了一列PCY,表示进程的调度等级
Android进程调度状态:
1.foreground process
2.visible process
3.Service process
4.background process
5.empty process
作者:IT枫
链接:https://www.jianshu.com/p/d18ed08b40c4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
三. 模拟用户事件
文本输入:adb shell input text
例:手机端输出demo字符串,相应指令:adb shell input "demo".
键盘事件:input keyevent ,其中KEYCODE见本文结尾的附表
例:点击返回键,相应指令: input keyevent 4.
点击事件:input tap
例: 点击坐标(500,500),相应指令: input tap 500 500.
滑动事件: input swipe
例: 从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500.
例: 200ms时间从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500 200.
循环 shell命令:
四. logcat日志
显示包含的logcat logcat \| grep
显示包含,并忽略大小写的logcat logcat \| grep -i
读完所有log后返回,而不会一直等待 logcat -d
清空log并退出 logcat -c
打印最近的count logcat -t
格式化输出Log,其中format有如下可选值: logcat -v
brief — 显示优先级/标记和原始进程的PID (默认格式)
process — 仅显示进程PID
tag — 仅显示优先级/标记
thread — 仅显示进程:线程和优先级/标记
raw — 显示原始的日志信息,没有其他的元数据字段
time — 显示日期,调用时间,优先级/标记,PID
long —显示所有的元数据字段并且用空行分隔消息内容
五. 常用节点
查看节点值,例如:cat /sys/class/leds/lcd-backlight/brightness
修改节点值,例如:echo 128 > sys/class/leds/lcd-backlight/brightness
LPM: echo N > /sys/modue/lpm_levels/parameters/sleep_disabled
亮度:/sys/class/leds/lcd-backlight/brightness
CPU: /sys/devices/system/cpu/cpu0/cpufreq
GPU: /sys/class/ kgsl/kgsl-3d0/gpuclk
限频:cat /data/pmlist.config
电流: cat /sys/class/power_supply/battery/current_now
查看Power: dumpsys power
WIFI :data/misc/wifi/wpa_supplicant.conf
持有wake_lock: echo a> sys/power/wake_lock
释放wake_lock:echo a> sys/power/wake_unlock
查看Wakeup_source: cat sys/kernel/debug/wakeup_sources
Display(关闭AD):mv /data/misc/display/calib.cfg /data/misc/display/calib.cfg.bak 重启
关闭cabc:echo 0 > /sys/device/virtual/graphics/fb0/cabc_onoff
打开cabc:echo 3 > /sys/device/virtual/graphics/fb0/cabc_onoff
systrace:sdk/tools/monitor
限频:echo /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 1497600
当出现read-only 且 remount命令不管用时:adb shell mount -o rw,remount /
进入9008模式: adb reboot edl
查看高通gpio:sys/class/private/tlmm 或者 sys/private/tlmm
查看gpio占用情况:sys/kernle/debug/gpio
六. 远程ADB
为避免使用数据线,可通过wifi通信,前提是手机与PC处于同一局域网
启动方法:
adb tcpip5555//这一步,必须通过数据线把手机与PC连接后再执行 adb connect <手机IP>
停止方法:
adb disconnect//断开wifi连接adb usb//切换到usb模式
七. 常用操作示例
查看当前 ls
打印当前路径 pwd
查看当前连接的设备 adb devices
终止adb服务进程 adb kill-server
重启adb服务进程 adb start-server
PID是:8607 查看某个进程的日志 adb logcat -v process |grep 8607
清理缓存 logcat -c
打印xys标签log adb logcat -s xys
打印192.168.56.101:5555设备里的xys标签log adb -s 192.168.56.101:5555 logcat -s xys
打印在ActivityManager标签里包含start的日志 adb logcat -s ActivityManager | findstr "START"
"-s"选项 : 设置输出日志的标签, 只显示该标签的日志;
"-f"选项 : 将日志输出到文件, 默认输出到标准输出流中, -f 参数执行不成功;
"-r"选项 : 按照每千字节输出日志, 需要 -f 参数, 不过这个命令没有执行成功;
"-n"选项 : 设置日志输出的最大数目, 需要 -r 参数, 这个执行 感觉 跟 adb logcat 效果一样;
"-v"选项 : 设置日志的输出格式, 注意只能设置一项;
"-c"选项 : 清空所有的日志缓存信息;
"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;
"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;
"-g"选项 : 查看日志缓冲区信息;
"-b"选项 : 加载一个日志缓冲区, 默认是 main, 下面详解;
"-B"选项 : 以二进制形式输出日志;
重启机器 adb reboot
获取序列号 adb get-serialno
重启到bootloader,即刷机模式 adb reboot bootloader
重启到recovery,即恢复模式 adb reboot recovery
安装APK:adb install //比如:adb install baidu.apk
安装apk到sd卡: adb install -s // 比如:adb install -s baidu.apk
卸载APK:adb uninstall //比如:adb uninstall com.baidu.search
获取机器MAC地址 adb shell cat /sys/class/net/wlan0/address
启动应用:adb shell am start -n /. 例如:adb shell am start -n yf.o2o.store/yf.o2o.store.activity.LoginActivity
查看占用内存排序 adb shell top
查看占用内存前6的app:adb shell top -m 6
刷新一次内存信息,然后返回:adb shell top -n 1
查询各进程内存使用情况:adb shell procrank
杀死一个进程:adb shell kill [pid]
查看进程列表:adb shell ps
查看指定进程状态:adb shell ps -x [PID]
查看后台services信息: adb shell service list
查看当前内存占用: adb shell cat /proc/meminfo
查看IO内存分区:adb shell cat /proc/iomem
将system分区重新挂载为可读写分区:adb remount
从本地复制文件到设备: adb push
从设备复制文件到本地: adb pull
列出目录下的文件和文件夹,等同于dos中的dir命令:adb shell ls
进入文件夹,等同于dos中的cd 命令:adb shell cd
重命名文件: adb shell rename path/oldfilename path/newfilename
删除system/avi.apk: adb shell rm /system/avi.apk
删除文件夹及其下面所有文件:adb shell rm -r
移动文件:adb shell mv path/file newpath/file
设置文件权限:adb shell chmod 777 /system/fonts/DroidSansFallback.ttf
新建文件夹:adb shell mkdir path/foldelname
查看文件内容:adb shell cat
查看wifi密码:adb shell cat /data/misc/wifi/*.conf
清除log缓存:adb logcat -c
查看bug报告:adb bugreport
获取设备名称:adb shell cat /system/build.prop
查看ADB帮助:adb help
跑monkey:
adb shell monkey -v -p your.package.name 500
adb -s 192.168.244.151:5555 shell monkey -v -p com.bolexim 500
八.附表
下表中, 箭头左边为keycode值,箭头右边为keycode的含义,部分用中文标注
0–> “KEYCODE_UNKNOWN”
1–> “KEYCODE_MENU”
2–> “KEYCODE_SOFT_RIGHT”
3–> “KEYCODE_HOME”//Home键
4–> “KEYCODE_BACK”//返回键
5–> “KEYCODE_CALL”
6–> “KEYCODE_ENDCALL”
7–> “KEYCODE_0”//数字键0
8–> “KEYCODE_1”
9–> “KEYCODE_2”
10–> “KEYCODE_3”
11–> “KEYCODE_4”
12–> “KEYCODE_5”
13–> “KEYCODE_6”
14–> “KEYCODE_7”
15–> “KEYCODE_8”
16–> “KEYCODE_9”
17–> “KEYCODE_STAR”
18–> “KEYCODE_POUND”
19–> “KEYCODE_DPAD_UP”
20–> “KEYCODE_DPAD_DOWN”
21–> “KEYCODE_DPAD_LEFT”
22–> “KEYCODE_DPAD_RIGHT”
23–> “KEYCODE_DPAD_CENTER”
24–> “KEYCODE_VOLUME_UP”//音量键+
25–> “KEYCODE_VOLUME_DOWN”//音量键-
26–> “KEYCODE_POWER”//Power键
27–> “KEYCODE_CAMERA”
28–> “KEYCODE_CLEAR”
29–> “KEYCODE_A”//字母键A
30–> “KEYCODE_B”
31–> “KEYCODE_C”
32–> “KEYCODE_D”
33–> “KEYCODE_E”
34–> “KEYCODE_F”
35–> “KEYCODE_G”
36–> “KEYCODE_H”
37–> “KEYCODE_I”
38–> “KEYCODE_J”
39–> “KEYCODE_K”
40–> “KEYCODE_L”
41–> “KEYCODE_M”
42–> “KEYCODE_N”
43–> “KEYCODE_O”
44–> “KEYCODE_P”
45–> “KEYCODE_Q”
46–> “KEYCODE_R”
47–> “KEYCODE_S”
48–> “KEYCODE_T”
49–> “KEYCODE_U”
50–> “KEYCODE_V”
51–> “KEYCODE_W”
52–> “KEYCODE_X”
53–> “KEYCODE_Y”
54–> “KEYCODE_Z”
55–> “KEYCODE_COMMA”
56–> “KEYCODE_PERIOD”
57–> “KEYCODE_ALT_LEFT”
58–> “KEYCODE_ALT_RIGHT”
59–> “KEYCODE_SHIFT_LEFT”
60–> “KEYCODE_SHIFT_RIGHT”
61-> “KEYCODE_TAB”
62–> “KEYCODE_SPACE”
63–> “KEYCODE_SYM”
64–> “KEYCODE_EXPLORER”
65–> “KEYCODE_ENVELOPE”
66–> “KEYCODE_ENTER”//回车键
67–> “KEYCODE_DEL”
68–> “KEYCODE_GRAVE”
69–> “KEYCODE_MINUS”
70–> “KEYCODE_EQUALS”
71–> “KEYCODE_LEFT_BRACKET”
72–> “KEYCODE_RIGHT_BRACKET”
73–> “KEYCODE_BACKSLASH”
74–> “KEYCODE_SEMICOLON”
75–> “KEYCODE_APOSTROPHE”
76–> “KEYCODE_SLASH”
77–> “KEYCODE_AT”
78–> “KEYCODE_NUM”
79–> “KEYCODE_HEADSETHOOK”
80–> “KEYCODE_FOCUS”
81–> “KEYCODE_PLUS”
82–> “KEYCODE_MENU”
83–> “KEYCODE_NOTIFICATION”
84–> “KEYCODE_SEARCH”
网友评论