1,自己现在属于一个小菜鸟,每次遇到问题,或者出现bug,我都是打开android studio然后运行一下代码,再然后开始找到那个activity或者fragment的最后加断点或者打log去调试,这样的话定位问题慢,耗时长。
2,看着那些大牛,直接打了终端,啪啪几个命令就立刻,定位出问题,速度快,定位问题准。
3,一点点积累,每学习一个命令,记录下来。
1,adb devices:获取设备列表及设备状态
2,adb get-state:获取设备的状态
说明:
3,adb kill-server , adb start-server : 结束 adb 服务, 启动 adb 服务,通常两个命令一起用。
4,adb install:安装应用,覆盖安装是使用 -r 选项。
adb uninstall:卸载应用,后面跟的参数是应用的包名
,请区别于 apk 文件名。
adb -s
adb -s
补充:
1)adb 安装软件,如果既有模拟器又有真机。
参数
|
含义
|
---|---|
-d | 指定当前唯一通过 USB 连接的 Android 设备为命令目标 |
-e | 指定当前唯一运行的模拟器为命令目标 |
-s |
指定相应 serialNumber 号的设备/模拟器为命令目标 |
2)控制安装 APK 的行为。adb install -r/-s/-d
参数
|
含义
|
---|---|
-r | 允许覆盖安装。 |
-s | 将应用安装到 sdcard。 |
-d | 允许降级覆盖安装。 |
5,adb pull :将 Android 设备上的文件或者文件夹复制到本地。
adb push:将本地文件推送到android设备中。
6,adb reboot :重启 Android 设备。原来有这个命令啊,我之前每一次都是把模拟器关了,再打开的,这以后就方便了,可以直接用命令。
1,adb shell命令
adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下,例如我再命令行中敲这样一个命令:
从上面的显示发现,很明显,在 bin 目录下并不存在这个命令。那么上面的提示已经告诉你了我们的adb shell命令在哪放着,于是就启动模拟器,将整个 system/bin
目录复制了出来,然后一个一个的去试。
那么上面提到的adb pull命令是不是就用上了啊。操作如下:
打开bin文件如下:
然后,我们在打开am文件,看下里面是什么:
#!/system/bin/sh
#
# Script to start "am" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
再诸如pm文件看一下:
# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"
下面就看一下比较常用的adb shell命令吧。
2,pm命令:Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息。pm 的源码 Pm.java , 直接运行 adb shell pm 可以获取到该命令的帮助信息。
1)pm list package:列出安装在设备上的应用。(不带任何选项:列出所有的应用的包名)
xdhywj@xdhywjdeMBP ~ » adb shell
root@vbox86p:/ # pm list package
package:com.example.firstapplication
package:com.awesomeproject
package:com.example.alertdialogcancel
package:com.example.android.livecubes
package:com.example.xdhywj.my_listactivity
package:com.android.providers.telephony
package:com.example.xdhywj.observertest
package:com.android.providers.calendar
package:com.android.providers.media
package:com.example.xdhywj.myapplication_test1
package:com.android.wallpapercropper
......
xdhywj@xdhywjdeMBP ~ » adb shell pm list packages -s
package:com.example.android.livecubes
package:com.android.providers.telephony
package:com.android.providers.calendar
package:com.android.providers.media
package:com.android.wallpapercropper
package:com.android.voicedialer
package:com.android.documentsui
package:com.android.galaxy4
package:com.android.externalstorage
package:com.android.htmlviewer
package:com.android.quicksearchbox
......
xdhywj@xdhywjdeMBP ~ » adb shell pm list packages -3
package:com.example.firstapplication
package:com.awesomeproject
package:com.example.alertdialogcancel
package:com.example.xdhywj.my_listactivity
package:com.example.xdhywj.observertest
package:com.example.xdhywj.myapplication_test1
package:com.sankuai.meituan
package:com.xdhywj.eventbusdemo
package:com.example.xdhywj.myspawn
package:com.xdhywj.myspawn
package:com.example.layoutinflatertest
package:com.example.xdhywj.servicetest
package:com.example.xdhywj.myview
package:com.example.spannabletext
......
4)adb shell pm list package -f:列出应用包名及对应的apk名及存放位置。
xdhywj@xdhywjdeMBP ~ » adb shell pm list packages -f
package:/data/app/com.example.firstapplication-2/base.apk=com.example.firstapplication
package:/data/app/com.awesomeproject-1/base.apk=com.awesomeproject
package:/data/app/com.example.alertdialogcancel-2/base.apk=com.example.alertdialogcancel
package:/system/app/CubeLiveWallpapers/CubeLiveWallpapers.apk=com.example.android.livecubes
package:/data/app/com.example.xdhywj.my_listactivity-2/base.apk=com.example.xdhywj.my_listactivity
package:/system/priv-app/TelephonyProvider/TelephonyProvider.apk=com.android.providers.telephony
package:/data/app/com.example.xdhywj.observertest-1/base.apk=com.example.xdhywj.observertest
package:/system/priv-app/CalendarProvider/CalendarProvider.apk=com.android.providers.calendar
......
那么我们是不是可以列出第三方应用对应的apk名以及存放的位置。参数为:-3 -f。
xdhywj@xdhywjdeMBP ~ » adb shell pm list packages -3 -f
package:/data/app/com.example.firstapplication-2/base.apk=com.example.firstapplication
package:/data/app/com.awesomeproject-1/base.apk=com.awesomeproject
package:/data/app/com.example.alertdialogcancel-2/base.apk=com.example.alertdialogcancel
package:/data/app/com.example.xdhywj.my_listactivity-2/base.apk=com.example.xdhywj.my_listactivity
package:/data/app/com.example.xdhywj.observertest-1/base.apk=com.example.xdhywj.observertest
package:/data/app/com.example.xdhywj.myapplication_test1-1/base.apk=com.example.xdhywj.myapplication_test1
package:/data/app/com.sankuai.meituan-2/base.apk=com.sankuai.meituan
......
5)
adb shell pm list package -i:列出应用包名及其安装来源,结果显示例子(命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用)
xdhywj@xdhywjdeMBP ~ » adb shell pm list packages -i
package:com.example.firstapplication installer=null
package:com.awesomeproject installer=null
package:com.example.alertdialogcancel installer=null
package:com.example.android.livecubes installer=null
package:com.example.xdhywj.my_listactivity installer=null
package:com.android.providers.telephony installer=null
package:com.example.xdhywj.observertest installer=null
......
6)adb shell pm list package -f -3 -i meituan:查找三方应用中美团的包名、apk存放位置、安装来源。查到了有两个:一个是美团,一个是秦皇。
xdhywj@xdhywjdeMBP ~ » adb shell pm list package -f -3 meituan
package:/data/app/com.sankuai.meituan-2/base.apk=com.sankuai.meituan
package:/data/app/com.meituan.spawn-1/base.apk=com.meituan.spawn
xdhywj@xdhywjdeMBP ~ » adb shell pm path com.sankuai.meituan
package:/data/app/com.sankuai.meituan-2/base.apk
8)
pm dump:列出指定应用的 dump 信息,里面有各种信息。例如:
xdhywj@xdhywjdeMBP ~ » adb shell pm dump com.sankuai.meituan
DUMP OF SERVICE package:
Activity Resolver Table:
Schemes:
imeituan:
26ac82 com.sankuai.meituan/com.meituan.android.travel.poi.TravelPoiListActivity
57b03b com.sankuai.meituan/.topic.TopicActivity
71af37 com.sankuai.meituan/.survey.SurveyActivity
8112f9 com.sankuai.meituan/.review.KtvReviewActivity
a90794 com.sankuai.meituan/com.meituan.android.travel.dealdetail.schedule.ScheduleDetailActivity
e77dc4 com.sankuai.meituan/com.meituan.android.hotel.prepay.PrePayOrderCreateActivity
......
9)
pm install/pm uninstall:安装应用/卸载应用,此时apk文件存放于Android设备上,与adb install/uninstall不用。
重点:adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)
1)am start -n:am start -n {包(package)名}/{包名}.{活动(activity)名称}。例如启动系统自带的计算器。
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.android.calculator2/com.android.calculator2.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
#或者可以这样
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.android.calculator2/.Calculator
Starting: Intent { cmp=com.android.calculator2/.Calculator }
#启动系统日历
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.android.calendar/.LaunchActivity
Starting: Intent { cmp=com.android.calendar/.LaunchActivity }
#启动浏览器
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.android.browser/com.android.browser.BrowserActivity
Starting: Intent { cmp=com.android.browser/.BrowserActivity }
......
#打开秦皇
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.meituan.spawn/.MainActivity
Starting: Intent { cmp=com.meituan.spawn/.MainActivity }
#打开美团欢迎界面
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.package.name/.activity.Welcome
Starting: Intent { cmp=com.com.package.name/.activity.Welcome }
#打开美团主页
xdhywj@xdhywjdeMBP ~ » adb shell am start -n com.package.name/.activity.MainActivity
Starting: Intent { cmp=com.com.package.name/.activity.MainActivity }
2)
am start -a
:-
a 表示action (android.intent.action.MAIN)。下面举一个例子:
#通过-a指定action,打开美团中附近的地图界面
xdhywj@xdhywjdeMBP ~ » adb shell am start -a com.meituan.android.intent.action.near_poi_map -n com.sankuai.meituan/.common.map.NearPoiMap
Starting: Intent { act=com.meituan.android.intent.action.near_poi_map cmp=com.sankuai.meituan/.common.map.NearPoiMap }
3)am start -d:-d表示data (android.intent.data)。下面举几个例子:
首先看一下在Manifest.xml文件中找几个有data属性的Activity,如下所示:
//登陆界面:
//城市选择界面
#通过data打开登陆界面
xdhywj@xdhywjdeMBP ~ » adb shell am start -d imeituan://com.package.name/signin
Starting: Intent { dat=imeituan://www.meituan.com/signin }
#通过data开店城市选择界面
xdhywj@xdhywjdeMBP ~ » adb shell am start -d imeituan://www.meituan.com/city/list
Starting: Intent { dat=imeituan://www.meituan.com/city/list }
4)am start -e:在打开activity的时候,带上扩展参数。类似于extra:key–value。
#相当于带extra的intent。其中key和value分别对应于intent中的key value,是不是非常的方便啊。赞一个
xdhywj@xdhywjdeMBP ~ » adb shell am start -d imeituan://www.meituan.com/city/list -e key value
Starting: Intent { dat=imeituan://www.meituan.com/city/list (has extras) }
#跳转到支付结果页面
xdhywj@xdhywjdeMBP ~ » adb shell am start -n "com.com.package.name/.pay.PayResultActivity" -e bigOrderId 6782909
Starting: Intent { cmp=com.com.package.name/.pay.PayResultActivity (has extras) }
那么我们在传intent的时候,是不是经常用到putStringExtra(), putIntExtra,那么这样传指定类型的extra应该怎么处理呢,其实adb也已经给我们设计好了,是不是很赞啊。putStringExtra():[-e|--es ...]
putIntExtra():[-e|--ei ...]
putBooleanExtra():[--ez ...]
......
#例子:调用putIntExtra():其中key为bigOrderId,value为int类型。
am start -n "com.sankuai.meituan/.pay.PayResultActivity" --ei "bigOrderId" 6782909
4,启动Services
单独拉出来说了,上面全都是启动activity,为了不混淆,单独说下启动services。
1)启动一个service,service在后台运行,所以可以去应用程序列表看。参数:-n表示组件。-a表示action。
#其中-a即就是对应的action,-ei:putIntExtra("level",3),-ei:putIntExtra("scale",100).
adb shell am startservice -n com.android.music/com.android.music.MediaPlaybackService
adb shell am startservice -a com.meituan.myservice
#结果
Starting service: Intent { cmp=com.android.music/.MediaPlaybackService }
2)停止service。以AndroidManifest文件中的配置为例子:
启动service和停止service:
#启动service
adb shell am startservice com.some.package.name/.YourServiceSubClassName#停止serviceadb shell am force-stop com.some.package.name
5,启动Broadcast
也同样单独拉出来说。
发送一个系统广播,模拟手机低电量环境
#其中-a即就是对应的action,-ei:putIntExtra("level",3),-ei:putIntExtra("scale",100).
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei "level" 3 --ei "scale" 100
1,使用adb查看手机尺寸
2,使用adb查看手机的密度