adb命令

1,108 阅读9分钟

1. 通过包名获取apk路径:

adb shell pm path com.huanhailiuxin.jet2020

2. 通过包名获取apk版本

adb shell dumpsys package a.b.c | grep version

adb shell dumpsys package a.b.c | grep version

3. 获取当前显示的Activity:

adb shell dumpsys activity activities | findstr mCurrentFocus

D:\***>adb shell dumpsys activity activities | findstr mCurrentFocus
  mCurrentFocus=Window{687e9a6 u0 android/com.android.internal.app.ResolverActivity}

android是包名
com.android.internal.app.ResolverActivity是Activity的具体路径

如果提示 findstr找不到命令,使用 grep 替代:

adb shell dumpsys activity activities | grep mCurrentFocus

adb shell dumpsys window | findstr mCurrentFocus

C:\Users\***>adb shell dumpsys window | findstr mCurrentFocus
  mCurrentFocus=Window{c392414 u0 Application Error: com.huanhailiuxin.jet2020}
  mCurrentFocus=Window{aec97 u0 com.android.settings/com.**.***.TargetActivity}

4. 修改手机分辨率

- adb shell dumpsys window displays
- adb shell dumpsys window visible-apps
- adb shell wm size 1080x1920
- adb shell wm density 480
- //wm size reset
- //wm density reset

5. 进程

  • 查看指定进程 adb shell ps -ef | grep com.huanhailiuxin.jet2020 实例: 1|gsi_arm64:/ # ps -ef | grep 包名

    UID            PID   PPID  CPU的占用率(2%)
    root           6964  18315 2 10:34:39 pts/0 00:00:00 grep 包名
    
  • 杀死指定进程

    • adb shell kill 进程ID
    • adb shell am force-stop 包名
  • 查看指定进程oom_adj值 cat /proc/进程id/oom_adj

6. adb命令/shell命令 可以设置为具体为哪个用户执行

示例:

adb install --user 10 test.apk

adb shell
settings put --user 10 global device_provisioned 0
settings put --user 10 secure user_setup_complete 0
pm enable --user 10 **/**.activity.Activity1
pm enable --user 10 **/**.activity.Activity2
sync
exit

7. logcat

  1. 查看指定TAG的log

只指定TAG输出 : 只看TAG为HelloTag

adb shell
logcat -s HelloTag

2. 过滤包含指定内容的log

只看包含 HelloAdb 的log

adb shell
logcat | grep "HelloAdb"

3. 将log保存到指定文件

adb logcat *** > 文件路径 注:不要执行 adb shell, 否则提示: /system/bin/sh: can't create ***testlog.txt: Read-only file system

adb logcat -s KeyguardStatusView > C:\Users\***\Desktop\testlog.txt

4. 只看级别 >=X 的日志

adb logcat *:E 仅仅看ERROR及ERROR以上级别的日志

adb logcat *:E
  • V — 明细 verbose(最低优先级)
  • D — 调试 debug
  • I — 信息 info
  • W — 警告 warn
  • E — 错误 error
  • F — 严重错误 fatal
  • S — 无记载 silent
  1. logcat 缓冲区大小设置
adb logcat -G 10M

6. logcat 缓冲区大小查看

adb logcat -g
D:\***>adb shell logcat -g
main: ring buffer is 256 KiB (253 KiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 256 KiB (253 KiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 256 KiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 256 KiB (0 B consumed), max entry is 5120 B, max payload is 4068 B

D:***>adb shell logcat -G 20M

D:***>adb shell logcat -g
main: ring buffer is 20 MiB (256 KiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 20 MiB (236 KiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 20 MiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 20 MiB (0 B consumed), max entry is 5120 B, max payload is 4068 B

8. install

adb install -r -d -t C:\Users\***\Desktop\demo.apk
  • adb install -r 替换已存在的应用程序,也就是说强制安装
  • adb install -l 锁定该应用程序
  • adb install -t 允许测试包
  • adb install -s 把应用程序安装到sd卡上
  • adb install -d 允许进行将见状,也就是安装的比手机上带的版本低
  • adb install -g 为应用程序授予所有运行时的权限

9. 内存

  • adb shell dumpsys meminfo 包名/进程id
    • Pss Total 指占用了真实的物理内存的空间.一般用这个值表示APP实际内存占用.
    • Objects是统计App内部组件对象个数,其中Views、ViewRootImpl以及Activities个数,在Activity onDestroy后应该都会回收清零,如果onDestroy调用后这几个对象个数没有清零,就可能发生了内存泄漏。
    • android程序内存被分为2部分:native和dalvik,dalvik就是java堆,普通java对象是在java堆分配,而bitmap是直接在native上分配,对于内存的限制是 native+dalvik 不能超过最大限制。
    • Native Heap:Native代码分配的内存,虚拟机和Android框架分配内存。
    • Dalvik Heap:Java对象分配的占据内存
    • Dalvik Other:类数据结构和索引占据内存
    • Stack:栈内存
    • Ashmem:不以dalvik- 开头的内存区域,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。匿名共享内存(Anonymous Shared Memory-Ashmem。Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。
    • Other dev:内部driver占用的内存
    • .so mmap: C库代码占用的内存
    • .jar mmap: java文件代码占用的内存
    • .apk mmap: apk代码占用的内存
    • .ttf mmap: ttf文件代码占用的内存
    • .dex mmap: dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区
    • Other mmap: 其它文件占用的内存
    • App Summary下:
      • Java Heap: java内存占用
      • Native Heap: native内存占用
      • Code: 代码段内存占用
      • Stack: 栈内存占用
      • Graphics: Graphics/GL内存占用
      • Private Other: 其他私有数据内存占用
      • System: 共享内存的PSS占用
                   Pss  Private  Private  SwapPss      Rss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty    Total     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------   ------
  Native Heap    24324    24288        0       36    25228    36056    26521     5482
  Dalvik Heap     6184     6080        0       34     6944    29386     4810    24576
 Dalvik Other     8625     3148        0        0    14532
        Stack     1596     1596        0        0     1604
       Ashmem        6        0        0        0       24
    Other dev       34        4       28        0      420
     .so mmap     9856      284     2852       41    60120
    .jar mmap     4458        0     1408        0    33012
    .apk mmap     1618        0      276        0    21048
    .ttf mmap       52        0        0        0      292
    .dex mmap    14180    14048       44        0    14440
    .oat mmap      128        0        0        0     2760
    .art mmap     9311     8748       28       50    18064
   Other mmap      851        4        0        0     5552
   EGL mtrack     6043     6043        0        0     6043
    GL mtrack    18592    18592        0        0    18592
      Unknown      548      516        0        4     1088
        TOTAL   106571    83351     4636      165   106571    65442    31331    30058

 App Summary
                       Pss(KB)                        Rss(KB)
                        ------                         ------
           Java Heap:    14856                          25008
         Native Heap:    24288                          25228
                Code:    18912                         142656
               Stack:     1596                           1604
            Graphics:    24635                          24635
       Private Other:     3700
              System:    18584
             Unknown:                                   10632

           TOTAL PSS:   106571            TOTAL RSS:   229763       TOTAL SWAP PSS:      165

 Objects
               Views:       17         ViewRootImpl:        1
         AppContexts:        6           Activities:        1
              Assets:       22        AssetManagers:        0
       Local Binders:     1137        Proxy Binders:       39
       Parcel memory:       14         Parcel count:       59
    Death Recipients:        0      OpenSSL Sockets:        0
            WebViews:        0

10. adb shell dumpsys ***

  • 内存 adb shell dumpsys meminfo
  • CPU adb shell dumpsys cpuinfo
  • 帧率 adb shell dumpsys gfxinfo
  • 显示 adb shell dumpsys display
  • 电源 adb shell dumpsys power
  • 电池状态 adb shell dumpsys batterystats
  • 电池 adb shell dumpsys battery
  • 闹钟 adb shell dumpsys alarm
  • 位置 adb shell dumpsys location

11. 启动和关闭ADB服务

每次打开Android Studio,都执行一下2个命令,可以使手机连接更稳定

  • adb kill-server
  • adb start-server

12. 启动特定Activity

adb shell am start -n com.jet.app1/com.jet.app1.activity.Func1Activity

13.获取系统 Android版本号及API级别

  • adb shell getprop ro.build.version.release
  • adb shell getprop ro.build.version.sdk
***> adb shell getprop ro.build.version.release
11
***> adb shell getprop ro.build.version.sdk
30

14. 读写Settings值

  • 读Settings值
adb shell settings get secure ***
adb shell settings get global ***
adb shell settings get system ***
  • 写Settings值
adb shell settings put secure key1 value1
adb shell settings put global key1 value1
adb shell settings put system key1 value1

15. android权限

www.cnblogs.com/andy-songwe…

  1. 查看某APP的权限
adb shell dumpsys package [包名] | findstr permission
  • declared permissions。该应用自己声明(即自定义)的权限,这里显示了权限名,权限等级,以及在什么时候获取该权限(INSTALLED 表示安装的时候就会授予该权限)。
  • requested permissions。这里列出的是AndroidManifest.xml文件中所有request的权限,可以看出这里面包含了动态申请的权限和安装时申请的权限。
  • install permissions:安装的时候就赋予的权限。可以和requested permissions对比一下,这里面少了一"android.permission.CAMERA"权限,该权限为动态申请权限。该列表中还展示了权限对应的授予情况,如granted所示,true表示已经被授予了权限。
  • runtime permissions。这里显示的是运行时才需要申请的权限,即dangerous permission。
  1. 查看权限的声明者和使用者
adb shell dumpsys package permission <权限名>

3. 移除指定权限

adb shell pm revoke [packageName] [permissionName]

4. 授予指定权限

adb shell pm grant [packageName] [permissionName]

16. 截屏

adb shell /system/bin/screencap -p /sdcard/1.png

17. 使用wifi连接设备调试

  1. 首先用USB连接设备,获取设备IP,其中wlan0下的inet addr即为当前设备的IP地址
adb shell "ifconfig"

PS C:\Users\***> adb shell "ifconfig"
tcam1     *****

tcam3     *****

wlan0     Link encap:Ethernet  HWaddr b2:1a:cb:35:97:44  Driver cnss_pci
          inet addr:10.88.153.167  Bcast:10.88.153.255  Mask:255.255.254.0
          inet6 addr: fe80::b01a:cbff:fe35:9744/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:215288 errors:0 dropped:0 overruns:0 frame:0
          TX packets:120440 errors:0 dropped:39 overruns:0 carrier:0
          collisions:0 txqueuelen:3000
          RX bytes:39134433 TX bytes:33189364
  1. 断开USB连接,直接在WIFI下连接设备
adb connect 10.88.153.167