这篇文章我们将分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的用法文章上面有详细解释
"
网友评论