Kadb is a Kotlin Multiplatform ADB client library for talking directly to adbd.
It is intended for apps and tools that need shell, sync, install, pairing, or port forwarding without embedding the full adb CLI or server stack.
Platform Notes · Host Identity · Docs Index
- Direct Kotlin API for
adbd - Android and JVM targets
- Wireless pairing, shell, file transfer, install, and TCP forwarding
- AOSP-aligned host behavior where practical
Kadb is not a full adb server replacement. USB discovery, transport brokering, and server-style device tracking are out of scope.
dependencies {
implementation("com.flyfishxu:kadb:2.1.1")
}Connect to an existing device transport:
Kadb.create("127.0.0.1", 5555).use { kadb ->
val response = kadb.shell("echo hello")
check(response.exitCode == 0)
check(response.output == "hello\n")
}Pair with a new Android 11+ device:
Kadb.pair("10.0.0.175", 37755, "643102")| Capability | API |
|---|---|
Connect to adbd |
Kadb.create(...) |
| Wireless pairing | Kadb.pair(...) |
| Shell | shell(...), openShell(), openPtyShellSession() |
| File transfer | push(...), pull(...), openSync() |
| APK install | install(...), installMultiple(...), uninstall(...) |
| Port forwarding | tcpForward(...) |
| Transport reuse | resetConnection() |
Install an APK:
Kadb.create("127.0.0.1", 5555).use { kadb ->
kadb.install(apkFile)
}Push a file:
Kadb.create("127.0.0.1", 5555).use { kadb ->
kadb.push(localFile, "/data/local/tmp/remote.txt")
}Forward a TCP port:
Kadb.create("127.0.0.1", 5555).tcpForward(
hostPort = 7001,
targetPort = 7001
).use {
// localhost:7001 now forwards to the device's port 7001
}- Android target support starts at
minSdk 23 - Basic connect / shell / sync / install flows do not require the full
adbbinary - Pairing has stricter requirements than ordinary client operations
- JVM pairing requires
conscrypt-openjdk-uber - Android 6 to 8 usually need a custom Conscrypt dependency for pairing
Example JVM pairing dependency:
dependencies {
implementation("com.flyfishxu:kadb:2.1.1")
implementation("org.conscrypt:conscrypt-openjdk-uber:2.5.2")
}More detail: docs/platform.md
- Kadb is a direct client library, not a full adb server
- USB transport discovery still requires external tooling