A .NET Client for the Android Debug Bridge (ADB)
- Simple
- Thread-Safe
- Implemented Services:
- GetHostVersion (
host:version) - GetDevices (
host:devices) - TrackDevices (
host:track-devices) - Sync (
sync:)- Push (
SEND) - Pull (
RECV) - List (
LIST) - ListV2 (
LIS2) - Stat (
STAT) - StatV2 (
LST2/STA2)
- Push (
- Execute (
shell,v2:) - ScreenCapture (
framebuffer:)
- GetHostVersion (
- Pros:
- Simple
- Thread-Safe
- Async
- CancellationToken support
- Cons:
- Some services not (yet) implemented (pull requests are welcome)
var adbClient = new AdbServicesClient(); int hostVersion = await adbClient.GetHostVersion();
var adbClient = new AdbServicesClient(); IList<(string Serial, AdbConnectionState State)> devices = await adbClient.GetDevices();
This tracks all device changes (connect, disconnect, etc.) until the CancellationToken is cancelled (in this case, for 60 seconds)
var adbClient = new AdbServicesClient(); var cts = new CancellationTokenSource(60000); await foreach ((string Serial, AdbConnectionState State) deviceStateChange in adbClient.TrackDevices(cts.Token)) { [...] }
var adbClient = new AdbServicesClient(); using (var syncClient = await adbClient.GetSyncClient("abcdefghijklmnop")) { IList<StatV2Entry> entries = syncClient.ListV2("/"); }
using (var fs = File.OpenRead("test.mp3")) using (var syncClient = await client.GetSyncClient("abcdefghijklmnop")) { await syncClient.Push("/storage/emulated/0/Music/test.mp3", fs); }
using (var fs = File.OpenWrite("test.mp3")) using (var syncClient = await client.GetSyncClient("abcdefghijklmnop")) { await syncClient.Pull("/storage/emulated/0/Music/test.mp3", fs); }
var adbClient = new AdbServicesClient(); int exitCode = await adbClient.Execute("abcdefghijklmnop", "touch", new string[] { "/storage/emulated/0/test.txt" }, null, null, null);
var adbClient = new AdbServicesClient(); using var stdout = new MemoryStream(); using var stderr = new MemoryStream(); int exitCode = await adbClient.Execute("abcdefghijklmnop", "ls", new string[] { "-la", "/storage/emulated/0/test.txt" }, null, stdout, stderr); if (exitCode != 0) throw new Exception(Encoding.UTF8.GetString(stderr.ToArray())); Console.WriteLine(Encoding.UTF8.GetString(stdout.ToArray())); // prints directory listing
var adbClient = new AdbServicesClient(); using var stdin = new MemoryStream(Encoding.UTF8.GetBytes("Hello World")); using var stdout = new MemoryStream(); using var stderr = new MemoryStream(); int exitCode = await adbClient.Execute("abcdefghijklmnop", "cat", new string[] {}, stdin, stdout, stderr); if (exitCode != 0) throw new Exception(Encoding.UTF8.GetString(stderr.ToArray())); Console.WriteLine(Encoding.UTF8.GetString(stdout.ToArray())); // prints "Hello World"
var adbClient = new AdbServicesClient(); using Image img = await adbClient.ScreenCapture("abcdefghijklmnop"); img.SaveAsPng("image.png");