ADB调试大全

这篇文章我们将分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打印当前系统中所有应用运行的四大组件的信息
    分别是Activity、Service、ContentProvider、BroadcastReceiver
    在后面可加上具体的服务名,需要列出当前运行的服务,可运行:
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调试大全)