本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接

 

android提供了不少命令行工具,方便我们调试和查看信息.下面是frameworks/base/cmds(android 6.0.1)中的命令.

$ tree cmds -L 1

cmds

├── am

├── appops

├── app_process

├── appwidget

├── backup

├── bmgr

├── bootanimation

├── bu

├── content

├── dpm

├── hid

├── idmap

├── ime

├── input

├── interrupter

├── media

├── pm

├── requestsync

├── screencap

├── settings

├── sm

├── svc

├── telecom

├── uiautomator

└── wm

上面每一个目录都是一个/一组命令.其中svc中包括power, data, wifi, usb, nfc这些开关.

这里只列举一些我平时可能用的到的命令(am, appops, ime, input, pm, screencap, settings, svc, uiautomator, wm)来演示.先从简单的开始.

ime

ime是和输入法相关的,可以通过它来启用/设置输入法,也可以列出手机中已有的输入法.

$ adb shell ime list -scom.sohu.inputmethod.sogou/.SogouIMEcom.google.android.inputmethod.pinyin/.PinyinIMEcom.sohu.inputmethod.sogou.xiaomi/.SogouIME

 

input

input命令可以模拟输入

比如我们想在输入框内输入123 

adb shell input text 123

注意,要满足几点,首先要聚焦在输入框,另外最好使用原生输入法

 

我们也可以模拟系统按键,比如返回键

adb shell input keyevent KEYCODE_BACK

我们也可以模拟点击事件,比如点击x=900,y=150 

$ adb shell input tap 900 150


wm

wm命令可以获得分辨率/屏幕密度等

$ adb shell wm sizePhysical size: 1080x1920$ adb shell wm densityPhysical density: 480

还可以修改显示输入图像的比例,不过不知道有什么用,大家可以试试这个命令.

$ wm overscan 10,10,100,100$ wm overscan reset

试过之后记得执行reset


screencap

screencap用来截屏

$ adb shell screencap -husage: screencap [-hp] [-d display-id] [FILENAME]   -h: this message   -p: save the file as a png.   -d: specify the display id to capture, default 0.If FILENAME ends with .png it will be saved as a png.If FILENAME is not given, the results will be printed to stdout.

我们可以直接将截屏保存到电脑中

$ adb shell screencap -p | sed 's/\r$//' > screen.png

也可以将截图保存到sd卡中

$ adb shell 'cd sdcard; screencap -p screen.png'$ adb shell ls -l sdcard/screen.png-rw-rw---- root     sdcard_rw   197116 2016-06-21 11:49 screen.png


uiautomator

uiautomator可以用来做UI测试,也可以dump出当前UI结构.如果觉得hierarchy不好用,也可以试试这个命令.只不过结果是xml形式,信息也很全.

$ adb shell uiautomator Usage: uiautomator  [options]Available subcommands:help: displays help messageruntest: executes UI automation tests    runtest  [options]    :  < -c  | -e class  >      : a list of jar files containing test classes and dependencies. If        the path is relative, it's assumed to be under /data/local/tmp. Use        absolute path if the file is elsewhere. Multiple files can be        specified, separated by space.      : a list of test class names to run, separated by comma. To        a single method, use TestClass#testMethod format. The -e or -c option        may be repeated. This option is not required and if not provided then        all the tests in provided jars will be run automatically.    options:      --nohup: trap SIG_HUP, so test won't terminate even if parent process               is terminated, e.g. USB is disconnected.      -e debug [true|false]: wait for debugger to connect before starting.      -e runner [CLASS]: use specified test runner class instead. If        unspecified, framework default runner will be used.      -e  : other name-value pairs to be passed to test classes.        May be repeated.      -e outputFormat simple | -s: enabled less verbose JUnit style output.dump: creates an XML dump of current UI hierarchy    dump [--verbose][file]      [--compressed]: dumps compressed layout information.      [file]: the location where the dumped XML should be stored, default is      /sdcard/window_dump.xmlevents: prints out accessibility events until terminated

dump当前UI结构

adb shell uiautomator dump sdcard/test.xml


settings

settings可以修改/获取系统设置信息

$ adb shell settings usage:  settings [--user NUM] get namespace key        settings [--user NUM] put namespace key value        settings [--user NUM] delete namespace key        settings [--user NUM] list namespace'namespace' is one of {system, secure, global}, case-insensitiveIf '--user NUM' is not given, the operations are performed on the owner user.

比如我们想查看android_id

$ adb shell settings get secure android_id1dbbe170f8995d89

查看wifi状态

$ adb shell settings get global wifi_on1

查看日期是否是24小时制

$ adb shell settings get system time_12_2424


svc

svc下面有一组命令,power, data, wifi, usb, nfc,可以控制其开关

例如:

$ svc wifisvc wifiControl the Wi-Fi manager usage: svc wifi [enable|disable]         Turn Wi-Fi on or off.

控制移动网络数据开关

$ adb shell svc data disable$ adb shell svc data enable

 

appops

appops可以查看/修改权限相关信息

$ adb shell appops get com.android.phone VIBRATE: allow; time=+1d3h57m1s111ms ago; duration=+63msREAD_CONTACTS: allow; time=+2h10m59s285ms agoREAD_SMS: allow; time=+2h10m49s858ms agoWRITE_SMS: allow; time=+3m46s339ms agoREAD_ICC_SMS: allow; time=+2h10m49s859ms agoWRITE_CLIPBOARD: allow; time=+10d2h24m17s819ms agoWAKE_LOCK: allow; time=+5s122ms ago; duration=+14msREAD_EXTERNAL_STORAGE: allow; time=+14h31m4s898ms agoWRITE_EXTERNAL_STORAGE: allow; time=+14h31m4s898ms ago$ adb shell appops get com.android.phone READ_CONTACTSREAD_CONTACTS: allow; time=+2h28m33s274ms ago


am和pm这两个命令应该算是最复杂也是最常用的了.我们可以通过am启动页面,发送广播等,可以通过pm列出手机中的app,启用禁用app等.当然有一些是需要root权限的.这里就不再介绍了.

android手机中的命令行工具不只这些,在frameworks/native/cmds中也有一些命令,比如我们常用的dumpsys,在我之前的blog中也介绍过.


了解了这些工具,我们就可以写一些脚本来获取手机和app信息, 省去了log也方便查看和调试. 



转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

更多相关文章

  1. Android(安卓)Studio中如何查看获取MD5和SHA1值(应用签名)
  2. 关于AlertDialog.getWindow().setContentView(view)不能弹出输入
  3. 搭建Android驱动开发环境
  4. win7 cmd终端连接android手机运行adb shell脚本命令
  5. Android中的EditText默认时不弹出软键盘的方法
  6. Android(安卓)失去焦点,关闭弹出的软键盘
  7. Android手机开发ubuntu系统中常用的搜索命令
  8. android下m、mm、mmm编译命令的使用
  9. Android(安卓)开发 使用wifi连接adb

随机推荐

  1. 用git的windows客户端msysgit下载android
  2. 在Xamarin.Forms中使用SkiaSharp绘图时从
  3. android关于获取手机号
  4. android appwidget开发
  5. Android(安卓)Jamendo开源在线音乐播放器
  6. Android(安卓)Gallery setSelection()和onF
  7. Android(安卓)沉浸式标题栏的快速实现方
  8. Android(安卓)编程的几点总结
  9. Android之高德地图自定义样式
  10. Android设计模式系列--原型模式