Documentation ¶
Overview ¶
Multi-device Android Debug Bridge
The madb command wraps Android Debug Bridge (adb) command line tool and provides various features for controlling multiple Android devices concurrently.
Usage:
madb [flags] <command>
The madb commands are:
clear-data Clear your app data from all devices exec Run the provided adb command on all devices and emulators concurrently extern Run the provided external command for all devices group Manage device groups install Install your app on all devices name Manage device nicknames resolve Resolve device specifiers into device serials shell Run the provided adb shell command on all devices and emulators concurrently start Launch your app on all devices stop Stop your app on all devices uninstall Uninstall your app from all devices user Manage default user settings for each device version Print the madb version number help Display help for commands or topics
The madb flags are:
-d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
The global flags are:
-metadata=<just specify -metadata to activate> Displays metadata for the program and exits. -time=false Dump timing information to stderr before exiting the program.
Madb clear-data - Clear your app data from all devices ¶
Clears your app data from all devices.
To specify which user's data should be cleared, use 'madb user set' command to set the default user ID for that device. (See 'madb help user' for more details.)
Usage:
madb clear-data [flags] [<application_id>]
<application_id> is usually the package name where the activities are defined. (See: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename)
If the application ID is not specified, madb automatically determines which app to be cleared, based on the build scripts found in the current working directory.
If the working directory contains a Gradle Android project (i.e., has "build.gradle"), run a small Gradle script to extract the application ID. In this case, the extracted ID is cached, so that "madb clear-data" can be repeated without even running the Gradle script again. The ID can be re-extracted by clearing the cache by providing "-clear-cache" flag.
The madb clear-data flags are:
-clear-cache=false Clear the cache and re-extract the variant properties such as the application ID and the main activity name. Only takes effect when no arguments are provided. -module= Specify which application module to use, when the current directory is the top level Gradle project containing multiple sub-modules. When not specified, the first available application module is used. Only takes effect when no arguments are provided. -variant= Specify which build variant to use. When not specified, the first available build variant is used. Only takes effect when no arguments are provided. -d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb exec - Run the provided adb command on all devices and emulators concurrently ¶
Runs the provided adb command on all devices and emulators concurrently.
For example, the following line:
madb exec push ./foo.txt /sdcard/foo.txt
copies the ./foo.txt file to /sdcard/foo.txt for all the currently connected devices.
There are a few pre-defined keywords that can be expanded within an argument.
"{{index}}" : the index of the current device, starting from 1. "{{name}}" : the nickname of the current device, or the serial number if a nickname is not set. "{{serial}}" : the serial number of the current device.
For example, the following line:
madb exec -n=Alice,Bob push ./{{name}}.txt /sdcard/{{name}}.txt
copies the ./Alice.txt file to the device named Alice, and ./Bob.txt to the device named Bob. Note that you should type in "{{name}}" as-is, with the opening/closing curly braces, similar to when you're using a template library such as mustache.
To see the list of available adb commands, type 'adb help'.
Usage:
madb exec [flags] <command>
<command> is a normal adb command, which will be executed on all devices and emulators.
The madb exec flags are:
-d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb extern - Run the provided external command for all devices ¶
Runs the provided external command for all devices and emulators concurrently.
For each available device, this command will spawn a sub-shell with the ANDROID_SERIAL environmental variable set to the target device serial, and then will run the provided external command.
There are a few pre-defined keywords that can be expanded within an argument.
"{{index}}" : the index of the current device, starting from 1. "{{name}}" : the nickname of the current device, or the serial number if a nickname is not set. "{{serial}}" : the serial number of the current device.
For example, the following line:
madb extern echo I am {{name}}, and my serial number is {{serial}}.
prints out the name and serial pairs for each device.
Note that you should type in "{{name}}" as-is, with the opening/closing curly braces, similar to when you're using a template library such as mustache.
This command is intended to be used with external commands that are designed to work with only a single device at a time (e.g. gomobile, flutter).
Usage:
madb extern [flags] <external_command>
<external_command> is an external shell command to run for all devices and emulators.
The madb extern flags are:
-d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb group - Manage device groups ¶
Manages device groups, each of which can have one or more device members. The device groups can be used for specifying the target devices of other madb commands.
Usage:
madb group [flags] <command>
The madb group commands are:
add Add members to a device group clear-all Clear all the existing device groups delete Delete an existing device group list List all the existing device groups remove Remove members from a device group rename Rename an existing device group
Madb group add - Add members to a device group ¶
Adds members to a device group. This command also creates the group, if the group does not exist yet. The device group can be used when specifying devices in any madb commands.
When creating a new device group with this command, the provided name must not conflict with an existing device nickname (see: madb help name set).
A group can contain another device group, in which case all the members of the other group will also be considered as members of the current group.
Usage:
madb group add [flags] <group_name> <member1> [<member2> ...]
<group_name> is an alpha-numeric string with no special characters or spaces. This name must not be an existing device nickname.
<member> is a member specifier, which can be one of device serial, qualifier, device index (e.g., '@1', '@2'), device nickname, or another device group.
Madb group clear-all - Clear all the existing device groups ¶
Clears all the existing device groups.
Usage:
madb group clear-all [flags]
Madb group delete - Delete an existing device group ¶
Deletes an existing device group.
Usage:
madb group delete [flags] <group_name1> [<group_name2> ...]
<group_name> the name of an existing device group. You can specify more than one group names.
Madb group list - List all the existing device groups ¶
Lists the name and members of all the existing device groups.
Usage:
madb group list [flags]
Madb group remove - Remove members from a device group ¶
Removes members from an existing device group. If there are no remaining members after that, the group gets deleted.
Usage:
madb group remove [flags] <group_name> <member1> [<member2> ...]
<group_name> is an alpha-numeric string with no special characters or spaces. This name must be an existing device group name.
<member> is a member specifier, which can be one of device serial, qualifier, device index (e.g., '@1', '@2'), device nickname, or another device group.
Madb group rename - Rename an existing device group ¶
Renames an existing device group.
Usage:
madb group rename [flags] <old_name> <new_name>
<old_name> is the name of an existing device group.
<new_name> is the new name for the existing group. This must be an alpha-numeric string with no special characters or spaces, and must not conflict with another existing device or group name.
Madb install - Install your app on all devices ¶
Installs your app on all devices.
If the working directory contains a Gradle Android project (i.e., has "build.gradle"), this command will first run a small Gradle script to extract the variant properties, which will be used to find the best matching .apk for each device. These extracted properties are cached, and "madb install" can be repeated without running this Gradle script again. The properties can be re-extracted by clearing the cache by providing "-clear-cache" flag.
Once the variant properties are extracted, the best matching .apk for each device will be installed in parallel.
This command is similar to running "gradlew :<moduleName>:<variantName>Install", but "madb install" is more flexible: 1) you can install the app to a subset of the devices, and 2) the app is installed concurrently, which saves a lot of time.
If the working directory contains a Flutter project (i.e., has "flutter.yaml"), this command will run "flutter install --device-id <device serial>" for all devices.
To install your app for a specific user on a particular device, use 'madb user set' command to set the default user ID for that device. (See 'madb help user' for more details.)
To install a specific .apk file to all devices, use "madb exec install <path_to_apk>" instead.
Usage:
madb install [flags]
The madb install flags are:
-build=true Build the target app variant before installing or running the app. -clear-cache=false Clear the cache and re-extract the variant properties such as the application ID and the main activity name. Only takes effect when no arguments are provided. -module= Specify which application module to use, when the current directory is the top level Gradle project containing multiple sub-modules. When not specified, the first available application module is used. Only takes effect when no arguments are provided. -variant= Specify which build variant to use. When not specified, the first available build variant is used. Only takes effect when no arguments are provided. -d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb name - Manage device nicknames ¶
Manages device nicknames, which are meant to be more human-friendly compared to the device serials provided by adb tool.
Usage:
madb name [flags] <command>
The madb name commands are:
set Set a nickname to be used in place of the device serial. unset Unset a nickname set by the 'madb name set' command. list List all the existing nicknames. clear-all Clear all the existing nicknames.
Madb name set ¶
Sets a human-friendly nickname that can be used when specifying the device in any madb commands.
The device serial can be obtained using the 'adb devices -l' command. For example, consider the following example output:
HT4BVWV00023 device usb:3-3.4.2 product:volantisg model:Nexus_9 device:flounder_lte
The first value, 'HT4BVWV00023', is the device serial. To assign a nickname for this device, run the following command:
madb name set HT4BVWV00023 MyTablet
and it will assign the 'MyTablet' nickname to the device serial 'HT4BVWV00023'. The alternative device specifiers (e.g., 'usb:3-3.4.2', 'product:volantisg') can also have nicknames.
When a nickname is set for a device serial, the nickname can be used to specify the device within madb commands.
There can only be one nickname for a device serial. When the 'madb name set' command is invoked with a device serial with an already assigned nickname, the old one will be replaced with the newly provided one.
Usage:
madb name set [flags] <device_serial> <nickname>
<device_serial> is a device serial (e.g., 'HT4BVWV00023') or an alternative device qualifier (e.g., 'usb:3-3.4.2') obtained from 'adb devices -l' command <nickname> is an alpha-numeric string with no special characters or spaces.
Madb name unset ¶
Unsets a nickname assigned by the 'madb name set' command. Either the device serial or the assigned nickname can be specified to remove the mapping.
Usage:
madb name unset [flags] <device_serial | nickname>
There should be only one argument, which is either the device serial or the nickname.
Madb name list ¶
Lists all the currently stored nicknames of device serials.
Usage:
madb name list [flags]
Madb name clear-all ¶
Clears all the currently stored nicknames of device serials.
Usage:
madb name clear-all [flags]
Madb resolve - Resolve device specifiers into device serials ¶
Resolves the provided device specifiers and prints out their device serials, each in a separate line. This command only displays the unique serials of the devices that are currently available.
This command can be useful when you want to use the device nicknames and groups defined by madb in other command line tools. For example, to run a flutter app on "MyTablet" device, you can use the following command (in Bash):
flutter run --device $(madb resolve MyTablet)
Usage:
madb resolve [flags] <specifier1> [<specifier2> ...]
<specifier> can be anything that is accepted in the '-n' flag (see 'madb help'). It can be a device serial, qualifier, index, nickname, or a device group name.
Madb shell - Run the provided adb shell command on all devices and emulators concurrently ¶
Runs the provided adb shell command on all devices and emulators concurrently.
This command is a shorthand syntax for 'madb exec shell <command...>'. See 'madb help exec' for more details.
Usage:
madb shell [flags] <command>
<command> is a normal adb shell command, which will be executed on all devices and emulators.
The madb shell flags are:
-d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb start - Launch your app on all devices ¶
Launches your app on all devices.
In most cases, running "madb start" from an Android Gradle project directory will do the right thing for you. "madb start" will build the project first. After the project build is completed, this command will install the best matching .apk for each device, only if one or more of the following conditions are met:
- the app is not found on the device
- the installed app is outdated (determined by comparing the last update time of the installed app and the last modification time of the local .apk file)
- "-force-install" flag is set
If you would like to run the same version of the app repeatedly (e.g., for QA testing), you can explicitly turn off the build flag by providing "-build=false" to skip the build step.
To run your app as a specific user on a particular device, use 'madb user set' command to set the default user ID for that device. (See 'madb help user' for more details.)
Usage:
madb start [flags] [<application_id> <activity_name>]
<application_id> is usually the package name where the activities are defined. (See: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename)
<activity_name> is the Java class name for the activity you want to launch. If the package name of the activity is different from the application ID, the activity name must be a fully-qualified name (e.g., com.yourcompany.yourapp.MainActivity).
If either <application_id> or <activity_name> is provided, the other must be provided as well.
If no arguments are specified, madb automatically determines which app to launch, based on the build scripts found in the current working directory.
1) If the working directory contains a Flutter project (i.e., has "flutter.yaml"), this command will run "flutter start --device-id <device serial>" for all the specified devices.
2) If the working directory contains a Gradle Android project (i.e., has "build.gradle"), this command will run a small Gradle script to extract the application ID and the main activity name. In this case, the extracted IDs are cached, so that "madb start" can be repeated without even running the Gradle script again. The IDs can be re-extracted by clearing the cache by providing "-clear-cache" flag.
The madb start flags are:
-build=true Build the target app variant before installing or running the app. -clear-cache=false Clear the cache and re-extract the variant properties such as the application ID and the main activity name. Only takes effect when no arguments are provided. -force-install=false Force install the target app before starting the activity. -force-stop=true Force stop the target app before starting the activity. -module= Specify which application module to use, when the current directory is the top level Gradle project containing multiple sub-modules. When not specified, the first available application module is used. Only takes effect when no arguments are provided. -variant= Specify which build variant to use. When not specified, the first available build variant is used. Only takes effect when no arguments are provided. -d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb stop - Stop your app on all devices ¶
Stops your app on all devices.
To stop your app for a specific user on a particular device, use 'madb user set' command to set the default user ID for that device. (See 'madb help user' for more details.)
Usage:
madb stop [flags] [<application_id>]
<application_id> is usually the package name where the activities are defined. (See: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename)
If the application ID is not specified, madb automatically determines which app to stop, based on the build scripts found in the current working directory.
1) If the working directory contains a Flutter project (i.e., has "flutter.yaml"), this command will run "flutter stop --device-id <device serial>" for all the specified devices.
2) If the working directory contains a Gradle Android project (i.e., has "build.gradle"), run a small Gradle script to extract the application ID. In this case, the extracted ID is cached, so that "madb stop" can be repeated without even running the Gradle script again. The ID can be re-extracted by clearing the cache by providing "-clear-cache" flag.
The madb stop flags are:
-clear-cache=false Clear the cache and re-extract the variant properties such as the application ID and the main activity name. Only takes effect when no arguments are provided. -module= Specify which application module to use, when the current directory is the top level Gradle project containing multiple sub-modules. When not specified, the first available application module is used. Only takes effect when no arguments are provided. -variant= Specify which build variant to use. When not specified, the first available build variant is used. Only takes effect when no arguments are provided. -d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb uninstall - Uninstall your app from all devices ¶
Uninstall your app from all devices.
To uninstall your app for a specific user on a particular device, use 'madb user set' command to set the default user ID for that device. (See 'madb help user' for more details.)
Usage:
madb uninstall [flags] [<application_id>]
<application_id> is usually the package name where the activities are defined. (See: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename)
If the application_id is not specified, madb automatically determines which app to uninstall, based on the build scripts found in the current working directory.
If the working directory contains a Gradle Android project (i.e., has "build.gradle"), run a small Gradle script to extract the application ID. In this case, the extracted ID is cached, so that "madb uninstall" can be repeated without even running the Gradle script again. The ID can be re-extracted by clearing the cache by providing "-clear-cache" flag.
The madb uninstall flags are:
-clear-cache=false Clear the cache and re-extract the variant properties such as the application ID and the main activity name. Only takes effect when no arguments are provided. -keep-data=false Keep the application data and cache directories. Equivalent to '-k' flag in 'adb uninstall' command. -module= Specify which application module to use, when the current directory is the top level Gradle project containing multiple sub-modules. When not specified, the first available application module is used. Only takes effect when no arguments are provided. -variant= Specify which build variant to use. When not specified, the first available build variant is used. Only takes effect when no arguments are provided. -d=false Restrict the command to only run on real devices. -e=false Restrict the command to only run on emulators. -n= Comma-separated device serials, qualifiers, device indices (e.g., '@1', '@2'), nicknames (set by 'madb name'), or group names (set by 'madb group'). A device index is specified by an '@' sign followed by the index of the device in the output of 'adb devices' command, starting from 1. Command will be run only on specified devices. -prefix=name Specify which output prefix to use. You can choose from the following options: name - Display the nickname of the device. The serial number is used instead if the nickname is not set for the given device. serial - Display the serial number of the device. none - Do not display the output prefix. -seq=false Run the command sequentially, instead of running it in parallel.
Madb user - Manage default user settings for each device ¶
Manages default user settings for each device.
An Android device can have multiple user accounts, and each user account has a numeric ID associated with it. Certain adb commands accept '--user <user_id>' as a parameter to allow specifying which of the Android user account should be used when running the command. The default behavior when the user ID is not provided varies by the adb command being run.
Some madb commands internally run these adb commands which accept the '--user' flag. You can let madb use different user IDs for different devices by storing the default user ID for each device using 'madb user set' command. If the default user ID is not set for a particular device, madb will not provide the '--user' flag to the underlying adb command, and the current user will be used for that device as a result.
Below is the list of madb commands which are affected by the default user ID settings:
madb clear-data madb install madb start madb stop madb uninstall
For more details on how to obtain the user ID from an Android device, see 'madb user help set'.
Usage:
madb user [flags] <command>
The madb user commands are:
set Set a default user ID to be used for the given device. unset Unset the default user ID set by the 'madb user set' command. list List all the existing default user IDs. clear-all Clear all the existing default user settings.
Madb user set ¶
Sets a default user ID to be used for the specified device, when there are multiple user accounts on a single device.
The user IDs can be obtained using the 'adb [<device_serial>] shell pm list users' command. Alternatively, you can use 'madb exec' if you want to specify the device with a nickname. For example, running the following command:
madb -n=MyPhone exec shell pm list users
will list the available users and their IDs on the MyPhone device. Consider the following example output:
[MyPhone] Users: [MyPhone] UserInfo{0:John Doe:13} running [MyPhone] UserInfo{10:Work profile:30} running
There are two available users, "John Doe" and "Work profile". Each user is assigned a "user ID", which appears on the left of the user name. In this case, the user ID of "John Doe" is "0", and the user ID of the "Work profile" is "10".
To use the "Work profile" as the default user when running madb commands on this device, run the following command:
madb user set MyPhone 10
and then madb will use "Work profile" as the default user for device "MyPhone" in any of the subsequence madb commands.
Usage:
madb user set [flags] <device_serial> <user_id>
<device_serial> is the unique serial number for the device, which can be obtained from 'adb devices'. <user_id> is one of the user IDs obtained from 'adb shell pm list users' command.
Madb user unset ¶
Unsets the default user ID assigned by the 'madb user set' command for the specified device.
Running this command without any device specifiers will unset the default users only for the currently available devices and emulators, while keeping the default user IDs for the other devices.
Usage:
madb user unset [flags] <device_serial>
<device_serial> is the unique serial number for the device, which can be obtained from 'adb devices'.
Madb user list ¶
Lists all the currently stored default user IDs for devices.
Usage:
madb user list [flags]
Madb user clear-all ¶
Clears all the currently stored default user IDs for devices.
This command clears the default user IDs regardless of whether the device is currently connected or not.
Usage:
madb user clear-all [flags]
Madb version - Print the madb version number ¶
Prints the madb version number to the console.
If this version of madb binary is an official release, this command will show the version number. Otherwise, the version will be in the form of "<version>-develop", where the version indicates the most recent stable release version prior to this version of madb binary.
Usage:
madb version [flags]
Madb help - Display help for commands or topics ¶
Help with no args displays the usage of the parent command.
Help with args displays the usage of the specified sub-command or help topic.
"help ..." recursively displays help for all commands and topics.
Usage:
madb help [flags] [command/topic ...]
[command/topic ...] optionally identifies a specific sub-command or help topic.
The madb help flags are:
-style=compact The formatting style for help output: compact - Good for compact cmdline output. full - Good for cmdline output, shows all global flags. godoc - Good for godoc processing. shortonly - Only output short description. Override the default by setting the CMDLINE_STYLE environment variable. -width=<terminal width> Format output to this target width in runes, or unlimited if width < 0. Defaults to the terminal width if available. Override the default by setting the CMDLINE_WIDTH environment variable.