adb (Android Debug Bridge)
adb is a versatile command-line tool that lets you communicate with a device. The adb command facilitates a variety of device actions, such as installing and debugging apps, and it provides access to a Unix shell that you can use to run a variety of commands on a device.
It is a client-server program that includes 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.
adb is included in the Android SDK Platform-Tools package.
Basic commands
$ adb devices
List of devices attached
192.168.56.103:5555 device
$ adb devices -l
List of devices attached
192.168.56.103:5555 device product:vbox86p model:Google_Pixel_3 device:vbox86p transport_id:3
$ adb -s 192.168.56.103:5555 shell
$ adb –d shell # only attached USB device
$ adb –e shell # only attached emulator
Install / Run an application
$ adb install sieve.apk
Performing Push Install
sieve.apk: 1 file pushed, 0 skipped. 179.8 MB/s (367886 bytes in 0.002s)
pkg: /data/local/tmp/sieve.apk
Success
$ adb shell am start -n com.mwr.example.sieve/com.mwr.example.sieve.MainLoginActivity
Starting: Intent { cmp=com.mwr.example.sieve/.MainLoginActivity }
$ adb shell am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName
Logs (logcat)
adb logcat
adb logcat -c # clear current logs
adb logcat -d > output # Save the logcat output to a file on the local system.
adb bugreport > output # Dump the whole device information like dumpstate, dumpsys and logcat output.
Display all log messages on a specific pid (process id) :
$ adb shell ps | grep gallery
u0_a100 3319 287 1385884 115136 ep_poll f277dbb9 S com.android.gallery3d
$ adb logcat --pid 3319
--------- beginning of main
05-17 05:26:06.685 3319 3319 I Zygote : seccomp disabled by setenforce 0
05-17 05:26:06.689 3319 3319 W droid.gallery3: Unexpected CPU variant for X86 using defaults: x86
05-17 05:26:06.854 3319 3319 D ApplicationLoaders: Returning zygote-cached class loader: /system/framework/android.hidl.base-V1.0-java.jar
05-17 05:26:06.854 3319 3319 D ApplicationLoaders: Returning zygote-cached class loader: /system/framework/android.hidl.manager-V1.0-java.jar
05-17 05:26:06.854 3319 3319 D ApplicationLoaders: Returning zygote-cached class loader: /system/framework/android.hidl.base-V1.0-java.jar
05-17 05:26:06.859 3319 3319 I droid.gallery3: The ClassLoaderContext is a special shared library.
Display all log messages with priority level warning and higher, on all tags :
$ adb logcat "*:W"
Android version
$ adb shell getprop ro.build.version.release
11
Files Push / Pull
adb push <computer_src> <device_dst>
adb pull <device_src> <computer_dst>
List packages
$ adb shell pm list packages
...
$ adb -s emulator-5554 shell pm list packages | grep "chrome"
package:com.android.chrome
Disable APK verification
- Set verifier_verify_adb_installs to 0.
$ adb install de.lotum.whatsinthefoto.fr.apk
Performing Streamed Install
adb: failed to install de.lotum.whatsinthefoto.fr.apk: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]
$ adb shell settings put global verifier_verify_adb_installs 0
$ adb install de.lotum.whatsinthefoto.fr.apk
Performing Streamed Install
Success
References
- https://developer.android.com/studio/command-line/adb
- https://www.automatetheplanet.com/adb-cheat-sheet/
- https://gist.github.com/Pulimet/5013acf2cd5b28e55036c82c91bd56d8