独角兽企业重金招聘Python工程师标准>>>
总结一些常用的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 topTASK com.aliyun.homeshell id=1ACTIVITY com.aliyun.homeshell/.Launcher 296c7d6c pid=1867Local Activity 22a2410f State:mResumed=true mStopped=false mFinished=falsemLoadersStarted=truemChangingConfigurations=falsemCurrentConfig={1.0 ?mcc?mnc zh_CN ?layoutDir sw360dp w360dp h615dp 480dpi nrml long port finger -keyb/v/h -nav/hs.6colorMap={header_color=-16731727, dark_mode=0, hw_highlighted_text=1711321521, hw_color_primary_disabled=-16731727, header_widget_color_pressed=-2500135, hw_color_primary=-16731727, hw_color_primary_dark=-16739694, header_text_color_unchecked=-2130706434, dyncolor_mode=1, hw_dialog_ok_button_text_disable=1711321521, header_divider=-13648194, header_text_color=-2, header_widget_color_normal=-2, header_widget_color_disable=-2}}FragmentManager misc state:mActivity=com.aliyun.homeshell.Launcher@22a2410fmContainer=android.app.Activity$1@30c7b48cmCurState=5 mStateSaved=false mDestroyed=falseViewRoot:略//可以看到当前应用的基本信息已经出来了,下面还包括整个View的层级
adb shell dumpsys package <package_name>
可以查看指定包名应用的详细信息(相当于应用的AndroidManifest.xml中的内容)
C:\Users\isaac>adb shell dumpsys package com.android.settingsActivity Resolver Table:Full MIME Types:...Base MIME Types:...Schemes:printjob:...package:...Non-Data Actions:.wifi.PICK_WIFI_NETWORK:2ef8f99e com.android.settings/.Settings$WifiSettingsActivityandroid.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 SwappedHeapHeapHeapTotal Dirty Clean DirtySize AllocFree------ ------ ------ ------ ------ ------ ------Native Heap 0 0 0 0 1228862876000Dalvik Heap37753072 0 0 20323 192511072Dalvik Other357252 0 0Stack156156 0 0Ashmem 8 0 0 0Other dev 6 0 4 0.so mmap718120 0 0.apk mmap399 0240 0.ttf mmap117 0 0 0.dex mmap1482 01052 0.oat mmap930 0 12 0.art mmap932540 0 0Other mmap 27 4 0 0EGL mtrack 10880 10880 0 0GL mtrack 12620 12620 0 0Unknown40884000 0 0TOTAL 36495 316441308 0 32611 255387072ObjectsViews:103 ViewRootImpl: 1AppContexts: 3 Activities: 1Assets: 4 AssetManagers: 4Local Binders: 21 Proxy Binders: 23Parcel memory: 3 Parcel count: 14Death Recipients: 2OpenSSL Sockets: 0SQLMEMORY_USED: 0PAGECACHE_OVERFLOW: 0MALLOC_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:23946adb 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.settingsI/ActivityManager( 848): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000cmp=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 .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
获取当前应用使用到的端口号信息