关闭

Android ADB命令集合

标签: androidadb
706人阅读 评论(0) 收藏 举报
分类:

时不时会用到adb与设备进行各种交互,为了不在使用的时候”东奔西跑”,这这里总结一下常用的命令,以备不时之需。

adb命令

安装APK

首次安装

$ adb install xxx.apk

如果使用此命令执行覆盖安装,会出现如下错误提示

Failed to install xxx.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS:
Attempt to re-install app.xxx without first uninstalling.]

所以,覆盖安装使用如下命令执行

$ adb install -r xxx.apk

卸载APK

指令如下

$ adb uninstall ${xxx_pkg_name}

有些文章在卸载时也写的是APK的文件名,这明显是不对的。

卸载但是保留datacache目录,之前的命令是

$ adb uninstall -k ${xxx_pkg_name}

但是执行之后,会出现如下提示

The -k option uninstalls the application while retaining the data/cache.
At the moment, there is no way to remove the remaining data.
You will have to reinstall the application with the same signature, and fully uninstall it.
If you truly wish to continue, execute ‘$ adb shell pm uninstall -k’
.

即,提示你运行如下命令

$ adb shell pm uninstall -k ${xxx_pkg_name}

这里的保留datacache并不是/data/data/xxx_pkg_name/目录下的内容,推测可能指的是在外部存储的目录。

有一点需要注意,如果你使用了-k进行卸载之后,再覆盖安装,那么需要和原来的签名一致的包,否则会安装失败。

查看所有已连接的设备

包括各种真实Android设备和模拟器

$ adb devices

指定所要操作的设备

如果同时连接多台设备,那么在使用adb进行操作时需要指定你的目标设备具体是哪个,否则会报错。

很简单,加一个参数即可

$ adb -s [command] // e.g. adb -s install xxx.apk

进入shell模式

进入命令很简单

$ adb shell

但是要注意一点,shell模式不支持多个设备,如果你此时已连接多个设备,它会报错

error: more than one device/emulator

获取设备序列号

这个序列号指的是显示在$ adb devices列表里的序列号,并不是android_id

$ adb get-serialno

此命令同样不支持多个设备

开启/关闭adb服务

开启

$ adb start-server

关闭

$ adb kill-server

一般开启命令没有必要手动执行,因为如果你执行其它$ adb命令时服务没有开启,会自动先开启服务的。

设备上的daemon是/sbin/$ adbd

$ adb的通信也是C/S模式,具体可以参考下面的文章:
[Android]adb和adbd浅析
Android中的adbd

截屏

其实需要3步

  1. 截图并保存在设备外部存储上(sdcard)
  2. 将图片导出到电脑上
  3. 删除设备外部存储上的图片

命令如下

$ adb shell /system/bin/screencap -p /sdcard/screenshot.png
$ adb pull /sdcard/screenshot.png ~/screenshot.png 
$ adb shell rm /sdcard/screenshot.png

如果你在Linux下操作,可以使用组合命令

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

具体可参考Android截图命令screencap

重启/关机

重启

$ adb reboot

重启进入recovery模式

$ adb reboot recovery

Recovery模式,可以简单地理解为类似于Windows的安全模式,最小的基本系统(这里的系统指的是linux系统,不是framework之上的android系统)。
在这个模式下,可以进行wipe, 卡刷, 安装zip包(比如supersu等工具)等等操作。

重启进入bootloader模式

$ adb reboot bootloader

关机

$ adb shell reboot -p

2个命令有些像,但是不要混淆。前者是通过$ adb来执行重启,而后者是调用设备上的reboot程序来执行命令。

操作SQLite3数据库

其实是使用设备中的sqlite3命令执行操作

$ adb shell sqlite3 xxx.db

具体可参考在$ adb shell中直接使用sqlite3命令操作数据库

获取root权限

有些文章中只是简单的列出$ adb root命令,但是使用该命令后并没有发现有什么变化。
可能是我使用不当?

按照某些文章所说,使shell获取root权限有2种方法

  1. 设备已root的前提下执行su进行提权
  2. 修改某些系统文件,然后进行一系列的操作

第2种过于麻烦,所以这里不加讨论,有兴趣的可以参考

至于root,那是另外一个话题,这里不加讨论。

第一种方法很简单,如下

$ adb shell su

设备上会弹出授权对话框询问是否同意,确定即可。

将电脑上的文件复制到设备

$ adb push ${file_on_computer} ${path_on_device}

将设备上的文件复制到电脑

与上面的相反

$ adb pull ${file_on_device} ${path_on_computer}

其实这个命令我们在前边的截图里边已经使用过了。

查看log信息

命令很简单

$ adb logcat

但是还是不要使用这个命令看log了,没有任何附加功能(或者可以通过参数控制,但是操作比较麻烦),实际使用当中,还是老老实实地使用ddms来看log吧。

启动Activity

这里使用了设备上的命令am,以启动Activity为例

$ adb shell am start -n {$pkg/$activity_class_name}

但是如果,你要启动的Activity不是Launcher Activity,那么要使用root权限才能启动,否则会报错。

除此之外,am还可以

  • 发送广播
  • 以Intent方式启动Activity
  • 设置其它的多个参数

具体可以参考

或者可以使用monkey启动主activity

$ adb shell monkey -p your.app.package.name -c android.intent.category.LAUNCHER 1

获取当前屏幕上运行的Activity的信息

命令:

$ adb shell dumpsys window windows | grep 'mCurrentFocus'

向设备发送事件

这里使用的是设备上的命令input,以发送电源按键为例,命令如下

$ adb shell
input keyevent 26

input命令非常强大,可以进行很多设备的模拟输入,包括有

  • mouse
  • keyboard
  • joystick
  • touchnavigation
  • touchpad
  • trackball
  • stylus
  • dpad
  • touchscreen
  • gamepad

其它使用可参考

端口转发

命令是$ adb forward,使用 TO BE ADDED

具体可参考$ adb forward交互流程

调整分辨率与DPI

两者使用的都是wm命令。

调整分辨率

$ adb shell wm size 1920x1080

1920x1080替换为你的目标分辨率。

调整DPI

$ adb shell wm dpi 480

480替换为你的目标DPI。

如果要还原设置,可以分别执行

$ adb shell wm size reset
$ adb shell wm dpi reset

adb程序源代码分析

TO BE ADDED

参考

  1. 通过adb uninstall package 卸载软件
  2. [Android]adb和adbd浅析
  3. Android中的adbd
  4. Android截图命令screencap
  5. 在adb shell中直接使用sqlite3命令操作数据库
  6. Android AM命令行启动程序的方法
  7. 浅谈android的am命令
  8. adb forward交互流程
  9. 一些比较实用的 Android adb 命令分享
  10. Android input命令
  11. Android 中 如何利用am input 命令做自动压力测试
  12. [Android]getevent,sendevent,input命令的使用
  13. HOW TO
    Change Your Android’s Screen Resolution Without Root Access
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:79271次
    • 积分:2005
    • 等级:
    • 排名:第19888名
    • 原创:68篇
    • 转载:12篇
    • 译文:9篇
    • 评论:13条
    最新评论