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

Android 系统提供的常用命令工具

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

treecmds−L1cmds├−−am├−−appops├−−appprocess├−−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)来演示.先从简单的开始.imeime是和输入法相关的,可以通过它来启用/设置输入法,也可以列出手机中已有的输入法. adb shell ime list -s

com.sohu.inputmethod.sogou/.SogouIME

com.google.android.inputmethod.pinyin/.PinyinIME

com.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命令可以获得分辨率/屏幕密度等

adbshellwmsizePhysicalsize:1080x1920 adb shell wm density

Physical density: 480

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

wmoverscan10,10,100,100 wm overscan reset

试过之后记得执行reset

screencap

screencap用来截屏

adbshellscreencap−husage:screencap[−hp][−ddisplay−id][FILENAME]−h:thismessage−p:savethefileasapng.−d:specifythedisplayidtocapture,default0.IfFILENAMEendswith.pngitwillbesavedasapng.IfFILENAMEisnotgiven,theresultswillbeprintedtostdout.我们可以直接将截屏保存到电脑中 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 message

runtest: 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.xml

events: 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-insensitive

If ‘–user NUM’ is not given, the operations are performed on the owner user.

比如我们想查看android_id

adbshellsettingsgetsecureandroidid1dbbe170f8995d89查看wifi状态 adb shell settings get global wifi_on

1

查看日期是否是24小时制

$ adb shell settings get system time_12_24

24

svc

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

例如:

$ svc wifi

svc wifi

Control the Wi-Fi manager

usage: svc wifi [enable|disable]

Turn Wi-Fi on or off.

控制移动网络数据开关

adbshellsvcdatadisable adb shell svc data enable

appops

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

$ adb shell appops get com.android.phone

VIBRATE: allow; time=+1d3h57m1s111ms ago; duration=+63ms

READ_CONTACTS: allow; time=+2h10m59s285ms ago

READ_SMS: allow; time=+2h10m49s858ms ago

WRITE_SMS: allow; time=+3m46s339ms ago

READ_ICC_SMS: allow; time=+2h10m49s859ms ago

WRITE_CLIPBOARD: allow; time=+10d2h24m17s819ms ago

WAKE_LOCK: allow; time=+5s122ms ago; duration=+14ms

READ_EXTERNAL_STORAGE: allow; time=+14h31m4s898ms ago

WRITE_EXTERNAL_STORAGE: allow; time=+14h31m4s898ms ago

$ adb shell appops get com.android.phone READ_CONTACTS

READ_CONTACTS: allow; time=+2h28m33s274ms ago

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

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

了解了这些工具,我们就可以写一些脚本来获取手机和app信息, 省去了log也方便查看和调试.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 调试