-
-
Save iflove/324b4ef55e9d879c0851efa1b4886d84 to your computer and use it in GitHub Desktop.
安卓shell命令记录 |
iflove
commented
Jan 27, 2021
•
netstat查看端口状态
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
查看摄像头节点
ls -l /dev/ | grep video
查询系统服务的运行状态(对象的成员变量属性值)
dumpsys -l
service list
如果您将目标连接到主机,则可以使用两个最常用的命令工具:
activity manager (am)
package manager (pm)
dalvik
dalvik/ docs/ hello
jar cvf test.jar Hello.class
dx --dex --output test.dex test.jar
dalvikvm -cp Hello.dex Hello
Android允许我们通过ADB,把Android上的某个端口映射到电脑(adb forward),或者把电脑的某个端口映射到Android系统(adb reverse)。
adb forward --list - list all forward socket connections.
the format is a list of lines with the following format:
<serial> " " <local> " " <remote> "\n"
adb forward <local> <remote> - forward socket connections
forward specs are one of:
tcp:<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)
adb forward --no-rebind <local> <remote>
- same as 'adb forward <local> <remote>' but fails
if <local> is already forwarded
adb forward --remove <local> - remove a specific forward socket connection
adb forward --remove-all - remove all forward socket connections
adb reverse --list - list all reverse socket connections from device
adb reverse <remote> <local> - reverse socket connections
reverse specs are one of:
tcp:<port>
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
adb reverse --no-rebind <remote> <local>
- same as 'adb reverse <remote> <local>' but fails
if <remote> is already reversed.
adb reverse --remove <remote>
- remove a specific reversed socket connection
adb reverse --remove-all - remove all reversed socket connections from device
forward
# 显示所有(PC —> DEVICE)映射的端口连接列表
adb forward —list
# 映射端口连接(PC —> DEVICE)
adb forward (local) (remote)
adb forward tcp:6100 tcp:7100
# 映射端口连接,但是如果local已经映射了就会失败
adb forward —no-rebind (local) (remote)
adb forward --no-rebind tcp:6100 tcp:7100
# 移除指定的映射端口连接
adb forward —remove tcp:6100
# 移除所有的映射端口连接
adb forward —remove-all
reverse
# 显示所有来自设备的(DEVICE —> PC)映射的端口连接列表
adb reverse —list
# 反向映射端口连接(DEVICE —> PC)
adb reverse (remote) (local)
adb reverse tcp:7000 tcp:5000
# 如果local已经映射了就会失败
adb reverse —no-rebind (remote) (local)
adb reverse --no-rebind tcp:7000 tcp:5000
# 移除指定的反向映射端口连接
adb reverse —remove tcp:7000
adb reverse —remove-all
列出设备挂载的usb设备
lsusb
find /dev/bus/ | grep usb
暂停
echo '0' > /sys/bus/usb/devices/1-1/power/autosuspend_delay_ms
echo 'auto' > /sys/bus/usb/devices/1-1/power/control
关闭电源
echo "1-1" > /sys/bus/usb/drivers/usb/unbind
echo "1-1" > /sys/bus/usb/drivers/usb/bind
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
echo 'on' | sudo tee /sys/bus/usb/devices/1-1/power/control
Android ADB 常用命令
抓取崩溃日志
# 最近崩溃的栈日志,这个用于快速定位问题
adb shell dumpsys dropbox --print data_app_crash
# 复现bug 完整日志,先清空日志
adb logcat -c
# 存储在当前目录的 crash.log 中
adb logcat -v time > crash.log
# linux 系统可以使用 tee 一边输出一边记录
adb logcat -v time | tee crash.log
挂住进程调试
am set-debug-app {package_name}
打开app进入等待调试模式
am set-debug-app -w packagename
am set-debug-app -w --persistent packagename
清除调试模式
am clear-debug-app
抓取 anr 日志
## root 过的设备
adb shell
cat /data/anr/traces.txt > /mnt/sdcard/0/traces.txt
exit
adb pull /mnt/sdcard/0/traces.txt .
# 注意某些机型可能文件名改过,需要自行判断
## 未root
# windows 系统 写入文件 bugreport.log
adb shell bugreport > bugreport.log
# linux 系统可以使用 tee 一边输出一边记录
adb shell bugreport | tee bugreport.log
adb wifi链接调试
# 开启 tcpip 调试
adb tcpip 5555
# 主机执行
adb connect [手机IP]
应用安装卸载
# 获取apk的packagename 和 classname
aapt d badging <apkfile>
# 安装apk
adb install <apkfile>
# 保留数据和缓存文件,重新安装apk,
adb install -r <apkfile>
# 安装apk到sd卡
adb install -s <apkfile>
# 卸载app
adb uninstall <package>
# 卸载app但保留数据和缓存文件
adb uninstall -k <package>
# 同时安装包多个apk到设备上
adb install-multiple
adb install 参数
-l 锁定应用
-r 替换已存在的应用
-t 允许安装测试包
-s 安装到sd卡中
-d 可以安装低版本安装包
-p 安装部分应用
-g 授权所有运行时权限
应用状态查看
# 查看进程列表
adb shell ps
# 查看指定进程状态
adb shell ps -x [PID]
# 查看后台services信息
adb shell service list
# 查看IO内存分区
adb shell cat /proc/iomem
列出所有拥有JDWP端口进程的进程号
adb jdwp
列出所有拥有JDWP端口进程的进程号
adb jdwp
adb sync
# 重新挂载系统分区,使系统分区重新可写 成功提示 remount succeeded
adb remount
dumpsys
adb shell dumpsys wifi
adb shell dumpsys cpuinfo
adb dumpsys window windows
# 查看设备cpu和内存占用情况
adb shell top
# 查看占用内存前6的app
adb shell top -m 6
# 刷新一次内存信息,然后返回
adb shell top -n 1
# MAC地址
adb shell cat /sys/class/net/wlan0/address
# CPU序列号
adb shell cat /proc/cpuinfo
# 返回所有应该包含在错误报告中的设备信息
adb bugreport
# 重启
adb reboot
# 重启刷机模式
adb reboot bootloader
# 重启到恢复模式
adb reboot recovery
am force-stop app包名
kill -9 29552 29066 #多个进程号
pkill 正在运行的程序名 #pkill system_server
killall 正在运行的程序名 #killall zygote,直接杀死zygote的所有进程。
# 截图
adb shell screencap -p | sed 's/\r$//' > screen.png
alias and-screencap="adb shell screencap -p | sed 's/\r$//'"
and-screencap > screen.png
adb exec-out screencap -p > screen.png
设备IP地址
adb shell ip route | awk '{print $9}'
dmesg 命令用于显示系统开机信息,可用于诊断系统故障。
查看系统发送广播
dumpsys |grep BroadcastRecord
dumpsys activity b
查看系统activity堆栈
dumpsys activity activities
查看系统顶部activity、view
dumpsys activity top
查看系统ActivityManager 日志
logcat | grep ActivityManager
svc命令,位置在/system/bin目录下,用来管理电源控制,无线数据,WIFI
svc power reboot
lowmemorykiller
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15
write /proc/sys/vm/overcommit_memory 1 说明1
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,5120,5632,6144
说明1
0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法(对该算法的详细解释请看文末)猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
1 – Always overcommit. 允许overcommit,对内存申请来者不拒。
2 – Don’t overcommit. 禁止overcommit。
adb设置代理和取消代理
adb shell settings put global http_proxy 代理IP地址:端口号
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
adb shell settings put global http_proxy :0 关闭代理(无需重启)
Input输入系统
getevent 查看所有Input节点
getevent -l
sendevent : 复杂一逼
use: sendevent device type code value
View Hierarchy:
adb shell dumpsys activity top
android.widget.ListView{d1ae5ad VFED.VC.. .F...... 0,0-1080,1808 #7f0800c4 app:id/sampleList}
android.widget.ListView // クラス名
{
d1ae5ad // HashCode
V // Visibility (V, I, G)
F // FOCUSABLE (F=true, .=false)
E // ENABLED (E=true, .=false)
D // draw (.=not draw, D=draw)
. // SCROLLBARS_HORIZONTAL (H=true, .=false)
V // SCROLLBARS_VERTICAL (V=true, .=false)
C // CLICKABLE (C=true, .=false)
. // LONG_CLICKABLE (L=true, .=false)
. // CONTEXT_CLICKABLE (X=true, .=false)
. // PFLAG_IS_ROOT_NAMESPACE (R=true, .=false)
F // PFLAG_FOCUSED (F=true, .=false)
. // PFLAG_SELECTED (S=true, .=false)
. // PFLAG_PREPRESSED (p) / PFLAG_PRESSED (P=true, .=false)
. // PFLAG_HOVERED (H=true, .=false)
. // PFLAG_ACTIVATED (A=true, .=false)
. // PFLAG_INVALIDATED (I=true, .=false)
. // PFLAG_DIRTY_MASK (D=true, .=false)
0, 0 // mLeft, mTop
-
1080, 1808 // mRight, mBottom
#7f0800c4 // mID
app:id/sampleList // PackageName
}
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。
使用&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫
adb shell am force-stop com.test; adb shell am start -n com.test/com.test.MainActivity
Systrace 命令行工具
systrace -l
//列出可监控的模块类别
D:\workspace\sdk\platform-tools\systrace>python2 systrace.py -t 10 -o mytrace.html -a cn.mashang.vscreen.base
安卓常用shell命令
dumpsys meminfo # 查询应用的内存信息
dumpsys activity processes # 查询应用的adj级别 oom: max=16 cur=
cat /proc/[PID]/oom_adj # 命令会直接显示出对应进程号的adj值
adb reboot recovery # 进入recovery模式
adb reboot loader # 进入recovery模式
/sys/class/backlight/backlight # 显示屏亮度值文件
cat /proc/sys/kernel/threads-max # 最大线程
dd if=/dev/zero of=/sdcard/iotest bs=1024000000 count=100 # Linux dd 命令用于读取、转换并输出数据。
cat /proc/meminfo # 实时获取系统内存使用情况(Linux)
dumpsys meminfo # dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。参考链接:https://developer.android.com/studio/command-line/dumpsys?hl=zh-cn
ulimit -a # 用户限制-限制系统范围资源的使用。参考链接:https://ss64.com/bash/ulimit.html
ulimit -n # The maximum number of open file descriptors. 安卓系统一般默认1024
ls -l /proc/进程PID/fd/ # 查看进程fd 列表
sysctl -a # 系统级限制:
lsof -p [pid] # 查看进程使用打开文件列表
cat /proc/sys/fs/file-max # 系统级限制:
ps # Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。
pstree # 树形显示进程
am start -n com.xxa.app/.MainActivity -es website xxb.com # am 启动activity
busybox watch -n 2 'ls -l /proc/13651/fd/ | wc -l' # 监控命令的运行结果
busybox watch -n 1 "getprop | grep sys.usbcamera.num | tee -a /sdcard/1.txt"
am dumpheap pid/pkgName file # 生成heap文件