adb shell 与 Android 总结及问题

一、adb 启动 Android 应用

手机连接 adb 后,可通过 am 命令做很多操作,可以启动 Service、Broadcast,杀进程,监控等功能:

1.启动Activity: adb shell am start [options] (可使用 am -h 查看帮助)

(1)拨打一个电话:

adb shell am start -a android.intent.action.CALL -d tel:10086   //这里 -a 表示动作,-d 表述传入的数据,还有 -t 表示传入的类型

(2)打开一个网页:

adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com   //这里 -d 表示传入的 data, 此处 -d 后的参数可不加引号 “”

(3)打开音乐播放器:

adb shell am start -a android.intent.action.MUSIC_PLAYER 
或 adb shell am start -n com.android.music/com.android.music.MusicBrowserActivity    // 这里 -n 表示组件

(4)启动 Activity,携带参数:
比如,启动的 Acitvity 所在的 app 是 net.example.demo,需要启动的是其中的 MainActivity,并给他传递两个参数:pid 整数,值为10;str 字符串,"hello",则

// -ei(extra integer)表示参数类型为整型,-es(extra string)表示参数的类型为字符串,然后它们后面分别跟一个键值对,标识参数名和具体值
adb shell am start -a android.intent.action.MAIN -n net.example.demo/net.example.demo.MainActivity  --ei pid 10 --es str "hello"  

(5)启动 Activity,携带 Uri 参数:

比如,启动的 Acitvity 需要传递参数 flightDate、newOrderState、siteNo、fromMessage,Uri 参数为 imeituan://www.meituan.com/flight/express_status?flightDate=2017-01-22&newOrderState=401&siteNo=729&fromMessage=1,此时可以通过 am 命令 -d 选项来指定 Uri 参数,则

adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -d “imeituan://www.meituan.com/flight/express_status?flightDate=2017-01-22\&newOrderState=401\&siteNo=729\&fromMessage=1”

注意:参数中的 "&",须用 "" 对 "&" 进行转义;-d 后的 Uri 参数要加引号“ ”,否则命令不会起作用(具体介绍见这里)。

2.启动一个服务:adb shell am startservice <服务名称>

adb shell am startservice -n com.android.music/com.android.music.MediaPlaybackService   
或 adb shell am startservice -a com.example.myservice   //这里 -a 表示动作,就是你在 Androidmanifest 里定义的

3.发送一个广播:adb shell am broadcast -a <广播动作>

adb shell am broadcast -a com.example.mybroadcast

4.强制关闭一个应用程序:adb shell am force-stop

adb shell am force-stop com.example.test

二、遇到问题

1.有 adb 打开网址:imeituan://www.meituan.com/train/hybrid/web?url=http://i.meituan.com/trip/train/search/

  • 将 query 部分编码为 url=http://i.meituan.com/trip/train/search/
    => url=http%3a%2f%2fi.meituan.com%2ftrip%2ftrain%2fsearch%2f'

  • 然后使用命令启动页面:adb shell am start -a android.intent.action.VIEW -d 'imeituan://www.meituan.com/train/hybrid/web?url=http%3a%2f%2fi.meituan.com%2ftrip%2ftrain%2fsearch%2f'

运行报错:

image.png

分析与解决:

  • 命令不对,或者电脑 adb 问题,改变命令依然报同样的错误;网上搜原因没办法解决

  • 不对 query 编码,直接使用命令 adb shell am start -a android.intent.action.VIEW -d imeituan://www.meituan.com/train/hybrid/web?url=http://i.meituan.com/trip/train/search/成功了!

原因:是因为编码就不能打开网址了?错!将编码后的运行出错的URL重新复制到 word,然后再复制到终端,成功打开了页面。原来是因为文本字符格式的问题,导致命令运行后报错。终端命令的使用一定要注意文本字符格式!

三、adb获取Android应用相关信息

adb shell dumpsys

adb shell dumpsys battery   // 获取设备电池信息
adb shell dumpsys cpuinfo   // 获取 cpu 信息
adb shell dumpsys wifi      // 获取到当前连接的 wifi 名、搜索到的 wifi 列表、wifi强度等
adb shell dumpsys power     // 获取电源管理信息
adb shell dumpsys meminfo   // 获取内存信息
adb shell dumpsys package   // 获取 package 信息
adb shell dumpsys activity  // 获取 Activity 信息:此信息还可以通过 AndroidStudio 在 logcat 查看,筛选 ActivityManager 相关的 info 就 ok

adb shell dumpsys notification          // 获取通知信息
adb shell dumpsys activity top          // 获取当前界面的 UI 信息
adb shell dumpsys telephony.registry    // 获取电话信息:电话状态等
adb shell dumpsys meminfo PACKAGE_NAME  // 要获取具体应用的内存信息,可加上包名
adb shell dumpsys package PACKAGE_NAME  // 获取某个包的信息

adb shell dumpsys activity top | findstr ACTIVITY      //获取当前界面的 Activity
adb shell dumpsys display | findstr DisplayDeviceInfo   // 获取设备分辨率:DisplayDeviceInfo{"内置屏幕": 1080 x 1920, 55.0 fps, density 480, 464.9 x 468.9 dpi...

adb截屏

adb shell  screencap /sdcard/screen.png
adb pull /storage/sdcard/screen.png ./

参考网址:

http://blog.csdn.net/u013951778/article/details/52299189

你可能感兴趣的:(adb shell 与 Android 总结及问题)