jadb speaks the ADB protocol from pure Java, on top of a running adb server
ADB Client in pure Java.
At a glance
- What is it?
- jadb is an ADB client written in pure Java that talks to the Android Debug Bridge server, giving Java applications a way to list devices, pull files and install APKs without shelling out to the platform adb binary. It is Apache 2.0 licensed, and the dependency example in its own documentation still points at an older tag than the one it shipped most recently.
- Who is it for?
- Java teams that need device automation inside an existing JVM service, and who already run or can run the adb server, will find jadb a small, dependency-free way to drive Android devices without a native binary on the classpath. It is the wrong choice for a desktop tool that should stand alone, since the adb server is a hard prerequisite, and it is the wrong choice for a fresh project if you need current ADB protocol coverage and cannot verify it yourself.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 149 days ago.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A Java implementation of the ADB protocol itself
jadb is an ADB client implemented in pure Java, and the project states its aim directly: to provide an up to date implementation of the ADB protocol. The context it gives is the client-server architecture of the Android Debug Bridge, which is used to communicate with Android devices for tasks such as installing APKs and debugging apps. The usual way to reach that protocol is the `adb` command line tool from the Android SDK Tools, which are available for the major platforms. jadb exists so that a JVM program can use the protocol without the SDK tools present on the machine and without spawning a subprocess. Because the implementation is in Java, it also fits into applications that already run on a JVM, whether that is an Android tooling service, a CI job or a desktop utility written in the same language. The repository is a Maven project with `pom.xml`, `src/`, `test/` and a `lib/` and `build/` directory at the root, authored by Samuel Carlsson.
Connections, devices, file transfer and package operations
The API is small enough to read in a minute. You create a connection and ask it for the attached devices:
JadbConnection jadb = new JadbConnection();
List<JadbDevice> devices = jadb.getDevices();From a device you can move files in either direction, which the documentation shows with a remote path and a local `File`:
JadbDevice device = ...
device.pull(new RemoteFile("/path/to/file.txt"), new File("file.txt"));Higher level operations are available as well, and the example given installs an APK through a `PackageManager` bound to the device:
JadbDevice device = ...
new PackageManager(device).install(new File("/path/to/my.apk"));The shape is a connection object, device objects obtained from it, and per device operations either directly or through a helper such as `PackageManager`. For a test harness or a device farm controller, that is enough surface to script install, launch and file exchange without a shell.
The adb server has to be running before jadb is useful
jadb is a client, not a server, and that distinction is the most important operational fact about it. The documentation says to make sure the adb server is running and notes that you can start it by running `adb` once from the command line. The troubleshooting section repeats this in checklist form: issue `adb start-server` and then confirm the device appears with `adb devices`. If the device shows up in `adb` but not in jadb, the documentation asks you to file an issue, which tells you where the boundary of the project sits: protocol behaviour is the maintainer's problem, the server process and the USB or network transport are not. There is also a documented workaround for a Unix socket adb server, which forwards port 5037 to the domain socket with `socat`:
socat TCP-LISTEN:5037,reuseaddr,fork UNIX-CONNECT:/tmp/5037That one line is the sort of detail you only find in a project that has been used against real devices, and it is also a hint about the deployment shape: a JVM service talking to a device farm over TCP rather than a local USB session.
Maven and Gradle users pull the artifact through JitPack
Since version v1.1 the project supports Maven as a build system, and the coordinates come from JitPack, which parses public GitHub repositories and builds artifacts from them. The project is not published in the official Apache Maven repositories, so the repository has to be added to your build before the dependency resolves. The documentation is explicit that JitPack takes the groupId, artifactId and version from the repository name, the project name and the tag, ignoring the values in `pom.xml`, so the coordinates in your build file are `com.github.vidstige` for the group, `jadb` for the artifact, and a tag for the version. The example in the documentation pins the version to v1.2.1. That tag is a 2021 release, while the most recent published release is v1.3.0, so the snippet in the documentation is behind the current release and anyone copying it should check the tag they actually want.
Protocol coverage is the stated goal, so the upstream specs are the reference
Rather than document the protocol in prose, the project links to the upstream Android sources. The overview of the protocol points at the OVERVIEW.TXT document in the Android platform tree, the list of commands an ADB server may accept points at SERVICES.TXT, and the description of file transfer points at SYNC.TXT. For a reader trying to judge whether the implementation is current, those three documents are the checklist: they are the specification, and the ADB server on a given device is the implementation you are really talking to. The project also carries a first-timers-friendly badge, a coverage badge, a JitPack badge and a Maven build status badge, which together describe a small library with a conventional CI setup rather than a large framework. The README also asks contributors to write a failing test first when fixing a bug, and points at CONTRIBUTING.md for the process.
Apache 2.0 licensing and a release history with a long gap
The project is released under the Apache License Version 2.0, with the licence text in LICENSE.md, which is a permissive choice that suits a low level client library embedded in other tools. The release history is where the project needs context. There is v1.2.0 from 2020-09-24, v1.2.1 from 2021-03-05, and then v1.3.0 from 2026-05-27, with the last push to the repository on the same date. The repository is not archived, and the v1.3.0 release lands after a long quiet period, which is consistent with the stated aim of an up to date implementation of the protocol after several years of only occasional maintenance. The practical reading is that a recent release exists, but the intervening years produced no tagged updates, so the v1.3.0 release is the one to test against a current adb server rather than assuming the 2021 build is equivalent.
Editorial conclusion
Java teams that need device automation inside an existing JVM service, and who already run or can run the adb server, will find jadb a small, dependency-free way to drive Android devices without a native binary on the classpath. It is the wrong choice for a desktop tool that should stand alone, since the adb server is a hard prerequisite, and it is the wrong choice for a fresh project if you need current ADB protocol coverage and cannot verify it yourself. Before adopting it, confirm the adb server version on your target machines matches what jadb implements, and note that the Maven snippet in the project documentation pins v1.2.1 while the most recent tag is v1.3.0.
Frequently asked questions
Does jadb need the adb server to be installed and running?
Yes. jadb is a client of the Android Debug Bridge, so the adb server must be running, which the documentation says you can start by running `adb` once from the command line, or with `adb start-server`. The troubleshooting list asks you to confirm the device appears in `adb devices` before suspecting jadb.
How do I add jadb to a Maven or Gradle project?
Since v1.1 the project supports Maven, and the artifact comes from JitPack rather than the official Apache repositories. You add jitpack.io as a repository and then declare the dependency with groupId `com.github.vidstige`, artifactId `jadb` and the tag as the version.
Can jadb install APKs and transfer files?
Yes. Device objects support pulling files with `device.pull(new RemoteFile(...), new File(...))`, and high level package operations are available through `new PackageManager(device).install(new File(...))` for an APK.
What is the latest version of jadb and what licence is it under?
The most recent release is v1.3.0, published on 2026-05-27, with the last push to the repository on the same date. The project is released under the Apache License Version 2.0, with the licence text in LICENSE.md.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/vidstige-jadb)Was this useful?