Giter Site home page Giter Site logo

fengweijp / madb Goto Github PK

View Code? Open in Web Editor NEW

This project forked from quamotion/madb

0.0 1.0 0.0 4.39 MB

SharpAdbClient is a .NET library that allows .NET applications to communicate with Android devices. It provides a .NET implementation of the adb protocol, giving more flexibility to the developer than launching an adb.exe process and parsing the console output.

License: Apache License 2.0

C# 99.96% PowerShell 0.04%

madb's Introduction

build coverage NuGet
Build Status codecov.io NuGet Status

A .NET client for adb, the Android Debug Bridge (SharpAdbClient)

SharpAdbClient is a .NET library that allows .NET applications to communicate with Android devices. It provides a .NET implementation of the adb protocol, giving more flexibility to the developer than launching an adb.exe process and parsing the console output.

Installation

To install SharpAdbClient install the SharpAdbClient NuGetPackage. If you're using Visual Studio, you can run the following command in the Package Manager Console:

PM> Install-Package SharpAdbClient

Getting Started

All of the adb functionality is exposed through the SharpAdbClient.AdbClient class. You can create your own instance of that class, or just use the instance we provide for you at SharpAdbClient.AdbClient.Instance.

This class provides various methods that allow you to interact with Android devices.

Starting the adb server

SharpAdbClient does not communicate directly with your Android devices, but uses the adb.exe server process as an intermediate. Before you can connect to your Android device, you must first start the adb.exe server.

You can do so by either running adb.exe yourself (it comes as a part of the ADK, the Android Development Kit), or you can use the AdbServer.StartServer method like this:

AdbServer server = new AdbServer();
var result = server.StartServer(@"C:\Program Files (x86)\android-sdk\platform-tools\adb.exe", restartServerIfNewer: false);

List all Android devices currently connected

To list all Android devices that are connected to your PC, you can use the following code:

var devices = AdbClient.Instance.GetDevices();

foreach(var device in devices)
{
    Console.WriteLine(device.Name);
}

Subscribe for events when devices connect/disconnect

To receive notifications when devices connect to or disconnect from your PC, you can use the DeviceMonitor class:

void Test()
{
    var monitor new DeviceMonitor(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)));
    monitor.DeviceConnected += this.OnDeviceConnected;
    monitor.Start();
}

void OnDeviceConnected(object sender, DeviceDataEventArgs e)
{
    Console.WriteLine($"The device {e.Device.Name} has connected to this PC");
}

Manage applications

To install or uninstall applications, you can use the ApplicationManager class:

void InstallApplication()
{
    var device = AdbClient.Instance.GetDevices().First();
    PackageManager manager = new PackageManager(device);
    manager.InstallPackage(@"C:\Users\me\Documents\mypackage.apk", reinstall: false);
}

Send or receive files

To send files to or receive files from your Android device, you can use the SyncService class. When uploading a file, you need to specify the permissions of the file. These are standard Unix file permissions. For example, 444 will give everyone read permissions and 666 will give everyone write permissions. You also need to specify the date at which the file was last modified. A good default there is DateTime.Now.

void DownloadFile()
{
    var device = AdbClient.Instance.GetDevices().First();
    
    using (SyncService service = new SyncService(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)), device))
    using (Stream stream = File.OpenWrite(@"C:\MyFile.txt"))
    {
        service.Pull("/data/local/tmp/MyFile.txt", stream, null, CancellationToken.None);
    }
}

void UploadFile()
{
    var device = AdbClient.Instance.GetDevices().First();
    
    using (SyncService service = new SyncService(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)), device))
    using (Stream stream = File.OpenRead(@"C:\MyFile.txt"))
    {
        service.Push(stream, "/data/local/tmp/MyFile.txt", 444, DateTime.Now, null, CancellationToken.None);
    }
}

Run shell commands

To run shell commands on an Android device, you can use the AdbClient.Instance.ExecuteRemoteCommand method.

You need to pass a DeviceData object which specifies the device on which you want to run your command. You can get a DeviceData object by calling AdbClient.Instance.GetDevices(), which will run one DeviceData object for each device Android connected to your PC.

You'll also need to pass an IOutputReceiver object. Output receivers are classes that receive and parse the data the device sends back. In this example, we'll use the standard ConsoleOutputReceiver, which reads all console output and allows you to retrieve it as a single string. You can also use other output receivers or create your own.

void EchoTest()
{
    var device = AdbClient.Instance.GetDevices().First();
    var receiver = new ConsoleOutputReceiver();

    AdbClient.Instance.ExecuteRemoteCommand("echo Hello, World", device, receiver);

    Console.WriteLine("The device responded:");
    Console.WriteLine(receiver.ToString());
}

Consulting, Training and Support

This repository is maintained by Quamotion. Quamotion develops test software for iOS and Android applications, based on the WebDriver protocol.

In certain cases, Quamotion also offers professional services - such as consulting, training and support - related to SharpAdbClient. Contact us at [email protected] for more information.

History

SharpAdbClient is a fork of madb; which in itself is a .NET port of the ddmlib Java Library. Credits for porting this library go to Ryan Conrad.

madb's People

Contributors

qmfrederik avatar camalot avatar bartsaintgermain avatar dgadelha avatar magic73 avatar pbielinski avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.