Skip to content

Instantly share code, notes, and snippets.

@iflove
Last active July 28, 2022 12:09
Show Gist options
  • Save iflove/324b4ef55e9d879c0851efa1b4886d84 to your computer and use it in GitHub Desktop.
Save iflove/324b4ef55e9d879c0851efa1b4886d84 to your computer and use it in GitHub Desktop.
安卓shell命令
安卓shell命令记录
@iflove
Copy link
Author

iflove commented Jan 27, 2021

分别查看 系统 全局 安全 可以使用adb shell 设置的属性(可以使用setting设置的属性)

settings list system
settings list global
settings list secure
settings get system screen_brightness   #获取属性信息
settings put system screen_brightness 200   #设置新的属性信息

@iflove
Copy link
Author

iflove commented Mar 2, 2021

netstat查看端口状态

netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

@iflove
Copy link
Author

iflove commented Mar 22, 2021

查看摄像头节点

ls -l /dev/ | grep video

@iflove
Copy link
Author

iflove commented Mar 24, 2021

查询系统服务的运行状态(对象的成员变量属性值)

dumpsys -l
service list

@iflove
Copy link
Author

iflove commented Mar 27, 2021

如果您将目标连接到主机,则可以使用两个最常用的命令工具:

activity manager (am)  
package manager (pm)

@iflove
Copy link
Author

iflove commented Mar 27, 2021

dalvik
dalvik/ docs/ hello

jar cvf test.jar Hello.class
dx --dex --output test.dex test.jar 
dalvikvm -cp Hello.dex Hello

@iflove
Copy link
Author

iflove commented Mar 29, 2021

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

@iflove
Copy link
Author

iflove commented Mar 29, 2021

列出设备挂载的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

@iflove
Copy link
Author

iflove commented Mar 29, 2021

Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

echo 'on' | sudo tee /sys/bus/usb/devices/1-1/power/control

@iflove
Copy link
Author

iflove commented Mar 30, 2021

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}'

@iflove
Copy link
Author

iflove commented Mar 30, 2021

dmesg 命令用于显示系统开机信息,可用于诊断系统故障。

@iflove
Copy link
Author

iflove commented Apr 8, 2021

查看系统发送广播
dumpsys |grep BroadcastRecord
dumpsys activity b
查看系统activity堆栈
dumpsys activity activities
查看系统顶部activity、view
dumpsys activity top
查看系统ActivityManager 日志
logcat | grep ActivityManager

@iflove
Copy link
Author

iflove commented Apr 11, 2021

svc命令,位置在/system/bin目录下,用来管理电源控制,无线数据,WIFI
svc power reboot

@iflove
Copy link
Author

iflove commented Apr 11, 2021

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。

@iflove
Copy link
Author

iflove commented Apr 25, 2021

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  关闭代理(无需重启)

@iflove
Copy link
Author

iflove commented May 17, 2021

Input输入系统

getevent 查看所有Input节点
getevent -l

sendevent : 复杂一逼
use: sendevent device type code value

@iflove
Copy link
Author

iflove commented May 29, 2021

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
}

@iflove
Copy link
Author

iflove commented Aug 5, 2021

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。

使用&后台运行程序:
结果会输出到终端

使用Ctrl + C发送SIGINT信号,程序免疫

关闭session发送SIGHUP信号,程序关闭

使用nohup运行程序:
结果默认会输出到nohup.out

使用Ctrl + C发送SIGINT信号,程序关闭

关闭session发送SIGHUP信号,程序免疫

@iflove
Copy link
Author

iflove commented Sep 17, 2021

adb shell am force-stop com.test; adb shell am start -n com.test/com.test.MainActivity

@iflove
Copy link
Author

iflove commented Feb 14, 2022

Systrace 命令行工具
systrace -l //列出可监控的模块类别
D:\workspace\sdk\platform-tools\systrace>python2 systrace.py -t 10 -o mytrace.html -a cn.mashang.vscreen.base

@iflove
Copy link
Author

iflove commented Jul 12, 2022

安卓常用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文件

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment