总结一些常用Android adb 命令

总结一些常用的adb 命令

引言

  • Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常好用的命令,可以帮我们快速找到问题。

基础命令

  • 像一些比较常用的命令比如,cd rm cp 就不介绍了,下面介绍几个不太常用,了解之后大大提高开发效率的几个命令。

  • cat

    • 该命名常用语查看文件,现在我往data/local/tmp push了一个config.xml文件,可以用cat 命令对其进行查看。

        shell@6753_doov_legend:$ cat config.xml                                                                 
        <?xml version="1.0" encoding="UTF-8"?>
        <nqtestdata>
        <country>CN</country>
        <mcnc>604123</mcnc>
        <!--<lat>39.213123<lat>
        <lon>116.123123<lon>
        <networkcountry>123123</networkcountry>
        <networkmcnc>123123</networkmcnc>-->
        <debug>true</debug>
        <writeLog>true</writeLog>
        <serverType>VRF</serverType>
        </nqtestdata>
        shell@6753_doov_legend:$
      
    • 该命令还可以结合grep命令进行过滤,比如我现在用grep 命令过滤上述文件中的debug 项

        shell@6753_doov_legend:$ cat config.xml	|grep debug
        <debug>true</debug>
        shell@6753_doov_legend:$
      

常用adb 命令

  • adb install [-l] [-r] [-s] file

    • [-l] 锁定该程序,安装
    • [-r] 重新安装该程序,保存数据
    • [-s] 安装到sdcard
  • adb uninstall [-k] package_name

    • [-K] 不清楚数据,卸载
  • pm clear package_name

    -清除指定包名的数据

  • pm install

    • 对应adb install
  • pm uninstall

    • 对应adb install
  • adb shell dumpsys

    • adb shelll dumpsys activity top

        - 用于查看当前运行应用的的信息
        C:\Users\isaac>adb shell dumpsys activity top
        	TASK com.aliyun.homeshell id=1
        	  ACTIVITY com.aliyun.homeshell/.Launcher 296c7d6c pid=1867
        	    Local Activity 22a2410f State:
        	      mResumed=true mStopped=false mFinished=false
        	      mLoadersStarted=true
        	      mChangingConfigurations=false
        	      mCurrentConfig={1.0 ?mcc?mnc zh_CN ?layoutDir sw360dp w360dp h615dp 480dpi nrml long port finger -keyb/v/h -nav/h
        	s.6colorMap={header_color=-16731727, dark_mode=0, hw_highlighted_text=1711321521, hw_color_primary_disabled=-16731727, h
        	eader_widget_color_pressed=-2500135, hw_color_primary=-16731727, hw_color_primary_dark=-16739694, header_text_color_unch
        	ecked=-2130706434, dyncolor_mode=1, hw_dialog_ok_button_text_disable=1711321521, header_divider=-13648194, header_text_c
        	olor=-2, header_widget_color_normal=-2, header_widget_color_disable=-2}}
        	    FragmentManager misc state:
        	      mActivity=com.aliyun.homeshell.Launcher@22a2410f
        	      mContainer=android.app.Activity$1@30c7b48c
        	      mCurState=5 mStateSaved=false mDestroyed=false
        	    ViewRoot:略
        	//可以看到当前应用的基本信息已经出来了,下面还包括整个View的层级
      
  • adb shell dumpsys package <package_name>

    • 可以查看指定包名应用的详细信息(相当于应用的AndroidManifest.xml中的内容)

        C:\Users\isaac>adb shell dumpsys package com.android.settings
        Activity Resolver Table:
          Full MIME Types:
             ...
          Base MIME Types:
             ...
          Schemes:
              printjob:
                ...
              package:
                ...
      
          Non-Data Actions:
              android.net.wifi.PICK_WIFI_NETWORK:
                2ef8f99e com.android.settings/.Settings$WifiSettingsActivity
              android.settings.SHOW_REGULATORY_INFO:
                a449c7f com.android.settings/.RegulatoryInfoDisplayActivity
              ...
      

    简单的列出几个

  • adb shell dumpsys meminfo <package_name/pid>

    • 可以查看指定进程名或者是进程id的内存信息

        ** MEMINFO in pid 20677 [com.android.settings] **
                       Pss  Private  Private  Swapped     Heap     Heap     Heap
                     Total    Dirty    Clean    Dirty     Size    Alloc     Free
                    ------   ------   ------   ------   ------   ------   ------
          Native Heap        0        0        0        0    12288     6287     6000
          Dalvik Heap     3775     3072        0        0    20323    19251     1072
         Dalvik Other      357      252        0        0
                Stack      156      156        0        0
               Ashmem        8        0        0        0
            Other dev        6        0        4        0
             .so mmap      718      120        0        0
            .apk mmap      399        0      240        0
            .ttf mmap      117        0        0        0
            .dex mmap     1482        0     1052        0
            .oat mmap      930        0       12        0
            .art mmap      932      540        0        0
           Other mmap       27        4        0        0
           EGL mtrack    10880    10880        0        0
            GL mtrack    12620    12620        0        0
              Unknown     4088     4000        0        0
                TOTAL    36495    31644     1308        0    32611    25538     7072
      
         Objects
                       Views:      103         ViewRootImpl:        1
                 AppContexts:        3           Activities:        1
                      Assets:        4        AssetManagers:        4
               Local Binders:       21        Proxy Binders:       23
               Parcel memory:        3         Parcel count:       14
            Death Recipients:        2      OpenSSL Sockets:        0
      
         SQL
                 MEMORY_USED:        0
          PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
      
  • adb shell dumpsys dbinfo <package_name>

    • 可以查看指定包名应用的数据库存储信息(包括存储的sql语句)
  • adb shell dumpsys activity services <package_name>

    • 查看该应用起了哪些服务
  • adb pull

    • 将设备中的文件放到到本地

    • eg:adb pull /sdcard/tmp.txt D:\

    命令简单,不在多说,只是在操作的时候可能遇到文件权限问题,用chmod改一下权限即可。

  • adb forward [(远程端)协议:端口号] [(设备端)协议:端口号]

    • 设备的端口转发

        adb forward tcp:23946 tcp:23946
        adb forward tcp:8700 jwdp:1786
      

    这个命令对于我们在调试的时候非常有用,特别在IDA调试中。

  • adb jdwp

    • 查看设备中可以被调试的应用的进程号

        adb jdwp
      

    这个命令或许用途不是很多,但是对于调试的时候还是有点用途。可以忽略这个命令。

  • adb logcat |findstr pname/pid/keyword

    • 查看当前日志信息

        adb logcat -s tag |findstr  <package_name>
      
        adb logcat -s ActivityManager | findstr  com.android.settings
        I/ActivityManager(  848): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000
         cmp=com.android.settings/.Settings bnds=[828,1302][1026,1542]} from uid 10024 on display 0
      

    这个命令大家都不陌生,也是重中之重,有的同学或许会好奇,为何不用AS查看日志了,但是有时候AS不能满足我们,比如我们想开多个日志窗口,这时候我们可以打开多个cmd窗口利用这个命令查看日志信息即可。用的最多的就是-s参数,可以直接查看对应的tag日志信息,可以利用findstr进行信息过滤:

    • 也可以进入 adb shell 时 通过grep 进行过滤
  • am start -n [包(package)名]/[包名].[活动(activity)名称]

    • 启动一个应用

        am start -n com.android.browser/com.android.browser.BrowserActivity
      

    注意:可以以debug方式启动应用:am start –D –n …. 特别在我们反编译调试应用的时候,可能需要以debug方式启动应用

  • am startservice -n [包(package)名]/[包名].[服务(service)名]

    • 启动一个服务

        am startservice -n com.android.traffic/com.android.traffic.maniservice
      

    和上面命令类似,启动服务

  • am broadcast -a [广播动作]

    • 发送一个广播

        am broadcast -a android.NET.conn.CONNECTIVITY_CHANGE
      

    和上面的命令类似,发送一个广播,有时候我们定义了一个广播,可能需要测试,就可以借助这个功能模拟发送一个广播。

  • netcfg

  • 查看设备的ip地址

    有时候想查看设备的ip地址,去设置页面太费劲了,可以直接用这个命令即可

  • aapt dump xmltree [apk包] [需要查看的资源文件xml]

    • 查看apk中的信息以及编辑apk程序包

        aapt dump xmltree demo.apk AndroidManifest.xml
      
  • dexdump [dex文件路径]

    • 可以查看一个dex文件的相信信息

        dexdump D:\classes.dex
      
  • cat /proc/[pid]/maps

    • 查看当前进程的内存加载情况,查看当前进程的内存映射信息,比如加载了哪些so文件,dex文件等:
  • cat /proc/[pid]/status

    • 查看当前进程的状态信息
  • cat /proc/[pid]/net/tcp/tcp6/udp/udp6

    • 获取当前应用使用到的端口号信息

猜你喜欢

转载自my.oschina.net/u/1433837/blog/983709