adb 是 Android 的远程调试命令,在 Android 打开 USB 调试模式或直接打开 ADB 功能,就可以用 shell 命令来控制系统。

Android 打开 USB 调试

打开 Android 系统的开发者模式的通用模式。

1
2
3
4
1.打开“设置”应用,然后滚动到底部。
2.如果它没有“开发者选项”设置,请点击“关于手机”(或“关于平板电脑”),滚动到底部,然后点击内置版本号7次。
3.返回并点击开发者选项。
4.启用 USB 调试。

安装 adb

Mac OS X

使用 brew 可以很简单的安装

1
2
$ brew cask install android-platform-tools
$ adb devices

随后就可以使用 adb 命令,不需要在配置各种环境变量

其他安装方式见 Set up adb on Mac OS X

链接设备

启动服务

1
$ adb start-server

查看设备列表

1
2
3
4
$ adb devices

List of devices attached
emulator-5554 device

关闭服务

1
$ adb kill-server

链接设备

当设备没有出现在设备列表中时,我们可以手动链接设备

1
$ adb connect <ip>:5555

Android 的 uiautomator 模块默认使用了 5555 端口号

链接成功后,设备会出现在设备列表中

1
2
3
4
5
$ adb devices

List of devices attached
10.0.2.1:5555 device
emulator-5554 device

使用 shell 命令

1
2
$ adb shell
root@x86:/ #

当有一个设备时,默认链接,如果有多个设备,需要指定设备

1
2
$ adb -s 10.0.2.1:5555 shell
root@x86:/ #

如果不想每次都手动指定,可以设置环境变量

1
export ANDROID_SERIAL="DC886B75"

shell 登陆后即可使用常见的脚本命令,比如 ls

1
2
3
4
5
$ adb shell
root@x86:/ # ls
mnt
lib
...

如果只是执行简单的命令,我们也可以直接在本地执行

1
2
3
4
$ adb shell ls
mnt
lib
...

包管理

安装

1
2
3
4
5
6
7
$ adb install test.apk
$ adb install -l test.apk # forward lock application
$ adb install -r test.apk # replace existing application
$ adb install -t test.apk # allow test packages
$ adb install -s test.apk # install application on sdcard
$ adb install -d test.apk # allow version code downgrade
$ adb install -p test.apk # partial application install

卸载

1
2
$ adb uninstall com.test.app
$ adb uninstall -k com.test.app # Keep the data and cache directories around after package removal.

查看包安装列表

1
2
3
4
5
6
7
8
9
$ adb shell pm list packages
$ adb shell pm list packages -f # See their associated file.
$ adb shell pm list packages -d # Filter to only show disabled packages.
$ adb shell pm list packages -e # Filter to only show enabled packages.
$ adb shell pm list packages -s # Filter to only show system packages.
$ adb shell pm list packages -3 # Filter to only show third party packages.
$ adb shell pm list packages -i # See the installer for the packages.
$ adb shell pm list packages -u # Also include uninstalled packages.
$ adb shell pm list packages --user <USER_ID> # The user space to query.

包路径

1
2
$ adb shell pm path com.android.phone
package:/system/priv-app/TeleService/TeleService.apk

清除数据和缓存

1
$ adb shell pm clear com.test.abc

进程管理

启动应用

1
2
$ adb shell 进入 Android
$ am start -n <package-name>/<package-name>.<activity-name>

或者直接运行

1
$ adb shell am start -n <package-name>/<package-name>.<activity-name>

一些系统应用打开方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 设置
$ am start -n com.android.settings/com.android.settings.Settings
# 日历
$ am start -n com.android.calendar/com.android.calendar.LaunchActivity
# 闹钟
$ am start -n com.android.alarmclock/com.android.alarmclock.AlarmClock
# 音乐和视频
$ am start -n com.android.music/com.android.music.MusicBrowserActivity
$ am start -n com.android.music/com.android.music.VideoBrowserActivity
$ am start -n com.android.music/com.android.music.MediaPlaybackActivity
# 照相机
$ am start -n com.android.camera/com.android.camera.Camera
# 浏览器
$ am start -n com.android.browser/com.android.browser.BrowserActivity
# 打开网址
$ am start -a android.intent.action.VIEW -d http://www.google.cn/
# 拨打电话
$ am start -a android.intent.action.CALL -d tel:10086

这里有个问题,我们可以通过 pm 命令查到 apk 的包名,但是 activity 就不方便知道了,我们希望只通过包名就能启动应用,从网上查到这个方法

1
$ am start -a android.intent.action.MAIN -n <package-name>

但是这种方式,我在模拟器中只可以打开系统应用,第三方应用会报错,再次查找发现可以使用 monkey 命令来启动应用

1
$ monkey -p <package-name> -c android.intent.category.LAUNCHER 1

经过测试,这种方式是比较方便打开各种应用

杀掉应用

1
$ am force-stop <package-name>

杀掉所有后台进程

1
$ am kill-all

更多命令

推送文件到设备

1
$ adb push test.apk /data

拉取设备的文件到本地

1
2
$ adb pull /data/test.apk
$ adb pull /data/test.apk ~/Downloads

查看设备 SSN 号

1
$ adb shell getprop | grep ro.boot.serialno

参考

03-16 19:51