Android adb命令使用总结

一,写在前面

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 设备上的文件或者文件夹复制到本地。

1
adb pull sdcard/pull.txt ~/Downloads/  #复制 Sdcard下的pull.txt文件到~/Downloads目录下。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值