https://github.com/patagonaa/adbclient.net
A .NET Client for the Android Debug Bridge (ADB)
https://github.com/patagonaa/adbclient.net
adb android-debug-bridge csharp dotnet hacktoberfest
Last synced: 9 months ago
JSON representation
A .NET Client for the Android Debug Bridge (ADB)
- Host: GitHub
- URL: https://github.com/patagonaa/adbclient.net
- Owner: patagonaa
- License: mit
- Created: 2022-11-17T15:09:22.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-04-21T01:17:12.000Z (12 months ago)
- Last Synced: 2025-06-08T22:07:56.038Z (10 months ago)
- Topics: adb, android-debug-bridge, csharp, dotnet, hacktoberfest
- Language: C#
- Homepage:
- Size: 78.1 KB
- Stars: 9
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# AdbClient.NET
A .NET Client for the Android Debug Bridge (ADB)
[](https://www.nuget.org/packages/patagona.AdbClient/)
## Features
- 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`)
- Execute (`shell,v2:`)
- ScreenCapture (`framebuffer:`)
## Compared to madb / SharpAdbClient
- Pros:
- Simple
- Thread-Safe
- Async
- CancellationToken support
- Cons:
- Some services not (yet) implemented (pull requests are welcome)
## Examples
### Get ADB host version
```csharp
var adbClient = new AdbServicesClient();
int hostVersion = await adbClient.GetHostVersion();
```
### Get Devices
```csharp
var adbClient = new AdbServicesClient();
IList<(string Serial, AdbConnectionState State)> devices = await adbClient.GetDevices();
```
### Track Devices
This tracks all device changes (connect, disconnect, etc.) until the CancellationToken is cancelled (in this case, for 60 seconds)
```csharp
var adbClient = new AdbServicesClient();
var cts = new CancellationTokenSource(60000);
await foreach ((string Serial, AdbConnectionState State) deviceStateChange in adbClient.TrackDevices(cts.Token))
{
[...]
}
```
### List root directory
```csharp
var adbClient = new AdbServicesClient();
using (var syncClient = await adbClient.GetSyncClient("abcdefghijklmnop"))
{
IList entries = syncClient.ListV2("/");
}
```
### Upload file to device
```csharp
using (var fs = File.OpenRead("test.mp3"))
using (var syncClient = await client.GetSyncClient("abcdefghijklmnop"))
{
await syncClient.Push("/storage/emulated/0/Music/test.mp3", fs);
}
```
### Download file from device
```csharp
using (var fs = File.OpenWrite("test.mp3"))
using (var syncClient = await client.GetSyncClient("abcdefghijklmnop"))
{
await syncClient.Pull("/storage/emulated/0/Music/test.mp3", fs);
}
```
### Execute command
#### Simple
```csharp
var adbClient = new AdbServicesClient();
int exitCode = await adbClient.Execute("abcdefghijklmnop", "touch", new string[] { "/storage/emulated/0/test.txt" }, null, null, null);
```
#### With stdout/stderr redirection
```csharp
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
```
#### With everything redirected
```csharp
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"
```
### Capture screen
#### Capture and save as png
```csharp
var adbClient = new AdbServicesClient();
using Image img = await adbClient.ScreenCapture("abcdefghijklmnop");
img.SaveAsPng("image.png");
```