Android开发环境安装好之后,需要将adb路径添加到环境变量(PATH)中,这样,就可以在命令行下直接使用adb命令了。

需要注意的是,有的命令需要先进入手机的linux系统,然后才可以使用,即adb shell, …,这里称这种命令为shell命令。另外有的命令可以直接用adb 使用,这里称之为非shell命令。通常两者可以通用的,下面会分别列出这两种命令。

常用非Shell命令

连接相关

adb version 查看adb版本
adb devices 查看连接设备
adb connect <android_ip>    连接android设备(需要在同一网段下)
adb kill-server 杀死adb 服务
adb start-server 启动adb服务
adb reboot 重启手机

多个Android设备

adb devices 查看连接设备
adb -s <device_name> shell 进入指定的设备shell

android shell 按键事件 android常用shell命令_android

串口下输入命令,保证可以adb connect成功
stop adbd
setprop service.adb.tcp.port 5555
start adbd

应用相关

adb shell pm list packages    显示所有应用信息
adb shell pm list packages -s    显示系统应用信息
adb shell pm list packages -3   显示第三方应用信息
adb shell pm list permissions -d -g    显示权限信息
adb shell pm clear <package_name>    清除数据
adb shell pm install <package_name>    安装应用
adb shell pm install -r -r <package_name>    保留数据和缓存文件,重新安装apk
adb shell pm uninstall <package_name>    卸载应用(与adb uninstall相同)

adb install <package_name>    安装应用
adb install -r <package_name>    保留数据和缓存文件,重新安装apk
adb uninstall <package_name>    卸载应用

获取手机系统信息

adb shell cat /proc/cpuinfo     显示cpu信息
adb get-serialno    获取序列号
adb shell  cat /sys/class/net/wlan0/address    获取mac地址
adb shell getprop ro.product.model    获取设备型号
adb shell wm size    查看屏幕分辨率
adb shell wm density    查看屏幕密度

log相关

adb logcat -v time    带时间戳的log
adb logcat -b <buffer>    查看不同类型的log,如main,system,radio,events,crash,all.默认为main log
adb logcat -c    清除log
adb logcat | grep -i "str"    忽略大小写筛选指定字符串log
adb logcat | grep -iE "str1|str2|str3"    筛选多个字符串
adb logcat > log.txt    打印log输入到文件

fastboot模式

adb reboot-bootloader
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash android system.img

输入文本

adb shell input text "str" 在EditText中输入文本。通常在TV或者盒子上,代替用遥控器输入
对应shell命令为:
input text "str"

注:也可以模拟其他事件,如点击,触摸等等。

文件相关

adb remount    
adb push <file_path> <dest_path>    从PC向手机端push文件
adb pull <target_path> <dest_path>    从手机端向PC端拉取文件
eg.
adb remount
adb push Hello.apk /system/app/Hello/

截屏与录屏

截屏:
adb shell screencap -p <output_file>    截取屏幕,并设置图片存储路径
adb pull <output_file> .    拉取该截图到PC
adb shell rm <output_file>    删除截图文件
eg.
adb shell screencap -p /sdcard/screen.png

录屏:
adb shell screenrecord <output_file> 录屏

dumpsys 查看信息相关

adb shell dumpsys    显示当前android系统信息(四大组件,内容太多,一般使用重定向)
adb shell dumpsys > info.txt 显示当前android系统信息(文件重定向)

activity:
adb shell dumpsys activity    显示当前所有activity信息
adb shell dumpsys activity top    查看当前应用的 activity 信息

package:
adb shell dumpsys package [package_name] 查看应用信息

内存:
adb shell dumpsys meminfo [package_name/pid] 查看指定进程名或者是进程 id 的内存信息

数据库:
adb shell dumpsys dbinfo [package_name] 查看指定包名应用的数据库存储信息(包括存储的sql语句)

am 相关

启动Activity:
adb shell am start -n <package_name>/<package_name>.<activity_name>
eg.
adb shell am start -n com.example.hello/com.example.hello.MainActivity

启动Service:
adb shell am startservice -n <package_name>/<package_name>.<service_name>    启动service
eg.
adb shell am startservice -n com.example.test/com.example.test.TestService

发送广播:
adb shell am broadcast -a <action>    发送广播

查看网络信息

adb shell netcfg    查看设备的 ip 地址
adb shell netstat    查看设备的端口号信息

属性信息

adb shell getprop [prop_name]    查看属性信息
adb shell setprop <prop_name> <value>    设置属性值

Monkey测试

adb shell monkey [options] <event-count>
adb shell monkey -p <package_name> -v <event_number>
对指定应用,做evnet_number个随机伪事件

查看进程信息

adb shell ps    查看进程信息

常用shell命令

在命令行下先执行adb shell,进入linux系统,然后再执行这些命令。
通常,大部分非shell命令都对应shell命令。这个使用者灵活掌握即可。

eg.

adb shell logcat 对应 logcat

adb shell getprop 对应 getprop

adb shell am start -n 对应 am start -n

其他

显示cpu信息:

android shell 按键事件 android常用shell命令_android_02

启动一个Activity

前提,在真机上,该Activity在AndroidManifest.xml中的exported属性必须为true才可以用adb shell 启动,在模拟器上不需要。即android:exported="true"。exported的default值是false的。
启动一个Activity:
adb shell am start -n <package name>/<activity name>
eg.

adb shell am start -n com.example.hello/com.example.hello.MainActivity

或者

adb shell am start -n com.example.hello/.MainActivity

在真机上exported为false的时候,执行命令会出现异常:

adb shell am start -n com.example.hello/.activity.HelloActivity
Starting: Intent { cmp=com.example.hello/.activity.HelloActivity }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.example.hello/.activity.HelloActivity } from null (pid=9098, uid=2000) not exported from uid 10221
    at android.os.Parcel.readException(Parcel.java:1546)
    at android.os.Parcel.readException(Parcel.java:1499)
    at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2642)
    at com.android.commands.am.Am.runStart(Am.java:766)
    at com.android.commands.am.Am.onRun(Am.java:305)
    at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
    at com.android.commands.am.Am.main(Am.java:97)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:284)

adb 截图命令

截图保存到SD卡里再导出

$ adb shell screencap -p /sdcard/screen.png
$ adb pull /sdcard/screen.png
$ adb shell rm /sdcard/screen.png

这种方法比较麻烦,需要3步:

  1. 截图保存到sdcard
  2. 将图片导出
  3. 删除sdcard中的图片

截图直接保存到电脑(Windows only)

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

执行adb shell 将\n转换\r\n, 因此需要用sed删除多余的\r

使用alias

修改~/.bashrc,添加一句:

alias adb-screencap="adb shell screencap -p | sed 's/\r$//'"

执行source ~/.bashrc后,可以直接使用
adb-screencap > screen.png 截图并保存到电脑上