文章大纲

  • 引言
    • 一、ADB
      • 1、ADB 概述
      • 2、ADB 架构概述
      • 3、ADB 的基本操作
        • 3.1、ADB 的启动和关闭
        • 3.2、指定特定的目标设备
        • 3.3、指定adb server的通信端口
    • 二、adb shell am
      • 1、adb shell am start启动指定Activity
      • 2、adb shell am startService启动指定Service
      • 3、adb shell am broadcast 发送广播
      • 4、adb shell am force-stop 强制停止指定应用
    • 三、adb shell pm
      • 1、adb shell pm list packages 查看本机所有进程包名
      • 2、输出和安装包相关联的文件
      • 3、输出包和安装信息(安装来源)
      • 4、adb shell pm dump 打印APK 的信息
    • 四、adb shell dumpsys
      • 1、adb shell dumpsys activity 查看Activity、Service 信息
      • 2、adb shell dumpsys window 查看Window信息
      • 3、adb shell dumpsys package 查看应用的详细信息
      • 4、adb shell dumpsys battery 查看设备电池信息
    • 五、抓取调试日志和堆栈信息
      • 1、logcat 查看aplog
      • 2、adb shell debuggerd -b pid 获取堆栈信息
      • 3、adb bugreport 获取完整异常报告信息
      • 4、adb shell dmesg 获取内核日志
    • 六、adb 模拟按键输入事件
    • 七、grep 和find 协助筛选
      • 1、grep 查找文件里的内容
        • 1.1、或的关系
        • 1.2、且的关系
      • 2、find查找文件名本身
    • 八、adb shell 查看系统相关信息
        • 1.1、adb shell cat /proc/meminfo 查看内存信息
        • 1.2、adb shell cat /proc/cpuinfo 查看CPU 相关信息
        • 1.3、adb shell cat /proc/pid 查看进程相关信息
        • 1.4、adb shell getprop ro.build.version.release 查看系统版本
        • 1.5、adb shell wm density 查看设备屏幕密度
        • 1.6、adb shell ip route show table main 查看main 路由表
        • 1.7、adb shell ifconfig 查看IP信息
        • 1.8、adb shell cat /system/build.prop 查看硬件属性
      • 9、adb shell dumpsys package < packagename > | grep userId= 查看进程UUID
      • 10、adb shell ps查看正在运行的进程
      • 11、adb 查看SIGNAL
      • 12、adb 操作Android SystemProperties

引言

作为Android 开发,尤其是Framework 调优定制开发,ADB 作为一款调试调优的利器都应该掌握,这篇文章好好总结下常用的指令

一、ADB

1、ADB 概述

ADB 全称为Android Debug Bridge,翻译过来为Android调试桥梁,主要用于连接服务端(Android设备)与客户端(发出adb指令的终端)。Android的初衷是用adb这样的一个命令行工具使得开发者在开发android应用的过程中更快更好的调试apk,adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能。

Android SDK 在platform-tools目录下自带adb命令行工具。

2、ADB 架构概述

ADB 基于常见的C/S架构,主要由三大组件构成:

  • adb 客户端——运行于开发PC系统中通过命令行发出adb 指令,执行DDMS时也会启动一个adb client。当命令行从shell或脚本中运行adb命令时,ADB程序首先尝试找到PC上的adb server,如果找不到,ADB程序自动启动一个adb server,在设备的adbd和PC端的adb server建立连接后,adb client就可以向adb servcer发送服务请求,进程名为adb。

    所有 adb 客户端均通过端口 5037与 adb server通信

  • adb 服务端——以后台进程的形式运行于开发PC系统中,用于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,adb server还需要将adb client的请求(即adb 指令)通过usb或者tcp的方式发送到对应的adbd 进程上,进程名为adb。

    有两种方式可以连接到Android设备:

    • 通过USB 线物理直连,则adb 指令通过usb方式发送到adbd 进程
    • 通过adb connect ip 无线局域网逻辑连接,则adb 指令通过TCP方式发送到adbd进程
  • 守护进程(adbd)——即adb start-server 启动adb 时显示的运行在设备端的常驻进程daemon,进程adbd作为一个后台进程在Android设备中运行,负责连接adb server并响应运行在PC的客户端。

    tmp\home_2247> adb start-server
    * daemon not running; starting now at tcp:5037
    * daemon started successfully
    

当您启动某个 adb client时,它会先检查是否有 adb server进程正在运行。如果没有则会先启动server进程,server在启动后就与本地 TCP 端口 5037 绑定并监听 adb 客户端发出的命令。接着server会与所有正在运行的设备建立连接,通过扫描TCP端口 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口来查找模拟器。server一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。

请注意每个模拟器都使用一对按顺序排列的端口:用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口,例如:

  • 模拟器 1,控制台:5554 vs 模拟器 1,adb:5555
  • 模拟器 2,控制台:5556 vs 模拟器 2,adb:5557

在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

3、ADB 的基本操作

3.1、ADB 的启动和关闭

  • adb start-server 启动adb
  • adb kill-server 关闭adb,有时候adb 无效了,你可以通过kill掉再start操作一下。

3.2、指定特定的目标设备

如果有多个设备/模拟器连接,则需要为命令指定目标设备,可以通过 adb [-d|-e|-s ] 再接指令,比如adb -s 22529b7a install -r xxx.apk

参数 含义
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s serial_number 指定相应 serial_number号的设备/模拟器为命令目标

可以通过adb devices 查看对应的serial_number,格式为 [serial_number] [state],其中state取值:

  • offline —— 表示设备未连接成功或无响应。

  • device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。

  • no device —— 没有设备/模拟器连接。

3.3、指定adb server的通信端口

默认的端口为5037 或者5555,视adb 版本而定,可以手动通过 adb -P < port > start-server 指定端口

二、adb shell am

adb shell am <command>本质上就是通过命令行的形式使用AMS服务,常见command 命令有:

command 说明
start [options] < INTENT > 启动 < INTENT > 指定的 Activity
startservice [options] < INTENT > 启动 < INTENT > 指定的 Service
broadcast [options] < INTENT > 发送 < INTENT > 指定的广播
force-stop < INTENT > 停止 < INTENT > 相关的进程

常见的options选项:

参数 说明
-a 指定 action,比如 android.intent.action.VIEW
-c 指定 category,比如 android.intent.category.APP_CONTACTS
-n 指定完整 component 名,用于明确指定启动哪个 Activity

就像写代码时的 Bundle 一样,INTENT 里也还能带数据

1、adb shell am start启动指定Activity

  • adb shell am start -n com.android.settings/com.android.settings.Settings
  • adb shell am start -n com.crazyai.aivoiceserver/com.crazyai.aivoiceserver.MainActivity
  • adb shell am start -n com.android.settings/com.android.settings.wifi.WifiSettings
  • adb shell am start -n com.crazyai.aivoiceserver/.MainActivity --es “toast” “hello, world”

2、adb shell am startService启动指定Service

adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

3、adb shell am broadcast 发送广播

  • adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 向所有组件广播
  • adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.crazyai.aivoiceserver/.BootCompletedReceiver 只向所有组件com.crazyai.aivoiceserver/.BootCompletedReceiver广播

4、adb shell am force-stop 强制停止指定应用

三、adb shell pm

adb shell pm 本质上就是通过命令行的形式使用PMS服务,通用格式:

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [–user USER_ID] [FILTER]

参数 显示列表
所有应用
-f 显示应用关联的 apk 文件
-d 只显示 disabled 的应用
-e 只显示 enabled 的应用
-s 只显示系统应用
-3 只显示第三方应用
-i 显示应用的 installer,安装来源
-u 包含已卸载应用
FILTER 包名包含 FILTER 字符串

1、adb shell pm list packages 查看本机所有进程包名

  • adb shell pm list packages -s 只显示本机所有系统应用的包名
  • adb shell pm list packages -s 只显示本机所有第三方应用的包名
  • adb shell pm list packages crazyai 或者 adb shell pm list packages | grep crazyai 显示本机应用的包名中包含crazyai 的所有包名

2、输出和安装包相关联的文件

adb shell pm list packages -f

  • 输出本机启用的包 adb shell pm list packages -e
  • 输出本机禁用的包 adb shell pm list packages -d

3、输出包和安装信息(安装来源)

adb shll pm list packages -i

4、adb shell pm dump 打印APK 的信息

adb shell pm dump com.crazyai.aivoiceserver | grep version

四、adb shell dumpsys

1、adb shell dumpsys activity 查看Activity、Service 信息

  • adb shell dumpsys activity activities 查看所有Activities信息
  • adb shell dumpsys activity | findstr “mFocusedActivity” 查看当前Activity
  • adb shell dumpsys activity services [ packagename ] 参数不是必须的,指定 packagename 表示查看与某个包名相关的 Services,不指定表示查看所有 Services;packagename 只给出部分包名则会模糊匹配。

2、adb shell dumpsys window 查看Window信息

  • adb shell dumpsys window windows | grep mFocusedApp 查看当前window
  • adb shell dumpsys window windows | findstr mFocusedApp 查看当前window
  • adb shell dumpsys window displays 查看显示屏的具体参数

3、adb shell dumpsys package 查看应用的详细信息

  • adb shell dumpsys package < packagename > 查看应用详细信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等

4、adb shell dumpsys battery 查看设备电池信息

五、抓取调试日志和堆栈信息

1、logcat 查看aplog

  • adb shell logcat -v time > C:\Users\Administrator\Desktop\logcat.txt

  • adb pull < 设备里的文件路径 > <电脑上的目录>

  • adb push <电脑上的文件路径> <设备里的目录>

  • 打印默认日志数据——adb logcat

  • 需要打印日志详细时间的简单数据——adb logcat -v time

  • 只打印指定级别的日志——只打印级别为Error的日志信息,adb logcat *:E

  • 需要打印时间和级别是Error的信息——adb logcat -v time *:E

  • 将日志保存到电脑固定的位置——adb logcat -v time >D:\log.txt

grep 过滤筛选指定条件的日志

  • adb logcat | grep “MyApp”
  • adb logcat | find “ExternalStorage”

2、adb shell debuggerd -b pid 获取堆栈信息

展示的是指定进程里的线程堆栈信息,前面是线程名称,sysTid为进程/线程Id,pc代表PC 计数器,括号内为函数入口地址的偏移量等等。

----- pid 3250 at 2021-01-08 14:11:29 -----
Cmd line: com.crazyai.aivoiceserver
ABI: 'arm64'"y.aivoiceserver" sysTid=3250#00 pc 00000000000685d0  /system/lib64/libc.so (__epoll_pwait+8)#01 pc 000000000001f500  /system/lib64/libc.so (epoll_pwait+48)#02 pc 0000000000015c1c  /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+144)#03 pc 0000000000015b04  /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+108)#04 pc 000000000011245c  /system/lib64/libandroid_runtime.so (_ZN7androidL38android_os_MessageQueue_nativePollOnceEP7_JNIEnvP8_jobjectli+44)#05 pc 00000000007d3c5c  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.app.NativeActivity.onWindowFocusChangedNative [DEDUPED]+140)#06 pc 0000000000f83198  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.MessageQueue.next+216)#07 pc 0000000000f7cf08  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.Looper.loop+504)#08 pc 00000000006b6cb8  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.app.ActivityThread.main+904)#09 pc 0000000000506e38  /system/lib64/libart.so (art_quick_invoke_static_stub+600)#10 pc 00000000000d804c  /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+260)#11 pc 000000000042f90c  /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+104)#12 pc 0000000000431464  /system/lib64/libart.so (_ZN3art12InvokeMethodERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectS4_S4_m+1460)#13 pc 00000000003bb318  /system/lib64/libart.so (_ZN3artL13Method_invokeEP7_JNIEnvP8_jobjectS3_S3_+52)#14 pc 0000000000266f74  /system/framework/arm64/boot.oat (offset 0x1db000) (java.lang.Class.getDeclaredMethodInternal [DEDUPED]+180)#15 pc 00000000016aa5e8  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (com.android.internal.os.Zygote$MethodAndArgsCaller.run+136)#16 pc 00000000016ae3f4  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (com.android.internal.os.ZygoteInit.main+2884)#17 pc 0000000000506e38  /system/lib64/libart.so (art_quick_invoke_static_stub+600)#18 pc 00000000000d804c  /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+260)#19 pc 000000000042f90c  /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+104)#20 pc 000000000042f568  /system/lib64/libart.so (_ZN3art17InvokeWithVarArgsERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDSt9__va_list+424)#21 pc 0000000000346160  /system/lib64/libart.so (_ZN3art3JNI21CallStaticVoidMethodVEP7_JNIEnvP7_jclassP10_jmethodIDSt9__va_list+624)#22 pc 00000000000b56c4  /system/lib64/libandroid_runtime.so (_ZN7_JNIEnv20CallStaticVoidMethodEP7_jclassP10_jmethodIDz+120)#23 pc 00000000000b7760  /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcRKNS_6VectorINS_7String8EEEb+816)#24 pc 0000000000002454  /system/bin/app_process64 (main+1348)#25 pc 000000000001b66c  /system/lib64/libc.so (__libc_init+88)#26 pc 0000000000001e70  /system/bin/app_process64 (do_arm64_start+80)"Profile Saver" sysTid=3311#00 pc 000000000001d8ec  /system/lib64/libc.so (syscall+28)#01 pc 00000000000e1a48  /system/lib64/libart.so (_ZN3art17ConditionVariable16WaitHoldingLocksEPNS_6ThreadE+152)#02 pc 000000000030904c  /system/lib64/libart.so (_ZN3art12ProfileSaver3RunEv+352)#03 pc 000000000030afb8  /system/lib64/libart.so (_ZN3art12ProfileSaver21RunProfileSaverThreadEPv+88)#04 pc 0000000000065f88  /system/lib64/libc.so (_ZL15__pthread_startPv+36)#05 pc 000000000001ed24  /system/lib64/libc.so (__start_thread+68)"MoHandlerThread" sysTid=3323#00 pc 00000000000685d0  /system/lib64/libc.so (__epoll_pwait+8)#01 pc 000000000001f500  /system/lib64/libc.so (epoll_pwait+48)#02 pc 0000000000015c1c  /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+144)#03 pc 0000000000015b04  /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+108)#04 pc 000000000011245c  /system/lib64/libandroid_runtime.so (_ZN7androidL38android_os_MessageQueue_nativePollOnceEP7_JNIEnvP8_jobjectli+44)#05 pc 00000000007d3c5c  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.app.NativeActivity.onWindowFocusChangedNative [DEDUPED]+140)#06 pc 0000000000f83198  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.MessageQueue.next+216)#07 pc 0000000000f7cf08  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.Looper.loop+504)#08 pc 0000000000bffbbc  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.HandlerThread.run+620)#09 pc 0000000000506b84  /system/lib64/libart.so (art_quick_invoke_stub+580)#10 pc 00000000000d8010  /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+200)#11 pc 000000000042f90c  /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+104)#12 pc 0000000000430a98  /system/lib64/libart.so (_ZN3art35InvokeVirtualOrInterfaceWithJValuesERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDP6jvalue+432)#13 pc 0000000000456dbc  /system/lib64/libart.so (_ZN3art6Thread14CreateCallbackEPv+1140)#14 pc 0000000000065f88  /system/lib64/libc.so (_ZL15__pthread_startPv+36)#15 pc 000000000001ed24  /system/lib64/libc.so (__start_thread+68)"Binder:3250_5" sysTid=17822#00 pc 00000000000686bc  /system/lib64/libc.so (__ioctl+4)#01 pc 0000000000023ed0  /system/lib64/libc.so (ioctl+132)#02 pc 0000000000061aa8  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb+256)#03 pc 0000000000061c18  /system/lib64/libbinder.so (_ZN7android14IPCThreadState20getAndExecuteCommandEv+24)#04 pc 00000000000622e8  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb+60)#05 pc 0000000000083944  /system/lib64/libbinder.so (_ZN7android10PoolThread10threadLoopEv+24)#06 pc 000000000001160c  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+280)#07 pc 00000000000b7a5c  /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+136)#08 pc 0000000000065f88  /system/lib64/libc.so (_ZL15__pthread_startPv+36)#09 pc 000000000001ed24  /system/lib64/libc.so (__start_thread+68)"VBOT#WakeupComm" sysTid=32359#00 pc 00000000000685d0  /system/lib64/libc.so (__epoll_pwait+8)#01 pc 000000000001f500  /system/lib64/libc.so (epoll_pwait+48)#02 pc 0000000000015c1c  /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+144)#03 pc 0000000000015b04  /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+108)#04 pc 000000000011245c  /system/lib64/libandroid_runtime.so (_ZN7androidL38android_os_MessageQueue_nativePollOnceEP7_JNIEnvP8_jobjectli+44)#05 pc 00000000007d3c5c  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.app.NativeActivity.onWindowFocusChangedNative [DEDUPED]+140)#06 pc 0000000000f83198  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.MessageQueue.next+216)#07 pc 0000000000f7cf08  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.Looper.loop+504)#08 pc 0000000000bffbbc  /system/framework/arm64/boot-framework.oat (offset 0x5f0000) (android.os.HandlerThread.run+620)#09 pc 0000000000506b84  /system/lib64/libart.so (art_quick_invoke_stub+580)#10 pc 00000000000d8010  /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+200)#11 pc 000000000042f90c  /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+104)#12 pc 0000000000430a98  /system/lib64/libart.so (_ZN3art35InvokeVirtualOrInterfaceWithJValuesERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDP6jvalue+432)#13 pc 0000000000456dbc  /system/lib64/libart.so (_ZN3art6Thread14CreateCallbackEPv+1140)#14 pc 0000000000065f88  /system/lib64/libc.so (_ZL15__pthread_startPv+36)#15 pc 000000000001ed24  /system/lib64/libc.so (__start_thread+68)----- end 3250 -----

3、adb bugreport 获取完整异常报告信息

执行adb bugreport 后会在当前路径下生成一个异常报告压缩包(保存着所有进程的堆栈快照),文件名以bugreport_开头。

4、adb shell dmesg 获取内核日志

六、adb 模拟按键输入事件

Usage: input [] […]

The sources are:
dpad
keyboard
mouse
touchpad
gamepad
touchnavigation
joystick
touchscreen
stylus
trackball

The commands and default sources are:
text (Default: touchscreen)
keyevent [–longpress] … (Default: keyboard)
tap (Default: touchscreen)
swipe [duration(ms)] (Default: touchscreen)
draganddrop [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll (Default: trackball)

keycode 含义
3 HOME 键
4 返回键
5 打开拨号应用
6 挂断电话
24 增加音量
25 降低音量
26 电源键
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 则让系统休眠
// 左移
adb shell input keyevent 22
// 确认 “回车”
adb shell input keyevent 66
adb shell input keyevent 26
db shell input keyevent 3
db shell input keyevent 4
//在焦点处于某文本框时,可以通过 input 命令来输入文本
adb shell input text hello

七、grep 和find 协助筛选

1、grep 查找文件里的内容

  • grep -r -n “files_activity” ./frameworks/

  • grep -r -n “com.android.mtp.documents” ./mojf/aibox/

  • find . -name “*.cpp” | xargs grep -i $1

1.1、或的关系

  • grep -E “key1|key2|key3…keyn” files

  • grep -E “key1|key2|key3…keyn” dirpath

1.2、且的关系

  • grep key1 | grep key2 | grep key4 … | grep keyn files

  • grep key1 | grep key2 | grep key4 … | grep keyn dirpath

2、find查找文件名本身

  • find ./frameworks/ -name “files_activity.*”

  • find ./ -name “files_activity.*”

八、adb shell 查看系统相关信息

1.1、adb shell cat /proc/meminfo 查看内存信息

1.2、adb shell cat /proc/cpuinfo 查看CPU 相关信息

1.3、adb shell cat /proc/pid 查看进程相关信息

1.4、adb shell getprop ro.build.version.release 查看系统版本

1.5、adb shell wm density 查看设备屏幕密度

1.6、adb shell ip route show table main 查看main 路由表

rk3399_all:/ # ip route show table main
default dev ppp0  scope link
10.31.23.0/24 dev eth0  proto kernel  scope link  src 10.31.23.1
10.64.64.64 dev ppp0  proto kernel  scope link  src 100.149.134.193
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.100

1.7、adb shell ifconfig 查看IP信息

1.8、adb shell cat /system/build.prop 查看硬件属性

9、adb shell dumpsys package < packagename > | grep userId= 查看进程UUID

10、adb shell ps查看正在运行的进程

  • adb shell ps | grep com.crazyai.voiceserver

  • adb shell ps pid -t

  • adb shell ps keyword 查看正在运行的匹配keyword的进程

  • adb shell top 查看实时资源占用情况

11、adb 查看SIGNAL

signal 1 应为 SIGHUP

PS C:\Users\224967\AppData\Local\Temp\Mxt205\tmp\home_224967> adb shell
Hi3751V811:/ # kill -l1    HUP Hangup                                   33     33 Signal 332    INT Interrupt                                34     34 Signal 343   QUIT Quit                                     35     35 Signal 354    ILL Illegal instruction                      36     36 Signal 365   TRAP Trap                                     37     37 Signal 376   ABRT Aborted                                  38     38 Signal 387    BUS Bus error                                39     39 Signal 398    FPE Floating point exception                 40     40 Signal 409   KILL Killed                                   41     41 Signal 41
10   USR1 User signal 1                            42     42 Signal 42
11   SEGV Segmentation fault                       43     43 Signal 43
12   USR2 User signal 2                            44     44 Signal 44
13   PIPE Broken pipe                              45     45 Signal 45
14   ALRM Alarm clock                              46     46 Signal 46
15   TERM Terminated                               47     47 Signal 47
16 STKFLT Stack fault                              48     48 Signal 48
17   CHLD Child exited                             49     49 Signal 49
18   CONT Continue                                 50     50 Signal 50
19   STOP Stopped (signal)                         51     51 Signal 51
20   TSTP Stopped                                  52     52 Signal 52
21   TTIN Stopped (tty input)                      53     53 Signal 53
22   TTOU Stopped (tty output)                     54     54 Signal 54
23    URG Urgent I/O condition                     55     55 Signal 55
24   XCPU CPU time limit exceeded                  56     56 Signal 56
25   XFSZ File size limit exceeded                 57     57 Signal 57
26 VTALRM Virtual timer expired                    58     58 Signal 58
27   PROF Profiling timer expired                  59     59 Signal 59
28  WINCH Window size changed                      60     60 Signal 60
29     IO I/O possible                             61     61 Signal 61
30    PWR Power failure                            62     62 Signal 62
31    SYS Bad system call                          63     63 Signal 63
32     32 Signal 32                                64     64 Signal 64

12、adb 操作Android SystemProperties

  • adb shell getprop 获取指定属性
  • adb shell setprop < key > < value > 设置指定属性

未完待续…

Android 进阶——调试调优利器 ADB常用指令大全相关推荐

  1. 【JVM与性能调优】JVM常用指令之Javap详解

    一.JavaP 命令是什么? JavaP 命令是 Java 语言的一种工具 ,Java中一种反汇编器! 二.JavaP 命令的作用 帮助开发者深入了解 Java 编译器的机制 显示字节代码含义 显示编 ...

  2. Webpack实战:入门、进阶与调优(第2版)

    你是否经常听到项目组的同事抱怨:"为什么Webpack这么慢?""为什么Webpack又出错了?" "发布到线上的代码为什么不能正常工作?" ...

  3. jvm调优 java_opt_Java-100天知识进阶-JVM调优工具-JDK自带工具-知识铺《八》

    原标题:Java-100天知识进阶-JVM调优工具-JDK自带工具-知识铺<八> JVM 监控分析工具 一.JDK 自带工具 1. jconsole JDK/bin 目录下, jconso ...

  4. Go代码调优利器-火焰图

    转自: https://lihaoquan.me/2017/1/1/Profiling-and-Optimizing-Go-using-go-torch.html Go代码调优利器-火焰图 go 调优 ...

  5. 新书推荐 |《Webpack实战:入门、进阶与调优》

    新书推荐 <Webpack实战:入门.进阶与调优> 长按二维码 了解及购买 资深前端工程师.Webpack技术专家.知名开源项目YKit主导者/核心开发者,从功能特性.工作原理.应用实践. ...

  6. JVM调优参数与常用调优命令

    文章目录 Java三大性能调优参数 JVM常用内存调优命令 Java三大性能调优参数 java -Xms128m -Xmx128m -Xss256k -jar xxxxx.jar -Xms:堆的初始值 ...

  7. 数据结构与算法+JVM调优和GC常用算法+数据库高级+复杂sql手写

    数据结构 双向链表 二叉排序树 红黑树 散列表 双向链表: 什么是双向链表 双向链表是一种数据结构,是由若干个节点构成,每个节点由三部分构成, 分别是前驱节点,元素,后继节点,且双向链表中的节点在内存 ...

  8. matlab常用函数与常用指令大全

    matlab常用函数与常用指令大全 matlab常用函数- - 1.特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 i ...

  9. 我的世界服务器修改数据,我的世界常用指令大全,轻松调整服务器数值状态

    在我的世界服务器中能够经过输送指令来微调服务器的一些数值状态,此次就为各位提供我的世界常用指令大全,毕竟我的世界作为一款出色的沙盒游戏,不止是因为原版内容和mod的增光填色,也离不开指令的辅助. /s ...

最新文章

  1. 中国首场AI芯片产业峰会成功举办 GTIC 2018热度空前
  2. Linux下如何启用MySQL数据库远程访问
  3. smarty+php+ajax 简单无刷新分页
  4. 20应用统计考研复试要点(part6)--统计学
  5. Django学习笔记《一》图书管理系统项目挂载到阿里云
  6. java jqgrid json格式_jqGrid 数据之 Json
  7. Linux下的find指令分析 , atime, ctime, mtime
  8. MySql常用语句总结更新
  9. 史上最强三千六百道脑筋急转弯(4)
  10. 数学分析教程(科大)——2.6笔记+习题
  11. 【转载】冗余与热备的概念区别
  12. M26X2 4G工业路由器的技术应用
  13. 今天的一点杂感-20220414
  14. R与Excel之数据分析
  15. IPGuard文档加密基本设置步骤
  16. 安卓13开发者模式怎么开?
  17. 数字人民币智能合约的一个颠覆式创新应用
  18. 一年挥霍150亿:TA抱头痛哭、懊悔不已!
  19. Python 推导式 Comprehension
  20. Android 网络编程(二) HTTP协议解析

热门文章

  1. Linux新手常用命令大全详解
  2. Sersync+rsync数据同步实践:快速解决数据同步问题
  3. Ubuntu16.04.6LTS的安装
  4. localtime 和 gmtime
  5. WPF界面设计技巧(6)—玩玩数字墨水手绘涂鸦
  6. 男人甜言蜜语是女人“精神鸦片”
  7. controller控制器的作用
  8. MSSQL数据库日志的压缩与清除技巧
  9. 03 Wireshark DNS
  10. 一句话理解到底怎么看神经网络的层数