您的位置:首页 > 移动开发 > Android开发

Android adb命令使用总结

2017-04-30 18:55 519 查看


一,写在前面

1,自己现在属于一个小菜鸟,每次遇到问题,或者出现bug,我都是打开android studio然后运行一下代码,再然后开始找到那个activity或者fragment的最后加断点或者打log去调试,这样的话定位问题慢,耗时长。

2,看着那些大牛,直接打了终端,啪啪几个命令就立刻,定位出问题,速度快,定位问题准。

3,一点点积累,每学习一个命令,记录下来。


二,基础命令学习

1,adb devices:获取设备列表及设备状态



2,adb get-state:获取设备的状态



说明:
device:设置正常连接
offline:设备出现异常,设备无响应
unknown:没有设备

3,adb kill-server , adb start-server : 结束 adb 服务, 启动 adb 服务,通常两个命令一起用。

4,adb install:安装应用,覆盖安装是使用 -r 选项。

     adb uninstall:卸载应用,后面跟的参数是
应用的包名
,请区别于 
apk 文件名。


     adb -s <serialNumber> install <path-to-apk>:指定android设备安装apk文件。(既有模拟器,又有手机,较为常用)。

     adb -s <serialNumber> uninstall <pkg_name>:同上,意为卸载软件。

补充:

1)adb 安装软件,如果既有模拟器又有真机。

参数
含义
-d指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e指定当前唯一运行的模拟器为命令目标
-s <serialNumber>指定相应 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
......

2)adb shell pm list package -s:列出系统应用。

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
......

 3)adb shell pm list package -3:列出第三方应用,发现没全都是我们自己的应用程序。
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


7)pm path:列出对应包名的 .apk 位置。例如:

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不用。
3,am命令:又是一个庞大的命令,am
源码 Am.java。这个命令一定要学好了,我们会经常用到,使用此命令可以从cmd控制台启动
activity, services;发送 broadcast等等。

重点: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,如下所示: 
//登陆界面:
<activity
android:name="com.meituan.passport.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@style/App.Passport">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.meituan.com"
android:path="/signin"
android:scheme="imeituan" />
</intent-filter>
<intent-filter>
<action android:name="com.meituan.android.intent.action.login" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

//城市选择界面
<activity
android:name=".city.CityActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan|stateHidden">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.meituan.com"
android:path="/city/list"
android:scheme="imeituan" />
</intent-filter>
</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 <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
putIntExtra():[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
putBooleanExtra():[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
......
#例子:调用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 android:name="com.some.package.name.YourServiceSubClassName" android:permission="com.some.package.name.YourServiceSubClassName">
<intent-filter>
<action android:name="com.some.package.name.YourServiceSubClassName"/>
</intent-filter>
</service>
启动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查看手机的密度




五、清除应用数据与缓存




六、强制停止应用 



七、查看前台 Activity

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android adb shel