Skip to content

flyfishxu/Kadb

Repository files navigation

Kadb

Maven Central

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

Overview

  • 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.

Installation

dependencies {
    implementation("com.flyfishxu:kadb:2.1.1")
}

Quick Start

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")

API Overview

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()

Examples

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
}

Platform and Pairing Notes

  • Android target support starts at minSdk 23
  • Basic connect / shell / sync / install flows do not require the full adb binary
  • 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

Scope and Limitations

  • Kadb is a direct client library, not a full adb server
  • USB transport discovery still requires external tooling

Documentation

Acknowledgements

About

A Kotlin Multiplatform library to connect Android devices directly without ADB binary file.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages