The Android Debugging Bridge (adb) is a generic command-line tool that allows you to communicate with a simulator instance or connected Android device.It facilitates the operation of various devices, such as installing and debugging applications, and provides access to Unix shell s that can be used to run commands on simulators or connected devices.The tool acts as a client-server program consisting of three components:
Client, which sends commands.The client runs on the development computer.You can invoke a client from a command line terminal by issuing an adb command.
A daemon that runs commands on the device.The daemon runs as a background process on each emulator or device instance.
Server, which manages communication between clients and daemons.The server runs as a background process on the development computer.
When starting an adb client, the client first checks to see if any adb server processes are running.If not, it will start the server process.When the server starts, it binds to the local TCP port 5037 and listens for commands sent from adb clients - all adb clients use port 5037 to communicate with the adb server.
The server then sets up connections to all running simulator/device instances.It scans odd number ports between 5555 and 5585 (range of simulator/device use) to find simulator/device instances.Once the server discovers the adb daemon, it will set up a connection to the port.Note that each emulator/device instance will get a pair of sequentially ordered Ports - the even-number ports for console connections and the odd-number ports for adb connections.For example:
Simulator 1, Console: 5554 Simulator 1, adb:5555 Simulator 2, Console: 5556 Simulator 2, adb:5557 And so on...
As shown above, the simulator instance connected to adb at port 5555 is the same as the console instance listening on port 5554.
Once the server has set up connections to all simulator instances, you can access them using the adb command.Because the server manages connections to simulator/device instances and handles commands from multiple adb clients, you can control any simulator/device instance from any client (or from a script).
- Display all Android platforms in the system:
android list targets
- Display all AVD s in the system:
android list avd
- Create AVD (Simulator):
android create avd --name name--target platform number
- Start the simulator:
Emulator-avd name-sdcard ~/name.img (-skin 1280x800)
- Delete AVD (simulator):
android delete avd --name Name
- Create SDCard:
mksdcard 1024M ~/Name.img
- AVD (simulator) location:
Linux(~/.android/avd) Windows(C:\Documents and Settings\Administrator\.android\avd)
- Start DDMS:
- Show all currently running simulators:
- Execute a command on an emulator:
Adb-s simulator number command
- Install the application:
ADB install-r application.apk
- Get the files in the simulator:
adb pull <remote> <local>
- Write files to the simulator:
adb push <local> <remote>
- Enter shell mode of simulator:
- Start SDK, Document, Instance Download Manager:
- Unloaded apk package:
adb shell cd data/app rm apk package exit adb uninstall apk The primary package name of the package adb install -r apk package
- View adb command help information:
- View LOG information from the command line:
ADB logcat-s tag name
- Commands that follow the adb shell come from:
Sourcesystemcoretoolbox directory and source frameworks\base\cmds directory.
- Delete system applications:
adb remount (Remount the system partition to make it writable again). adb shell cd system/app rm *.apk
- Get administrator privileges:
- Start Activity:
ADB shell a m start-n package n a m e/package n a m e + class n a m e (-n class n a m e, -a action,-d date,-m MIME-TYPE,-c category,-e extended data, etc.).
23. Publishing Port:
You can set any port number as the host's request port to the emulator or device.For example:
adb forward tcp:5555 tcp:8000
24. Copy files:
You can copy a file or directory to a device or from a device to a device or simulator:
adb push <source> <destination></destination></source> //For example: ADB push test.txt/tmp/test.txt //Copy a file or directory from the device or simulator: adb pull <source> <destination></destination></source> //For example: ADB pull/android/lib/libwebcore.so.
25. Examples of search simulators/devices:
Get a list of currently running instances of the simulator/device and the status of each:
26. View bug reports:
27. Record wireless communication logs:
Generally speaking, there are a lot of logs for wireless communication, so it is not necessary to record them at run time, but we can set them up by command:
adb shell logcat -b radio
28. Obtain the ID and serial number of the device:
adb get-product adb get-serialno
29. Accessing database SQLite3
adb shell sqlite3
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device] -t: show time stamps -n: don't print newlines -s: print switch states for given bits -S: print all switch states -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64) -d: show HID descriptor, if available -p: show possible events (errs, dev, name, pos. events) -i: show all device info and possible events -l: label event types and names in plain text -q: quiet (clear verbosity mask) -c: print given number of events then exit -r: print rate events are received Usage: sendevent <device> <type> <code> <value>
Get the arrow key press and lift events through getevent, then send the corresponding events with sendevent to simulate the arrow key press and lift, thus achieving the functions defined on the arrow key locally. Following is a python wrapped adb command to trigger the arrow key press and lift, achieving a large number of functions defined on the arrow key to trigger automatic testing.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import time def main(times): os.popen("adb wait-for-device") for i in range(times): print("times:==>" + str(i + 1)) #Analog Arrow Key-Up send_direction_key_event("Arrow keys-Up and down", "Arrow keys-Up lift", 103, 5) #Analog Arrow Key-Down send_direction_key_event("Arrow keys-Press down", "Arrow keys-Lift Down", 108, 5) #Analog Arrow Key-Left send_direction_key_event("Arrow keys-Press left", "Arrow keys-Left lift",105, 1) time.sleep(5) def send_direction_key_event(keytipdown, keytipup, value, sleeptime): print(keytipdown) os.popen("adb shell sendevent /dev/input/event0 1 "+ str(value) + " 1") os.popen("adb shell sendevent /dev/input/event0 0 0 0") time.sleep(sleeptime) print(keytipup) os.popen("adb shell sendevent /dev/input/event0 1 "+ str(value) + " 0") os.popen("adb shell sendevent /dev/input/event0 0 0 0") time.sleep(1) print("==================") if __name__ == "__main__": #20 seconds at a time, 24 * 60 * 60 seconds a day, 4320 tests, set to 10000 below main(10000)