美文网首页
ADB调试大全

ADB调试大全

作者: 一碗好吃的乌冬面 | 来源:发表于2019-02-04 15:06 被阅读0次
    这篇文章我们将分4个小结开始,解释ADB命令

    1. 基础命令

    2. 非shell命令

    3. shell命令

    4. 进程命令

    1. 基础命令

    基础命令是用得最多的,下面介绍4个基础命令。

    • cat命令这个命令非常便捷,主要用于查看文件内容
    • grep命令过滤内容信息,相当于windows上的Ctrl+F(Linux中的过滤命令是grep, Windows中的过滤命令是findstr)
    • echo命令这个可以输出字符串并写入到文本
    • touch命令更改文件的时间戳
    """
    结合下面的动图,我在提前说一下这个命令
    
    touch命令的主要功能并不是为了创建一个空文件
    touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
    
    ">" 和 ">>" 的使用方法
    1. 覆盖内容 echo "" > 文件名
    2. 追加内容 echo "" >> 文件名
    
    ls 查看该目录下面的文件
    ls -l命令可以显示文件的时间记录
    
    -----------------------------------------------------------------------
    和下面动图一样的代码,自己可以实验一下
    
    ls                                (先查看这个文件夹下是否有文件,结果什么都没有)
    echo "Hello World 1">demo.txt     (输出字符串并"Hello World 1"到demo.txt,如果没有这个文件则会创建一个)
    cat demo.txt                      (用cat查看demo.txt里面的内容)
    ls -l                             (顺便查看一下这个文件创建的时间戳)
    
    echo "Hello World 2">demo.txt     (">"这个是覆盖写入至demo.txt)
    cat demo.txt                      (查看demo.txt里面的内容)
    
    echo "Apple">>demo.txt            (在文件末尾追加写入一行)
    cat demo.txt                      (查看demo.txt)
    
    echo "Hello World 3">>demo.txt    (继续追加写入)
    
    cat demo.txt                      (查看demo.txt)
    cat demo.txt|grep Hello           (查看demo.txt并使用grep搜索关于"Hello"的内容)
    cat demo.txt|grep Apple           (搜索关于Apple的文字)
    
    ls -l                             (再次查看demo.txt的时间戳,发现并没有什么变化)
    touch demo.txt                    (触摸一下即可改变时间戳)
    ls -l                             (我们已经看到,时间戳改变了)
    """
    
    命令结合起来演示效果

    2. 非shell命令

    我把常用命令分为非shell命令和shell命令,当然这样分类有点不合常规。为了好理解,
    我把需要提前用adb shell命令运行的命令叫做shell命令,直接用adb shell运行的命令叫做非shell命令。
    本节介绍非shell命令,下一节介绍shell命令。

    adb shell dumpsys | findstr DUMP
    
    在命令后面加指定的service name(比如activity,location)
    如果不加则默认打印出设备中所有service的信息.
    
    • 获取Activity信息:
    adb shell dumpsys activity
    加上-h可以获取帮助信息
    获取当前界面打开的app信息,可以用:
    adb shell dumpsys activity top
    要获取当前界面的Activity:
    adb shell dumpsys activity top | findstr ACTIVITY
    
    • 获取package信息:
    adb shell dumpsys package
    加上-h可以获取帮助信息
    获取某个包的信息:
    adb shell dumpsys package PACKAGE_NAME
    
    • 获取设备分辨率:
    adb shell dumpsys display | findstr DisplayDeviceInfo
    DisplayDeviceInfo{"内置屏幕": 1080 x 1920, 55.0 fps, density 480, 464.949 x 468.923 dpi...
    
    • 获取设备电池信息:
    adb shell dumpsys battery
    Current Battery Service state:
      AC powered: false
      USB powered: true
      Wireless powered: false
      status: 2  '#电池状态'
      health: 2
      present: true
      level: 34  '#电量'
      scale: 100
      voltage: 3848
      current now: -427943
      temperature: 280  '#电池温度'
      technology: Li-ion
    
    • 获取cpu信息:
    adb shell dumpsys cpuinfo
    
    • 获取内存信息:
    adb shell dumpsys meminfo
    要获取具体应用的内存信息,可加上包名或者进程ID
    adb shell dumpsys meminfo PACKAGE_NAME/PID
    
    • 获取通知信息:
    adb shell dumpsys notification
    
     NotificationRecord(0x44217920: pkg=com.sohu.newsclient useron=0x7f0201b5 / com.tencent.news:drawable/icon
       pri=0 score=0
       contentIntent=PendingIntent{4294d748: PendingIntentRecord{44088e90 com.tencent.news startActivity}}
       deleteIntent=null
       tickerText=null
       contentView=android.widget.RemoteViews@441fc810
       defaults=0x00000001 flags=0x00000010
       sound=null
       vibrate=null
       led=0x00000000 onMs=0 offMs=0
       extras={
         android.title=农业部:中国超级稻亩产超1吨
         android.subText=null
         android.showChronometer=false
         android.icon=2130837941
         android.text=农业部今日通报称,经专家测产,袁隆平领衔培育的中国“超级稻”亩产过千公斤,创造1026.7公斤新纪录。详情>>
         android.progress=0
         android.progressMax=0
         android.showWhen=true
         android.infoText=null
         android.progressIndeterminate=false
         android.scoreModified=false
       }
    
    • 获取wifi信息:
    adb shell dumpsys wifi
    可以获取到当前连接的wifi名、搜索到的wifi列表、wifi强度等
    
    • 获取电源管理信息:
    adb shell dumpsys power
    可以获取到是否处于锁屏状态:mWakefulness=Asleep或者mScreenOn=false
    亮度值:mScreenBrightness=255
    屏幕休眠时间:Screen off timeout: 60000 ms
    屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
    等
    
    • 获取电话信息:
    adb shell dumpsys telephony.registry
    可以获取到电话状态,例如
    mCallState值为0,表示待机状态、1表示来电未接听状态、2表示电话占线状态
    mCallForwarding=false '#是否启用呼叫转移'
    mDataConnectionState=2  '#0:无数据连接 1:正在创建数据连接 2:已连接'
    mDataConnectionPossible=true  '#是否有数据连接'
    mDataConnectionApn=   '#APN名称'
    等
    
    • 获取应用的数据库存储信息(包括存储的SQL语句)
    adb shell dumpsys dbinfo
    要获取具体应用的内存信息,可加上包名或者进程ID
    adb shell dumpsys dbinfo PACKAGE_NAME/PID
    
    • 安装apk文件
    '''
    adb install FILE_NAME
    例子
    adb install D:\demo.apk
    -----------------------------------------------------------------------
    升级安装app
    adb install -r FILE_NAME
    '''
    
    • 卸载应用
    adb uninstall PACKAGE_NAME
    
    • 推送文件至手机
    adb push FILE_PATH
    例子
    adb push D:\demo.txt /sdcard
    
    • 在手机取出文件
    adb pull FILE_PATH
    例子
    adb pull /sdcard/demo.txt D:\
    "在操作的时候可能遇到文件权限问题,用chmod改一下权限即可"
    
    • 手机截屏
    adb shell screencap FILE_NAME
       -p: 保存为png文件.
       -j: 保存为jpeg文件.
       如果不输入-p 或者 -j的话,
       文件名以.png结尾,它将被保存为png
    例子
    adb shell screencap -p /sdcard/test.png
    
    • 屏幕录制
    adb shell screenrecord FILE_NAME
    在cmd端按下Ctrl+C即可停止录制
    例子
    adb shell screenrecord /sdcard/demo.mp4
    
    • 输入文本
    在文本框输入文本
    adb shell input [这里跟上具体的操作,具体去看查看帮助]
    adb shell input --help查看帮助
    例子
    adb shell input text 'Hello'
    
    • 设备端口转发
    """
    adb forwrad [ (远程端)协议:端口号] [(设备端)协议:端口号]
    例子
    adb forward tcp:23946
    tcp:23946 adb forward tcp:8700 jwdp:1786
    这个命令在IDA调试中非常有用
    """
    
    • 查看设备中可以被调试的应用的进程号
    adb jdwp
    
    • 查看实时日志信息
    adb logcat
    adb logcat -help   查看帮助
    

    3. shell命令

    所谓的shell命令就是先敲入adb shell,
    而这些命令和非shell命令都是互通的,所谓互通就是要想在设备中运行shell命令,就优先运行adb shell一下。比如查看当前应用信息,可以这么做:

    >>adb shell
    >>dumpsys package PACKAGE_NAME
    
    -----------------------------------------------------------------------
    "也可以直接在外部运行,比如清空应用数据:"
    adb shel1 pm clear PACKAGE_NAME
    
    """
    pm命令:
    pm全称package manager
    你能使用pm命令去模拟android行为或者查询设备上的应用等
    
    关于更多的am和pm命令给出一个链接
    https://www.cnblogs.com/wangcp-2014/p/6076035.html
    """
    
    • 在非root设备中查看指定debug模式的包名应用沙盒数据
    run-as PACKAGE_NAME
    例子
    run-as com.android.calculator
    可以查看非root手机的debug应用的沙盒数据
    
    • 查看所有进程ID
    ps            查看所有进程
    ps -t [pid]   查看pid对应的线程信息
    ps | grep     可以结合grep来过滤内容
    例子
    ps I grep com.myapplication
    ps -t 23278
    
    -----------------------------------------------------------------------
    USER      进程当前用户
    PID       进程ID
    PPID      父进程ID
    VSIZE     进程的虚拟内存大小,以KB为单位
    RSS       实际占用的内存大小,以KB为单位
    WCHAN     进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
    PC        Program Counter
    NAME      进程状态及名称
    -----------------------------------------------------------------------
    拓展阅读
    "cmd查看端口"
    netstat -ano
    
    • 清空应用数据
    pm clear PACKAGE_NAME
    
    • 启动一个app
    '''
    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 start命令类似,启动服务。
    
    • 发送一个广播
    am broadcast-a [广播动作]
    am broadcast -a android.NET.conn.CONNECTIVITY_CHANGE
    上面的命令类似,发送一个广播。
    有时候定义了一个广播,可能需要测试,就可以借助这个功能模拟发送一个广播。
    
    • 查看设备的ip地址
    netcfg
    ifconfig
    安卓系统<6  使用netcfg
    安卓系统≥6  使用ifconfig(因为netcfg: not found)
    
    • 查看设备的端口号信息
    netstat
    
    • 查看当前应用的CPU消耗信息
    top [-n/-m/-d/-s/-t]
    -m "//最多显示多少个进程"
    -n "//刷新次数"
    -d "//刷新间隔时间(默认5秒)"
    -s "//按哪列排序"
    -t "//显示线程信息而不是进程"
    
    例子
    top -d 1 -m 10
    这个命令在分析应用性能的时候非常有用,
    可以结合grep过滤出想要分析的应用信息,查看它的当前CPU使用率.
    
    • 查看系统属性值
    getprop
    
    例子
    getprop sys.usb.state
    默认是展示全部的内容,可以在后面跟上属性值名称过滤信息
    
    这个命令可以查看设备的信息,比如设备版本号、系统属性等,
    可以去修改这些系统属性。比如debug开关,让所有的应用都处于可调试状态。
    

    4. 进程命令

    就是应用在运行的时候加载在内存里面的信息是放在/proc这个分区的

    因为东西都在/proc这个文件夹下所以就挑几个来说一下
    
    1. 查看当前进程的内存加载情况
    /proc/[pid]/maps
    然后使用cat 打开
    就是这样cat /proc/[pid]/maps
    查看当前进程的内存映射信息,比如加载了哪些so文件, dex文件等。
    
    -----------------------------------------------------------------------
    2. 查看进程的状态信息
    cat /proc/[pid]/status
    
    -----------------------------------------------------------------------
    3. 查看当前应用使用的端口号信息
    先进入到这个文件夹下
    /proc/[pid]/net/
    输入ls 就可以看到自己想要查看的服务协议就会出现类似于这样的,然后cat查看即可
    anycast6           ip6_tables_names    nf_conntrack_expect sockstat
    arp                ip6_tables_targets  packet              sockstat6
    arp_tables_matches ip6t_hashlimit      pfkey               softnet_stat
    arp_tables_names   ip_conntrack        pnp                 stat
    arp_tables_targets ip_conntrack_expect pppoe               tcp
    dev                ip_tables_matches   pppol2tp            tcp6
    dev_mcast          ip_tables_names     protocols           udp
    dev_snmp6          ip_tables_targets   psched              udp6
    fib_trie           ipt_hashlimit       ptype               udplite
    fib_triestat       ipv6_route          raw                 udplite6
    icmp               mcfilter            raw6                unix
    if_inet6           mcfilter6           route               wireless
    igmp               netfilter           rt6_stats           xt_qtaguid
    igmp6              netlink             rt_cache            xt_quota
    ip6_flowlabel      netstat             snmp
    ip6_tables_matches nf_conntrack        snmp6
    
    -----------------------------------------------------------------------
    
    "
    总结:
    只需要找到应用的进程ID并进入那个文件夹即可用ls慢慢查看,并用cat打开内容
    使用ps,或者dumpsys activity top即可查看到当前应用的进程ID
    
    关于ps 还有dumpsys activity top的用法文章上面有详细解释
    "
    

    相关文章

      网友评论

          本文标题:ADB调试大全

          本文链接:https://www.haomeiwen.com/subject/ifbpsqtx.html