IT评测·应用市场-qidao123.com

标题: [车联网安全自学篇] Android安全之ADB命令总结「收藏版」 [打印本页]

作者: 十念    时间: 2025-3-21 03:19
标题: [车联网安全自学篇] Android安全之ADB命令总结「收藏版」

大概每个人出生的时间都以为这天下都是为他一个人而存在的,当他发现自己错的时间,他便开始长大
少走了弯路,也就错过了风景,无论如何,感谢履历

已转行,从此不问网络安全江湖事… …
0x01 常用的一些ADB命令

1.1 ADB 命令(主)


  1. adb shell dumpsys activity top
  2. # 把系统中所有应用运行的四大组件都会打印出来
  3. adb shell dumpsys >> info.txt
  4. start info.txt
复制代码

  1. adb shell dumpsys package  xxx
  2. 或进入adb shell使用下面的命令
  3. dumpsys package xxx
  4. # 清空应用数据
  5. adb shell pm clear xxx
复制代码

  1. adb shell dumpsys meminfo   xxx
复制代码

  1. adb shell dumpsys dbinfo xxx
复制代码

  1. adb intall  xxx.apk
  2. adb install test.apk -r 覆盖安装,保留数据和缓存文件  -d 解决低版本version问题  -s 安装apk到sd卡
复制代码

  1. adb uninstall  xxx.apk
  2. adb uninstall -k <package_name>
  3. 可选参数-k的作用为卸载软件但是保留配置和缓存文件
  4. adb shell
  5.       cd data/app
  6.       rm apk包
  7.       exit
  8.       adb uninstall apk包的主包名
  9.       adb install -r apk包
复制代码

  1. adb remount
  2. (重新挂载系统分区,使系统分区重新可写)
  3.       adb shell
  4.       cd system/app
  5.       rm *.apk
复制代码

  1. adb pull  目标系统中的文件路径(a.txt)  本机系统要存放取出来的路径(a.txt)   
复制代码

  1. adb push  本机系统中的文件路径(a.txt)    目标系统中要存放的路径(a.txt)   
复制代码

  1. adb shell screencap -p /sdcard/test.png
  2. adb pull /sdcard/test.png  D:\img\
  3. start D:\img\test.png
复制代码

  1. adb shell screenrecord /sdcard/test.mp4
复制代码

  1. adb shell input text 'xxx'
复制代码

  1. adb forward [(远程端)协议:端口号] [(设备端)协议:端口号]
  2. adb forward tcp:23946 tcp:23946
  3. adb forward tcp:8700 jwdp:1786
复制代码

  1. adb jdwp
复制代码

  1. adb logcat
  2. 用法1:adb logcat -s tag
  3. 案例: adb Logcat -s fb
  4. 用法2:adb logcat |findstr pname/pid/keyword
  5. 案例: adb Logcat |findstr cn.test.demo
  6. 或进入adb shell使用下面的命令
  7. Logcat grep tencent
复制代码

  1. run-as cn.test.demo
复制代码

  1. ps | grep 过滤内容
  2. ps | grep cn.test.demo
  3. ps -t 19977
复制代码

  1. pm clear  grep cn.test.demo
复制代码

  1. pm install /sdcard/test.apk
复制代码

  1. pm uninstall cn.test.demo
复制代码

  1. am start -n [包(package)名]/[包名].[活动(activity)名称]
  2. am start -n com.androidtest/com.androidtest.test
复制代码

  1. am startservice -n [包 (package) 名]/[包名].[服务(service)名]
  2. am startservice -n com.androidtest2/com.androidtest.test2
复制代码

  1. am broadcast -a [广播动作]
复制代码

  1. netcfg
复制代码

  1. netstat
复制代码

  1. app_process [运行代码目录] [运行主类]
  2. export CLASSPATH=/data/test.jar
  3. exec /system/bin/app_process /data/cn.test.main
复制代码

  1. dalvikvm -cp [dex文件] [运行主类]
  2. dalvikvm -cp /data/test.dex cn. Widiankong Main
复制代码

  1. top [-n/-m/-d/-s/-t]
  2. -m // 最多显示多少个进程
  3. -n // 刷新次数
  4. -d // 刷新间隔时间(默认5 秒)
  5. -s // 按哪列排序
  6. -t // 显示线程信息而不是进程
复制代码

  1. getprop [属性值名称]
复制代码

  1. aapt dump xmltree [apk包] [需要查看的资源文件xml ]
复制代码

  1. dexdump [ dex文件路径]
复制代码

  1. cat /proc/[pid]/maps
  2. 用法:cat /proc/663/maps
复制代码

  1. cat /proc/[pid]/status
  2. 用法:cat /proc/663/status
复制代码

  1. cat /proc/[pid]/net/tcp/tcp6/udp/udp6
  2. 用法:cat /proc/663/net/tcp/tcp6/udp/udp6
复制代码
1.2 ADB 命令(次)


  1. adb devices
复制代码

  1. adb root
复制代码

  1. adb remount
复制代码

  1. adb shell
  2. abd shell -s 模拟器编号 命令
复制代码

  1. # 关闭服务
  2. adb kill-server
  3. # 启动服务
  4. adb start-server
复制代码

  1. adb help
复制代码

  1. adb bugreport
复制代码

  1. adb shell
  2. logcat -b radio
复制代码

  1. adb get-product
  2. adb get-serialno
复制代码

  1. adb shell
  2. sqlite3
复制代码

  1. cd system/sd/data
  2. #ls //列表显示当前文件夹内容
  3. #rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件
  4. #rm xxx //删除文件xxx
  5. #rmdir xxx //删除xxx的文件夹
复制代码

  1. adb shellinput keyevent 80
复制代码

  1. adb version
复制代码

  1. adb remount
复制代码

  1. adb reboot
  2. bootloader
  3. adb reboot
  4. recovery
复制代码

  1. adb shell kill pidNumber
  2. # 列出进程列表及其pid
  3. adb shell ps
  4. # 查看指定进程信息
  5. adb shell ps
  6. -x pid
复制代码

  1. adb shell getprop | grep heapgrowthlimit
  2. 得到的结果为128M: [dalvik.vm.heapgrowthlimit]: [128m]
  3. 这就是说Dalvik Heap size的最大值超过了128M,就很可能发生OOM
复制代码

  1. adb shell getprop | grep version
复制代码

  1. adb shell getprop | grep product
复制代码

  1. 获取到的序列号即为adb devices
  2. 列出来的序列号adb get-serialno
复制代码

  1. adb shell cat data/misc/wifi/*.conf
复制代码

  1. adb shell cat /sys/class/net/wlan0/address
复制代码

  1. adb shell service list
复制代码

  1. adb shell screenrecord /sdcard/test.mp4
复制代码

  1. adb shell am start -a android.intent.action.CALL -d tel:10086
  2. 停止应用
  3. adb shell am force-stop package
  4. 查看当前 Activity 名称
  5. adb shell dumpsys activity | findstr “mFocusedActivity”
复制代码

  1. adb shell mv /sdcard/1.txt /sdcard/2.text
  2. 移动同一目录下文件相当于重命名文件
复制代码

  1. adb shell screencap /sdcard/Test.png
  2. adb pull /sdcard/Test.png
  3. adb open Test.png
复制代码

  1. adb shell dumpsys meminfo <pakagename>
复制代码

  1. adb shell top
  2. adb shell dumpsys cpuinfo
复制代码

  1. adb shell dumpsys battery
复制代码

  1. adb shell cat /proc/stat
复制代码

  1. adb shell cat /proc/<PID>/stat
复制代码

  1. adb shell cat /proc/meminfo | head -n 4
复制代码

  1. adb shell dumpsys meminfo| grep "Free RAM"
复制代码

  1. adb shell dumpsys meminfo <packagename>
  2. adb shell dumpsys meminfo <PID>
复制代码

  1. adb shell cat proc/self/net/dev
复制代码

  1. adb shell cat /proc/uid_stat/2000/tcp_snd
复制代码

  1. adb shell cat /proc/uid_stat/2000/tcp_rcv
复制代码

  1. adb logcat threadtime -b events>d:\log\events.txt
复制代码

  1. adb logcat -v threadtime | grep ActivityManager
复制代码

  1. adb shell am start -W -n <某activity>
复制代码
0x02 ADB常用命令总结


adb 根本语法格式:adb [-d|-e|-s <serialNumber>] <command>
参数如下:
参数描述-d指定当前唯一通过 USB 连接的 Android 设备为命令目的-e指定当前唯一运行的模拟器为命令目的-s <serialNumber>指定相应 serialNumber 号的设备/模拟器为命令目的 :如果有多个设备/模拟器连接,则需要命令指定目的设备。常用的是 -s 参数,设备/模拟器的serialNumber(序列号)可通过adb devices
命令获取,如下:
  1. $ adb devices
  2. List of devices attachedcf33328f    deviceemulator-5554    device10.1.2.6:5555    device
复制代码
上述案例表现电脑连接了三个设备/模拟器,输出里的cf33328f、emulator-5554 和 10.1.2.6:5555均为设备/模拟器的序列号,想连接emulator-5554模拟器,输入如下命令:
  1. adb  -s  emulator-5554
复制代码
adb 输出格式为[serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种:
参数描述offline表现设备未连接乐成或无相应device设备已连接。留意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态no device没有设备/模拟器连接List of devices attached没有设备/模拟器连接乐成List of devices attached 【序列号】 offline设备/模拟器未连接到 adb 或无相应
  1. # 启动adb
  2. adb start-server
  3. # adb
  4. adb kill-server
复制代码

  1. restart adbd
  2. # 或分开使用停止和启动命令来重启adbd服务
  3. stop adbd
  4. start adbd
复制代码

  1. adb version
复制代码

  1. adb root
复制代码

  1. adb -P <port> start-server
复制代码

查看应用列表的根本命令格式:adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
  1. # 显示所有应用
  2. adb shell pm list packages
  3. # 显示系统应用
  4. adb shell pm list packages -s
  5. # 显示第三方应用
  6. adb shell pm list packages -3
  7. # 包名包含某字符串的应用,比如要查看包名包含字符串 test 的应用列表
  8. adb shell pm list packages tesr
  9. 或使用 grep 来过滤
  10. adb shell pm list packages | grep test
复制代码
上面的参数如下:
参数名描述默认所有应用-f表现应用关联的 apk 文件-d只表现 disabled 的应用-e只表现 enabled 的应用-s只表现系统应用-3只表现第三方应用-i表现应用的 installer-u包含已卸载应用<FILTER>包名包含 <FILTER> 字符串
格式:adb install [-lrtsdg] <path_to_apk>
adb install 安装步骤如下:
  1. 1)push apk 文件到 /data/local/tmp
  2. 2)调用 pm install 安装
  3. 3)删除 /data/local/tmp 下的对应 apk 文件
复制代码
参数及含义如下:
参数含义-l 将应用安装到保护目次 /mnt/asec-r允许覆盖安装-t允许安装 AndroidManifest.xml里 application 指定android:testOnly="true"的应用-s将应用安装到 sdcard-d允许降级覆盖安装-g授予所有运行时权限–abi abi-identifier为特定 ABI 强制安装 apk,abi-identifier可以是 armeabi-v7a、arm64-v8a、v86、x86_64等 常见APK安装失败输出代码、含义及大概的办理办法如下:
输出含义办理办法INSTALL_FAILED_ALREADY_EXISTS应用已经存在,或卸载了但没卸载干净adb install 时利用 -r 参数,大概先adb uninstall <packagename>再安装INSTALL_FAILED_INVALID_APK无效的 APK 文件INSTALL_FAILED_INVALID_URI无效的 APK 文件名确保 APK 文件名里无中文INSTALL_FAILED_INSUFFICIENT_STORAGE空间不足清算空间INSTALL_FAILED_DUPLICATE_PACKAGE已经存在同名程序INSTALL_FAILED_NO_SHARED_USER请求的共享用户不存在INSTALL_FAILED_UPDATE_INCOMPATIBLE以前安装过同名应用,但卸载时数据没有移除;大概已安装该应用,但签名不一致先 adb uninstall <packagename> 再安装INSTALL_FAILED_SHARED_USER_INCOMPATIBLE请求的共享用户存在但签名不一致INSTALL_FAILED_MISSING_SHARED_LIBRARY安装包利用了设备上不可用的共享库INSTALL_FAILED_REPLACE_COULDNT_DELETE替换时无法删除INSTALL_FAILED_DEXOPTdex 优化验证失败或空间不足INSTALL_FAILED_OLDER_SDK设备系统版本低于应用要求INSTALL_FAILED_CONFLICTING_PROVIDER设备里已经存在与应用里同名的content providerINSTALL_FAILED_NEWER_SDK设备系统版本高于应用要求INSTALL_FAILED_TEST_ONLY应用是 test-only 的,但安装时没有指定 -t 参数INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不兼容设备 CPU 应用程序二进制接口的 native codeINSTALL_FAILED_MISSING_FEATURE应用利用了设备不可用的功能INSTALL_FAILED_CONTAINER_ERROR1. sdcard 访问失败;
2. 应用签名与 ROM 签名一致,被当作内置应用1. 确认 sdcard 可用,大概安装到内置存储
2. 打包时不与 ROM 利用相同签名INSTALL_FAILED_INVALID_INSTALL_LOCATION1. 不能安装到指定位置
2. 应用签名与 ROM 签名一致,被当作内置应用1. 切换安装位置,添加或删除 -s 参数
2. 打包时不与 ROM 利用相同签名INSTALL_FAILED_MEDIA_UNAVAILABLE安装位置不可用一样平常为 sdcard,确认 sdcard 可用或安装到内置存储INSTALL_FAILED_VERIFICATION_TIMEOUT验证安装包超时INSTALL_FAILED_VERIFICATION_FAILURE验证安装包失败INSTALL_FAILED_PACKAGE_CHANGED应用与调用程序期望的不一致INSTALL_FAILED_UID_CHANGED以前安装过该应用,与本次分配的 UID 不一致清除以前安装过的残留文件INSTALL_FAILED_VERSION_DOWNGRADE已经安装了该应用更高版本利用 -d 参数INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE已安装target SDK支持运行时权限的同名应用,要安装的版本不支持运行时权限INSTALL_PARSE_FAILED_NOT_APK指定路径不是文件,或不是以 .apk 结尾INSTALL_PARSE_FAILED_BAD_MANIFEST无法剖析的 AndroidManifest.xml 文件INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION剖析器遇到异常INSTALL_PARSE_FAILED_NO_CERTIFICATES安装包没有签名INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES已安装该应用,且签名与 APK 文件不一致先卸载设备上的该应用,再安装INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING剖析 APK 文件时遇到 CertificateEncodingExceptionINSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest 文件里没有大概利用了无效的包名INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest 文件里指定了无效的共享用户 IDINSTALL_PARSE_FAILED_MANIFEST_MALFORMED剖析 manifest 文件时遇到布局性错误INSTALL_PARSE_FAILED_MANIFEST_EMPTY在 manifest 文件里找不到找可操作标签(instrumentation 或 application)INSTALL_FAILED_INTERNAL_ERROR因系统问题安装失败INSTALL_FAILED_USER_RESTRICTED用户被限制安装应用在开发者选项里将「USB安装」打开,如果已经打开了,那先关闭再打开INSTALL_FAILED_DUPLICATE_PERMISSION应用尝试界说一个已经存在的权限名称INSTALL_FAILED_NO_MATCHING_ABIS应用包含设备的应用程序二进制接口不支持的native codeINSTALL_CANCELED_BY_USER应用安装需要在设备上确认,但未操作设备或点了取消在设备上同意安装INSTALL_FAILED_ACWF_INCOMPATIBLE应用程序与设备不兼容INSTALL_FAILED_TEST_ONLYAPK 文件是利用Android Studio 直接 RUN 编译出来的文件通过 Gradle 的 assembleDebug或assembleRelease 重新编译,大概Generate Signed APKdoes not contain AndroidManifest.xml无效的 APK 文件is not a valid zip file 无效的 APK 文件Offline设备未连接乐成先将设备与 adb 连接乐成unauthorized设备未授权允许调试error: device not found没有连接乐成的设备先将设备与 adb 连接乐成protocol failure设备已断开连接先将设备与 adb 连接乐成Unknown option: -sAndroid 2.2 以下不支持安装到 sdcard倒霉用 -s 参数No space left on device空间不足清算空间Permission denied … sdcard …sdcard 不可用signatures do not match the previously installed version; ignoring! 已安装该应用且签名不一致先卸载设备上的该应用,再安装
命令格式如下:
  1. # <packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录
  2. adb uninstall [-k] <packagename>
复制代码
  1. adb uninstall android.uid.sysytem
复制代码

命令格式如下:
  1. # <packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」
  2. adb shell pm clear <packagename>
复制代码
  1. adb shell pm clear android.uid.sysytem
复制代码

  1. adb shell dumpsys activity activities | grep mResumedActivity
复制代码

  1. adb shell dumpsys activity activities | findstr mResumedActivity
  2. adb shell "dumpsys activity activities | grep mResumedActivity"
复制代码

命令格式如下:
  1. # <packagename> 参数不是必须的,指定 <packagename> 表示查看与某个包名相关的 Services,不指定表示查看所有 Services
  2. adb shell dumpsys activity services [<packagename>]
复制代码

输出中包含许多信息,包罗Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等
命令格式如下:
  1. adb shell dumpsys package <packagename>
复制代码

命令格式如下:
  1. adb shell pm path <PACKAGE>
复制代码

重要是利用am <command>命令,常用的 <command> 如下:
command用途start [options] <INTENT> 启动<INTENT> 指定的 Activitystartservice [options] <INTENT> 启动<INTENT> 指定的 Servicebroadcast [options] <INTENT> 发送<INTENT> 指定的广播force-stop <packagename> 停止<packagename>干系的历程 <INTENT>参数很灵活,和写 Android 程序期间码里的 Intent 相对应
用于决定 intent 对象的选项如下:
参数含义-a <ACTION> 指定 action,比如android.intent.action.VIEW -c <CATEGORY> 指定 category,比如android.intent.category.APP_CONTACTS -n <COMPONENT> 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity <INTENT> 里还能带数据,就像写代码时的 Bundle 一样:
参数含义--esn <EXTRA_KEY>null 值(只有 key 名)-e--es <EXTRA_KEY> <EXTRA_STRING_VALUE> --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> boolean 值--ei <EXTRA_KEY> <EXTRA_INT_VALUE> integer 值--el <EXTRA_KEY> <EXTRA_LONG_VALUE> long 值--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> float 值--eu <EXTRA_KEY> <EXTRA_URI_VALUE> URI--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE> component name --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...] integer 数组--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] long 数组 命令格式如下:
  1. adb shell am start [options] <INTENT>
复制代码
  1. # 调起微信主界面
  2. adb shell am start -n com.tencent.mm/.ui.LauncherUI
复制代码
  1. # 表示调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world
  2. adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
复制代码

命令格式如下:
  1. adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER
复制代码
  1. # 调起微信主界面
  2. adb shell monkey -p com.tencent.mm -c android.intent.category.LAUNCHER 1
复制代码

命令格式如下:
  1. adb shell am startservice [options] <INTENT>
复制代码
  1. # 调起微信的某 Service
  2. adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
复制代码

命令格式如下:
  1. adb shell am stopservice [options] <INTENT>
复制代码

命令格式如下:既能发送系统预界说的广播,也能发送自界说广播
  1. adb shell am broadcast [options] <INTENT>
复制代码
  1. # 向所有组件广播 BOOT_COMPLETED
  2. adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
  3. # 只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 广播 BOOT_COMPLETED
  4. adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
复制代码
如下是部门系统预界说广播及正常触发机遇:
action触发机遇android.net.conn.CONNECTIVITY_CHANGE网络连接发生变化android.intent.action.SCREEN_ON屏幕点亮android.intent.action.SCREEN_OFF屏幕熄灭android.intent.action.BATTERY_LOW电量低,会弹出电量低提示框android.intent.action.BATTERY_OKAY电量规复了android.intent.action.BOOT_COMPLETED设备启动完毕android.intent.action.DEVICE_STORAGE_LOW存储空间过低android.intent.action.DEVICE_STORAGE_OK存储空间规复android.intent.action.PACKAGE_ADDED安装了新的应用android.net.wifi.STATE_CHANGEWiFi 连接状态发生变化android.net.wifi.WIFI_STATE_CHANGEDWiFi 状态变为启用/关闭/正在启动/正在关闭/未知android.intent.action.BATTERY_CHANGED电池电量发生变化android.intent.action.INPUT_METHOD_CHANGED系统输入法发生变化android.intent.action.ACTION_POWER_CONNECTED外部电源连接android.intent.action.ACTION_POWER_DISCONNECTED外部电源断开连接android.intent.action.DREAMING_STARTED系统开始休眠android.intent.action.DREAMING_STOPPED系统停止休眠android.intent.action.WALLPAPER_CHANGED壁纸发生变化android.intent.action.HEADSET_PLUG插入耳机android.intent.action.MEDIA_UNMOUNTED卸载外部介质android.intent.action.MEDIA_MOUNTED挂载外部介质android.os.action.POWER_SAVE_MODE_CHANGED省电模式开启
命令格式如下:
  1. adb shell am force-stop <packagename>
复制代码

命令格式如下:
  1. adb shell am send-trim-memory  <pid> <level>
复制代码
  1. # HOME 键
  2. adb shell input keyevent 3
复制代码
  1. level:
  2. 1)HIDDEN
  3. 2)RUNNING_MODERATE
  4. 3)BACKGROUND
  5. 4)RUNNING_LOW
  6. 5)MODERATE
  7. 6)RUNNING_CRITICAL
  8. 7)COMPLETE
复制代码
  1. # 表示向 pid=986 的进程,发出 level=RUNNING_LOW 的收紧内存命令
  2. adb shell am send-trim-memory  986 RUNNING_LOW
复制代码

命令格式如下:
  1. adb pull <设备里的文件路径> [电脑上的目录]
复制代码

命令格式如下:
  1. adb push <电脑上的文件路径> <设备里的目录>
复制代码

在 adb shell 里有个很实用的命令叫 input,input 命令的完整 help 信息如下:
  1. Usage: input [<source>] <command> [<arg>...]
  2. The sources are:
  3.       mouse
  4.       keyboard
  5.       joystick
  6.       touchnavigation
  7.       touchpad
  8.       trackball
  9.       stylus
  10.       dpad
  11.       gesture
  12.       touchscreen
  13.       gamepad
  14. The commands and default sources are:
  15.       text <string> (Default: touchscreen)
  16.       keyevent [--longpress] <key code number or name> ... (Default: keyboard)
  17.       tap <x> <y> (Default: touchscreen)
  18.       swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
  19.       press (Default: trackball)
  20.       roll <dx> <dy> (Default: trackball)
复制代码
利用adb shell input keyevent <keycode>命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,部门内容如下:
keycode含义3HOME 键4返回键5打开拨号应用6挂断电话24增长音量2526电源键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 则让系统休眠
Android 系统的日志分为两部门,底层的 Linux 内核日志输出到/proc/kmsg,Android 的日志输出到 /dev/log
命令格式如下:
  1. [adb] logcat [<option>] ... [<filter-spec>] ...
复制代码
按级别过滤日志:
  1. Android 的日志分为如下几个优先级(priority):
  2. 1)V :Verbose(最低,输出得最多)
  3. 2)D :Debug
  4. 3)I : Info
  5. 4)W :Warning
  6. 5)E : Error
  7. 6)F : Fatal
  8. 7)S :Silent(最高,啥也不输出)
  9. 按某级别过滤日志则会将该级别及以上的日志输出
  10. # 比如如下命令会将Warning、Error、Fatal 和 Silent 日志输出
  11. adb logcat *:W
复制代码
按 tag 和级别过滤日志:
  1. # <filter-spec> 可以由多个 <tag>[:priority] 组成
  2. # 下面表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)
  3. adb logcat ActivityManager:I MyApp:D *:S
复制代码
日志格式:可以用adb logcat -v <format> 选项指定日志输出格式
  1. 日志支持按以下几种 <format>:
  2. 1)brief默认格式。格式为:<priority>/<tag>(<pid>): <message>
  3. 示例:D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
  4. 2)process格式为:<priority>(<pid>) <message>
  5. 示例:D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
  6. 3)tag格式为:<priority>/<tag>: <message>
  7. 示例:D/HeadsetStateMachine: Disconnected process message: 10, size: 0
  8. 4)raw格式为:<message>
  9. 示例:Disconnected process message: 10, size: 0
  10. 5)time格式为:<datetime> <priority>/<tag>(<pid>): <message>
  11. 示例:08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
  12. 6)threadtime格式为:<datetime> <pid> <tid> <priority> <tag>: <message>
  13. 示例:08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
  14. 7)long格式为:[ <datetime> <pid>:<tid> <priority>/<tag> ] <message>
  15. 示例:[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ] Disconnected process message: 10, size: 0
  16. # 指定格式可与上面的过滤同时使用,如下:
  17. adb logcat -v long ActivityManager:I *:S
复制代码

  1. adb logcat -c
复制代码

  1. adb shell dmesg
复制代码

  1. adb shell getprop ro.product.model
复制代码

  1. adb shell settings get secure android_id
复制代码

  1. # 在 Android 4.4 及以下版本可通过如下命令获取 IMEI,其中的 Device ID 就是 IMEI:
  2. adb shell dumpsys iphonesubinfo
  3. # 在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限),把里面的有效内容提取出来就是 IMEI :
  4. adb shell
  5. su
  6. service call iphonesubinfo 1
复制代码

  1. adb shell getprop ro.build.version.release
复制代码

手动查看IP地址:「设置」-「关于手机」-「状态信息」-「IP地址」,下面是通过ADB查看IP地址
  1. adb shell ifconfig
复制代码

  1. # 网络连接名称、启用状态、IP 地址和 Mac 地址等信息
  2. adb shell netcfg
复制代码

  1. adb shell cat /sys/class/net/wlan0/address
复制代码

  1. adb shell cat /proc/cpuinfo
复制代码

  1. # 注意,在命令执行后展示的信息中MemTotal 就是设备的总内存,MemFree 是当前空闲内存
  2. adb shell cat /proc/meminfo
复制代码

  1. adb shell cat /system/build.prop
  2. # 或通过 adb shell getprop <属性名>,比如查看SDK版本
  3. adb shell getprop   ro.build.version.sdk
复制代码
部门系统属性如下:
属性名含义ro.build.version.sdkSDK 版本ro.build.version.releaseAndroid 系统版本ro.build.version.security_patchAndroid 安全补丁程序级别ro.product.model型号ro.product.brand 品牌ro.product.name设备名ro.product.board 处置惩罚器型号ro.product.cpu.abilistCPU 支持的 abi 列表persist.sys.isUsbOtgEnabled 是否支持 OTGdalvik.vm.heapsize每个应用程序的内存上限ro.sf.lcd_density屏幕密度 :一些定制的 ROM 大概修改过 CPU 支持的 abi 列表的属性名,如果用 ro.product.cpu.abilist 属性名查找不到,尝试如下命令:
  1. adb shell cat /system/build.prop | grep ro.product.cpu.abi
复制代码

注:用命令关闭后,只能手动规复,步骤:「设置」-「开发者选项」-「Android 调试」
  1. adb shell settings put global adb_enabled 0
复制代码

  1. adb shell settings put global hidden_api_policy_pre_p_apps 1
  2. adb shell settings put global hidden_api_policy_p_apps 1
复制代码
数字的含义如下:
值含义0禁止检测非 SDK 接口的调用。该情况下,日志记载功能被禁用,而且令strict mode API,即 detectNonSdkApiUsage() 无效,不保举1仅警告——允许访问所有非 SDK 接口,但保留日志中的警告信息,可继续利用strick mode API2禁止调用深灰名单和黑名单中的接口3禁止调用黑名单中的接口,但允许调用深灰名单中的接口
  1. adb shell settings delete global hidden_api_policy_pre_p_apps
  2. adb shell settings delete global hidden_api_policy_p_apps
复制代码

  1. adb shell settings put global policy_control <key-values>
复制代码
<key-values> 可由如下几种键及其对应的值构成,格式为 <key1>=<value1>:<key2>=<value2>,如下:
key含义immersive.full同时隐藏immersive.status 隐藏状态栏immersive.navigation 隐藏导航栏immersive.preconfirms? 这些键对应的值可则如下值用逗号组合:
value含义apps 所有应用*所有界面packagename指定应用-packagename排除指定应用 例如表现设置在所有界面下都同时隐藏状态栏和导航栏:
  1. # 表示设置在包名为 com.package1 和 com.package2 的应用里隐藏状态栏,在除了包名为 com.package3 的所有应用里隐藏导航栏
  2. adb shell settings put global policy_control immersive.full=*
复制代码

  1. # 先截图保存到设备的/sdcard/下
  2. adb exec-out screencap -p > /sdcard/test.png
  3. # 将 png 文件导出到电脑
  4. adb pull /sdcard/test.png
复制代码
adb shell screencap -h查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:
参数含义-p指定保存文件为 png 格式-d display-id指定截图的表现屏编号(有多表现屏的情况下) :如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要利用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout
其它方式截图并保存到电脑的方法:
  1. # Linux 和 Windows
  2. adb shell screencap -p | sed "s/\r$//" > test.png
  3. # Mac OS X
  4. adb shell screencap -p | gsed "s/\r$//" > test.png
复制代码
:利用其它方式截图并保存到电脑的方法,需要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安装目次的 bin 文件夹下也有,并将sed.exe 所在文件夹添加到 PATH 情况变量里;Mac 下利用系统自带的 sed 命令会报错,需要安装 gnu-sed,利用该命令进行安装brew install gnu-sed

  1. # 录制屏幕以 mp4 格式保存到 /sdcard,默认录制时间和最长录制时间都是 180 秒
  2. adb shell screenrecord /sdcard/filename.mp4
  3. # 导出mp4到电脑
  4. adb pull /sdcard/filename.mp4
复制代码
adb shell screenrecord --help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:
参数含义–size WIDTHxHEIGHT视频的尺寸,比如 1280x720,默认是屏幕分辨率–bit-rate RATE 视频的比特率,默认是 4Mbps–time-limit TIME 录制时长,单元秒–verbose输出更多信息
:需要root权限,因为/system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命令、删除自带应用等需要对 /system 进行写操作,所以需要重新挂载它为可读写
  1. adb remount
  2. # 或利用如下步骤:1)进入 shell 并切换到 root 用户权限,执行命令:adb shell su2)查看当前分区挂载情况,执行命令:mount | grep system   会输出如下内容:/dev/block/platform/mstar_mci.0/by-name/system /system ext4 ro,relatime,data=ordered 0 0设备:/dev/block/platform/mstar_mci.0/by-name/system挂载点:/system权限:ro,即只读3)以读写方式(rw)重新挂载/system分区,执行命令:mount -o remount,rw /dev/block/platform/mstar_mci.0/by-name/system /system  或mount -o remount /system
复制代码

  1. # 需Root 权限,全部命令执行完后展示的内容中ssid 即为 WLAN 设置里看到的名称,psk 为密码,key_mgmt 为安全加密方式
  2. adb shell
  3. su
  4. cat /data/misc/wifi/*.conf
复制代码
需要留意 Android O 或以后,WiFi 暗码保存的地址有变化,是在 WifiConfigStore.xml 里面,如下:
  1. # 需Root 权限,全部命令执行完后展示的内容中的 ConfigKey为WiFi 名字、PreSharedKey为WiFi 密码
  2. adb shell
  3. su
  4. cat /data/misc/wifi/WifiConfigStore.xml
复制代码

  1. # 需Root 权限,如下表示将系统日期和时间更改为 2022 年 08 月 21 日 13 点 11 分 00 秒
  2. adb shell
  3. su
  4. date -s 20220821.131100
复制代码

  1. adb reboot
复制代码

  1. adb shell
  2. su
复制代码

Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试,如下:
  1. # 表示向 <packagename> 指定的应用程序发送 500 个伪随机事件
  2. adb shell monkey -p <packagename> -v 500
复制代码

  1. adb root
  2. adb shell svc wifi enable
复制代码

  1. adb root
  2. adb shell svc wifi disable
复制代码

  1. lld  --version
复制代码

  1. jdb -attach locaohost:8000
  2. jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
复制代码

  1. adb reboot
  2. recovery
复制代码

  1. adb reboot
复制代码

  1. adb reboot
  2. bootloader
复制代码

如果下载了 Android 设备对应的系统更新包到电脑上,那么可通过 adb 来完成更新,以 Recovery 模式下更新为例:
  1. 1)重启到 Recovery 模式。命令:adb reboot
  2. recovery2)在设备的 Recovery 界面上操作进入 Apply update–Apply from ADB注:不同的 Recovery 菜单大概与此有差异,有的是一级菜单就有 Apply update from ADB3)通过 adb 上传和更新系统。命令:adb sideload <path-to-update.zip>
复制代码

  1. adb root
  2. adb shell setenforce 1
复制代码

  1. adb root
  2. adb shell setenforce 0
复制代码
:遇到权限问题,在logcat大概kernel的log中肯定会打印avc denied提示缺少什么权限,通过命令过滤出所有的avc denied,再根据这些log进行排查:
  1. cat /proc/kmsg | grep avc
  2. dmesg | grep avc
复制代码

  1. adb root
  2. adb enable-verity
复制代码

  1. adb root
  2. adb disable-verity或fastboot --disable-verity flash vbmeta vbmeta.img
复制代码

  1. # adb shell settings put global http_proxy 代理IP地址:端口号
  2. adb shell settings put global http_proxy 192.168.137.1:8080
  3. adb shell settings put global https_proxy 192.168.137.1:8080
复制代码

  1. adb shell settings put global http_proxy :0
复制代码

  1. adb shell settings delete global http_proxy
  2. adb shell settings delete global global_http_proxy_host
  3. adb shell settings delete global global_http_proxy_port
  4. adb reboot
复制代码

  1. adb shell ps
复制代码
历程各列含义如下:
列名含义USER所属用户PID历程 IDPPID父历程 IDNAME历程名
  1. adb shell top
复制代码
top命令展示内容的各列含义如下:
列名含义PID历程 IDPR 优先级CPU%当前刹时占用 CPU 百分比S历程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸历程)#THR线程数VSSVirtual Set Size虚拟耗用内存(包含共享库占用的内存)RSSResident Set Size 现实利用物理内存(包含共享库占用的内存)PCY调理策略优先级,SP_BACKGROUND/SPFOREGROUNDUID历程所有者的用户 IDNAME历程名 top 命令还支持一些命令行参数,详细用法如下:
  1. Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
  2.     -m num  最多显示多少个进程
  3.     -n num  刷新多少次后退出
  4.     -d num  刷新时间间隔(单位秒,默认值 5)
  5.     -s col  按某列排序(可用 col 值:cpu, vss, rss, thr)
  6.     -t      显示线程信息
  7.     -h      显示帮助文档
复制代码

  1. # adb shell dumpsys package <packagename>
  2. | grep userId=$ adb shell dumpsys package cn.test.main | grep userId=# 通过 ps 命令找到对应历程的 pid 之后 adb shell cat /proc/<pid>/status | grep Uid$ ps$ cat /proc/28635/status | grep Uid
复制代码

命令功能cat表现文件内容cd切换目次chmod改变文件的存取模式/访问权限df查看磁盘空间利用情况grep过滤输出kill杀死指定 PID 的历程ls枚举目次内容mount挂载目次的查看和管理mv移动或重命名文件ps查看正在运行的历程rm删除文件top查看历程的资源占用情况 参考链接
https://cloud.tencent.com/developer/article/1797357
https://zhuanlan.zhihu.com/p/43731848
https://github.com/android/platform_frameworks_base/blob/master/core%2Fjava%2Fandroid%2Fcontent%2Fpm%2FPackageManager.java
https://developer.android.com/studio/command-line/adb.html
https://developer.android.com/studio/command-line/shell.html
https://developer.android.com/studio/command-line/logcat.html
https://zmywly8866.github.io/2015/01/24/all-adb-command.html
https://github.com/ZQiang94/StudyRecords/blob/master/other/src/main/java/com/other/adb%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95.md
https://www.jianshu.com/p/860bc2bf1a6a
https://stackoverflow.com/questions/27002663/adb-shell-dumpsys-iphonesubinfo-not-working-since-android-5-0-lollipop
http://yifeiyuan.me/2016/06/30/ADB%E5%91%BD%E4%BB%A4%E6%95%B4%E7%90%86/
http://blog.csdn.net/kittyboy0001/article/details/38562515
https://cabins.github.io/2016/03/25/UseAdbLikeAPro-2/

你以为你有许多路可以选择,其实你只有一条路可以走


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4