The Android Debug Bridge is better known as ADB. It is a command-line utility, included in Android SDK, which allows us to interact with an Android device or emulator over a USB connection, allowing files to be transferred, installing applications, changing permissions of applications, taking screenshots, and much more.
If you are not familiar with ADB (Android Debug Bridge), I recommend starting with the official ADB page.
This article contains information about a few ADB commands that allow us to interact with devices and test applications more efficiently.
We can interact with any device or emulator when connected via USB or Wi-Fi.
ADB over Wi-Fi
To connect an Android device via Wi-Fi we need to use the
adb connect <ip-address> command.
We can find the current ip address by going into the "Settings > About device > Status" screen on Android device.
Let's imaging that the IP address is the following:
# Connect to the device by its IP address adb connect 192.168.1.42 # Connect to the device by its IP address with specific port adb connect 192.168.1.42:5554 # Disconnect from the device by it's IP address adb disconnect 192.168.1.42
Note: The adb connect and adb disconnect use a default port: 5555. If you cannot connect to the device by it's IP address, this is most probably due to your device not being able to listen for a TCP/IP connection on 5555 port. To fix this issue you will need to connect the device via USB and execute the following command:
adb tcpip 5555
Helpful ADB commands
The ADB supports many commands which allow us to interact with Android devices or emulators. You can find the description of commands here.
However, I will share a few commands that will give you benefits in some particular scenarios when testing Android applications.
Send input event
Sometimes you can have a situation when you need to enter specific text during the manual verification of the application, like a voucher code for example. This can be a real life case that can be used when you don't have access to resources with such code on the device.
We can enter any text to the selected input field by
adb shell input text "<text>" command.
# all spaces should be replaced with "%s" adb shell input text "insert%syour%stext"
We can emulate pressing the hardware buttons with
adb shell input keyevent <key|action-name> command. You can find the keys of hardware buttons here.
adb shell input keyevent 26 adb shell input keyevent POWER
Testing app with Monkey testing approach
Monkey testing is a technique in software testing where a user tests the application or a system by proving random inputs (type text, clicks, pressing hardware button, etc) and checking for the application behaviour, or by seeing if the application will crash.
ADB has a possibility for such type of testing. We can use the
adb shell monkey -p <package> -v <event-count> -s <seed>. The
seed parameter is needed if we want to reproduce the testing session, which in that case, similar events will be generated during the next run.
adb shell monkey -p com.alexzh.mapnotes -v 10000 -s 100
We can change permissions of installed application by using the
adb shell pm grant <package> <permission> or
adb shell pm revoke <package> <permission> commands.
To grant permissions(s) we can use the
adb shell pm grant <package> <permission> command.
adb shell pm grant com.alexzh.mapnotes android.permission.ACCESS_FINE_LOCATION adb shell pm grant com.alexzh.mapnotes android.permission.ACCESS_COARSE_LOCATION
We can grand all requested permissions to application by adding
-g to the
adb shell pm grant command.
adb shell pm grant -g com.alexzh.mapnotes
To revoke permissions(s) we can use the
adb shell pm revoke <package> <permission> command.
adb shell pm revoke com.alexzh.mapnotes android.permission.ACCESS_FINE_LOCATION adb shell pm revoke com.alexzh.mapnotes android.permission.ACCESS_COARSE_LOCATION
Note: When we install an application with the
adb install <apk> command, we can add the
-g parameter, and all permissions for the application will be granted.
adb install -g mapnotes.apk
Simulate process death
Android OS can decide to kill a process when the application is running in the background and the device is running low on memory. This is to free up memory and give it to another application or service who have more priority.
We want to be ready for such situation and want to avoid any potential problem when our app will be killed by the OS.
We can simulate such situation with the
adb shell am kill <package> command.
adb shell am kill com.alexzh.mapnotes
ADB tool has many possibilities, which can help interact with the device, install applications, verify different use cases, etc.
We discussed commands, which can be helpful to developers and QA engineers.
adb shell inputprovides the possibility to enter text, emulate pressing hardware buttons, do swipe gestures, etc.
adb shell input text "insert%syour%stext"
adb shell input keyevent 26
adb shell input keyevent POWER
adb shell monkey -p <package> -v <event-count> -s <seed>command allows us to execute tests use the monkey testing approach which can verify stability of our application by sending random inputs to the device (click, enter text, pressing hardware buttons, etc).
adb shell pm grant <package> <permission>and
adb shell pm revoke <package> <permission>provide us with the possibility to change the permissions of installed application. It helps to start application with a required set of permissions. This approach can then be used for reproducing issues with specific permissions.
adb shell am kill <package-name>helps to simulate the process "death" which can happen when the OS decides to kill an application because of running into low memory.
Documentation for ADB commands can be found here.