本帖最后由 King 于 2024-10-30 13:23 编辑
关闭 麦当劳
adb shell "ps|grep com.mcdonalds.sok.cn"
u0_a57 3092 903 4458936 86420 0 0 S com.mcdonalds.sok.cn.dev:remote
system 3482 904 1184380 44500 0 0 S com.qualcomm.qti.smcinvokepkgmgr
radio 3502 903 3871356 51532 0 0 S com.qualcomm.simcontacts
u0_a57 3672 903 4793788 203704 0 0 S com.mcdonalds.sok.cn.dev
adb root
adb shell " kill -9 3092"
adb shell " am force-stop com.mcdonalds.sok.cn.dev"
kill 用于终止进程kill
有十几种控制进程的方法,下面是一些常用的方法:
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。
ps -ef | grep 包名、进程名
ps -ef | grep kafka
top -u 包名、进程名
cat /proc/meminfo
proc/meminfo 机器的内存使用信息 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。 /proc/pid/statm 进程所占用的内存
查看机器可用内存 /proc/28248/>free 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。 2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。 如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
ps auxw | head -1;ps auxw | sort -rn -k4 | head -5 查看内存占用前5进程
ps auxw | head -1;ps auxw | sort -rn -k3 | head -3
查看CPU 占用前3 进程
快捷键 adb 指令发送
可以使用adb shell命令来发送返回桌面的指令。具体指令如下: adb shell input keyevent 3 这个指令模拟按下home键的操作,可以将焦点切换到桌面。 返回桌面(home)指令:
- adb shell input keyevent 3
菜单指令:
- adb shell input keyevent 82
返回指令:
- adb shell input keyevent 4
- 打开通知面板:adb shell input keyevent 226
- 打开快捷设置面板:adb shell input keyevent 239
- 打开最近任务列表:adb shell input keyevent 19
- 打开音量调整滑块:adb shell input keyevent 200
- 减小音量:adb shell input keyevent 203
- 增大音量:adb shell input keyevent 205
- 静音/取消静音:adb shell input keyevent 164
- 锁屏:adb shell input keyevent 264
- 亮屏:adb shell input keyevent 224
安卓系统底部的三个按键依次是“返回键”、“主页键”、“多任务键”。其中,“返回键”通常位于左侧,“主页键”位于中间,“多任务键”通常位于右侧。 使用adb发送指令到安卓设备时,可以通过输入相应的adb shell命令来模拟按下这些按键的操作。具体指令如下: 模拟按下返回键:
- adb shell input keyevent KEYCODE_BACK
模拟按下主页键:
- adb shell input keyevent KEYCODE_HOME
模拟按下多任务键:
- adb shell input keyevent KEYCODE_ RecentApps
# 短按power键
adb shell input keyevent 26 # KEYCODE_POWER
# 或
adb shell input keyevent KEYCODE_POWER
# 长按power键(模拟按下和抬起)
adb shell "input keyevent --longpress 26"
# 或
adb shell "input keyevent --longpress KEYCODE_POWER"
# 查找power键对应的输入设备
adb shell getevent -l | grep -i power
# 发送按键事件(示例路径,实际设备可能不同)
adb shell sendevent /dev/input/event0 1 116 1 # 按下
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 1 116 0 # 释放
adb shell sendevent /dev/input/event0 0 0 0
# 触发关机对话框
adb shell service call power 7
# 模拟power键按下
adb shell service call power 2
# 强制关机
adb shell reboot -p
可以使用adb shell命令来发送切换任务的指令。具体指令如下: adb shell am start -n com.android.deskclock/.AlarmClock 这个指令会启动一个名为AlarmClock的应用,并将焦点切换到该应用。你可以将com.android.deskclock和.AlarmClock替换为你想要切换到的应用包名和活动名。 另外,如果你想要发送其他切换任务的指令,可以使用adb shell dumpsys activity命令来获取当前运行的应用和活动信息,然后根据需要编写相应的adb shell命令来模拟用户操作。
01-26 15:43:39.493 452 530 D WindowManager: interceptKeyTi keyCode=3 down=false repeatCount=0 keyguardOn=false mHomePressed=true canceled=false |
win=Window{37e28b1 u0 com.hezheng.pos/com.hezheng.hkpos.ui.activity.trade.goods.GoodsActivity}:指定了与事件相关的窗口,其中 com.hezheng.pos 是应用程序的包名,com.hezheng.hkpos.ui.activity.trade.goods.GoodsActivity 是活动的类名。 action=1:指定按键事件的动作。在这里,1 表示按下动作。 flags=40:标志位,以十进制表示。在这里,40 的二进制表示是 101000,表明事件可能具有一些特殊标志。 keyCode=82:按键码,这里是 82,表示 Menu 键。 scanCode=0:扫描码,这里是 0。 metaState=0:元状态,这里是 0,表示没有按下任何修饰键(如 Shift、Ctrl、Alt 等)。 repeatCount=0:重复次数,这里是 0,表示这是按键的第一次触发。 policyFlags=1795162112:策略标志,以十进制表示。在这里,1795162112 的二进制表示是 1101010100000000100101000100000,这可能包含一些窗口管理器的策略信息。
keyCode=3:按键码,这里是 3,通常对应于 Home 键。 down=false:指示按键事件的动作,这里是 false,表示按键被释放(抬起)。 repeatCount=0:重复次数,这里是 0,表示这是按键的第一次触发。 keyguardOn=false:指示键盘锁是否打开,这里是 false,表示键盘锁未打开。 mHomePressed=true:指示 Home 键是否被按下,这里是 true,表示 Home 键被按下。 canceled=false:指示按键事件是否被取消,这里是 false,表示按键事件未被取消。
因此,这条日志的含义是窗口管理器拦截了一个 Home 键的释放事件,并且当前 Home 键处于按下状态,未被键盘锁锁定,且按键事件未被取消。这可能反映了系统处理 Home 键事件的一些状态和逻辑。
在Android系统中,system分区默认情况下是只读文件系统。这是为了保证系统的稳定性和安全性,防止未经授权的修改。然而,在某些情况下,可能需要对system分区进行写操作。 要对system分区进行写操作,首先需要重新挂载system分区为可读写模式。这通常涉及到系统级别的权限和复杂的操作,因为直接修改system分区可能会对系统稳定性和安全性造成严重影响。 在Android中,应用程序通常没有直接访问设备存储的写入权限。如果应用程序需要写入外部存储,它需要在AndroidManifest.xml文件中声明写入权限(如<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>),并在运行时检查用户是否已授予该权限。 关于A/B分区,它是一种特殊的文件系统结构,将系统分区分成了A和B两个槽(slot)。这种结构的主要作用是实现无缝升级。当系统需要更新时,可以在一个槽(如B槽)中下载并安装新版本的系统,而用户仍然可以在另一个槽(如A槽)中继续使用当前版本的系统。一旦B槽中的新系统安装完成,系统会提示用户重启,并在重启后自动切换到B槽的新版本系统。这样,用户在整个升级过程中几乎不会感知到中断,从而实现了无缝升级。 A/B分区结构与system分区有关联,因为A/B分区实际上是将system分区分成了两个独立的槽。平时系统工作在一个槽(如A槽),而OTA(Over-The-Air,空中下载技术)升级则在另一个槽(如B槽)进行。这种结构使得系统可以在不影响用户当前使用的情况下进行升级,提高了系统的可用性和稳定性。
1、uiautomatorviewer: android-sdk自带。需要android开发环境。手机上打开对应页面,在终端输入uiautomatorviewer即可。
Write automated tests with UI Automator
2、Android Studio中的LayoutInspector:IDE带的,可以实时查看布局层级信息。通过adb连接上手机,然后在Android Studio中打开LayoutInspector,即可查看手机上的实时布局信息。
如果页面复杂,会卡顿。
Layout Inspector
3、stecho: facebook的开源库,可以在浏览器中查看布局信息。在项目中依赖stetho三方库,运行到手机上之后,在浏览器中可查看。
stetho
4、dumpsys通过adb shell dumpsys activity top命令,拿到当前activity的快照,内部包含布局信息。
最稳定、靠谱。
adb shell dumpsys activity top
|