博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android系统提供的常用命令行工具
阅读量:4143 次
发布时间:2019-05-25

本文共 4995 字,大约阅读时间需要 16 分钟。

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

 

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中也有一些命令,比如我们常用的,在我之前的blog中也介绍过.

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

转贴请保留以下链接

本人blog地址

转载地址:http://iycti.baihongyu.com/

你可能感兴趣的文章
java abstract修饰符
查看>>
数组分为两部分,使得其和相差最小
查看>>
java抽象类和接口
查看>>
有趣的排序——百度2017春招
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
实验2-6 字符型数据的输入输出
查看>>
实验3-5 编程初步
查看>>
实验4-1 逻辑量的编码和关系操作符
查看>>
实验5-2 for循环结构
查看>>
实验5-3 break语句和continue语句
查看>>
实验5-4 循环的嵌套
查看>>
实验5-5 循环的合并
查看>>
实验5-6 do-while循环结构
查看>>
实验5-7 程序调试入门
查看>>