Android Debug Bridge (adb) is a command-line tool. It lets you interact with an Android device. The adb commands facilitate a variety of device actions, such as installing and debugging apps, changing battery level, turning on/off the wifi etc. It has three components:
- A client, which sends commands. The client runs on your development machine. You can invoke a client from a command-line terminal by issuing an adb command.
- A daemon (adbd), which runs commands on a device. The daemon runs as a background process on each device.
- A server, which manages communication between the client and the daemon. The server runs as a background process on your development machine.
Today I’ll explain how to manipulate your mobile device’s battery level. As you all know, mobile testing is trivial. There are many components that change the state of the device. Those components are the battery, network and many more.
What happens after the battery is below %15? When your phone gets into power saver mode, network turns itself to off state to save your battery power. After you start using the app, IP address change. If there’s an IP restriction on your app, your session will be terminated. That’s a business rule in finance app’s in Turkey.
Generally, those situations are tested manually. So how can we implement those situations in our mobile automation testing process?
Prerequisite
You need to install Android SDK Platform-Tools package. Here is the website to install it.
https://developer.android.com/studio/releases/platform-tools
Battery Commands
dumpsys battery set level %s – It let you change the level from 0 to 100
dumpsys battery set status %s – It let you change the level to Unknown, Charging, Discharging, Not Charging or Full.
dumpsys battery reset – It let you reset the battery change made through adb.
dumpsys battery set usb %s – It let you change the status of USB connection. It can be ON or OFF.
Using those command via command line
Some command requires device Id, some does not. In order to get the unique device id, you should run “adb devices” command in command line.
Then you should run your command with below syntax.
adb -s DEVICE_ID shell COMMAND or adb shell COMMAND
So, if you want to change battery level to 5, you should run
adb -s DEVICE_ID shell dumpsys battery set level 5
Here’s the project that we just started.
A sample function from our BatteryCommand class
public class BatteryCommand extends Command { private static final String batteryLevelCommand ="dumpsys battery set level %s"; private static final String batteryStatusCommand ="dumpsys battery set status %s"; private static final String batteryResetCommand ="dumpsys battery reset"; private static final String batteryUSBCommand ="dumpsys battery set usb %s"; public void setBatteryLevel(String level) throws IOException { ProcessExecutor.exec(getDeviceId(),String.format(batteryLevelCommand,level)); System.out.print("Battery leve is set to "+level); } }
Process Executor class to execute ADB commands.
public static void exec(String deviceId,String command) throws IOException { Process process = null; String commandString; if(deviceId != null) { commandString = String.format("%s", "adb -s " + deviceId + " shell " + command); }else commandString = String.format("%s", "adb shell " + command); System.out.print("Command is "+commandString+"\n"); try { process = ProcessHelper.runTimeExec(commandString); } catch (IOException e) { } BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.print(line+"\n"); } }
Sample test class to execute our commands.
@Test public void testBattery() throws IOException, InterruptedException { BatteryCommand command = new BatteryCommand(); command.setDeviceId(device.getUniqueDeviceID()); command.setBatteryLevel("5"); command.setBatteryStatus(BatteryLevelEnum.NotCharging); command.setUSB(SwitchEnum.OFF); command.resetBattery(); }
Here’s the result of the execution
GitHub Project
https://github.com/swtestacademy/adb-device-manipulation
Thanks.
Canberk Akduygu

Canberk Akduygu is a Test Lead working in the Netherlands
public class BatteryCommand extends Command
What should be mentioned Command base class? By importing import org.openqa.selenium.remote.Command;
Its asking to add constructor
public BatteryCommands(SessionId sessionId, String name) {
super(sessionId, name);
// TODO Auto-generated constructor stub
}
Could you please post complete end to end code ?
Here is the full code: https://github.com/swtestacademy/adb-device-manipulation
Hey Onur,
You always come in rescue.
Thanks,
Hi,
If I want to get the adb shell command and get the output as a string,
can you explain how to ?
Thanks,
Eyal
In exec function. i have this functionality. Create an InputStreamReader using Process class.
Just take a look this code.
Hi, How are you?
Can you please help run this project? I made and build this project but it is giving me some errors like I could not find ProcessHelper class. I think this code is not complete. Please also tell me in which IDE I have to build this project I mean to say in Android Studio or IntelliJ IDEA?
how to turn off and turn on Wifi using java
Maybe this helps: https://stackoverflow.com/questions/5674333/how-to-enable-disable-wifi-from-an-application