MCPcopy Index your code
hub / github.com/cosysoft/device

github.com/cosysoft/device @v0.9.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.9.1 ↗ · + Follow
365 symbols 823 edges 57 files 51 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Android Device API Based on ddmlib

A lot of code quote from selendroid,but we will foucs on simplify ddmlib's usage

device-keeper

A distributed android device monitor system based on device-api

Quick Start

Plug a android device via usb or boot an emulator

git clone https://github.com/cosysoft/device.git
cd device/device-keeper
bower install

cd ..
gradle bootRun

Open http://localhost:8080/keeper in your browser

device-api

Focus on stabilized android device operation via Android Debug Bridge

Quick Start

Download

Maven

<dependency>
        <groupId>com.github.cosysoft</groupId>
        <artifactId>device-api</artifactId>
        <version>0.9.0</version>
</dependency>

Gradle

dependencies {
        compile 'com.github.cosysoft:device-api:0.9.0'
}

Take Devices

TreeSet<AndroidDevice> devices = AndroidDeviceStore.getInstance()
        .getDevices();
AndroidDevice device = devices.pollFirst();
System.out.println(device.getName());

Screenshot

BufferedImage image = device.takeScreenshot();
String imagePath = new File(System.getProperty("java.io.tmpdir"),
        "screenshot.png").getAbsolutePath();
ImageUtils.writeToFile(image, imagePath);

Install/Uninstall App

AndroidApp app = new DefaultAndroidApp(new File(
        "d:\\uat\\com.android.chrome.apk"));
device.install(app);
if (device.isInstalled(app)) {
    device.uninstall(app);
}

LogCat with custom filter

final LogCatFilter filter = new LogCatFilter("", "", "com.android", "",
        "", LogLevel.WARN);
final LogCatListener lcl = new LogCatListener() {
    @Override
    public void log(List<LogCatMessage> msgList) {
        for (LogCatMessage msg : msgList) {
            if (filter.matches(msg)) {
                System.out.println(msg);
            }
        }
    }
};

device.addLogCatListener(lcl);
Thread.sleep(60000);

Monitor

Ddmlib can monitor one app's cpu/heap/threads and much more,but we need list running client first.

List running client for app

List<ClientDataInfo> clientDataInfos = device.getClientDatasInfo();
for (ClientDataInfo client : clientDataInfos) {
    System.out.println(client.getName());
    System.out.println(client.getPid());
}

License

The Apache Software License, Version 2.0

Extension points exported contracts — how you extend this code

DeviceStore (Interface)
main class for phone resouces take and release @author ltyao [2 implementers]
device-api/src/main/java/com/github/cosysoft/device/DeviceStore.java
AndroidApp (Interface)
(no doc) [4 implementers]
device-api/src/main/java/com/github/cosysoft/device/android/AndroidApp.java
AndroidDevice (Interface)
@author ltyao [1 implementers]
device-api/src/main/java/com/github/cosysoft/device/android/AndroidDevice.java
KeyEvent (Interface)
Copy of the public static Key Codes from: http://developer.android.com/reference/android/view/KeyEvent.html
device-api/src/main/java/com/github/cosysoft/device/android/KeyEvent.java

Core symbols most depended-on inside this repo

adbCommand
called by 24
device-api/src/main/java/com/github/cosysoft/device/android/impl/AbstractDevice.java
getDevices
called by 20
device-api/src/main/java/com/github/cosysoft/device/DeviceStore.java
executeCommandQuietly
called by 18
device-api/src/main/java/com/github/cosysoft/device/android/impl/AbstractDevice.java
equals
called by 15
device-api/src/main/java/com/github/cosysoft/device/android/impl/AbstractDevice.java
getName
called by 12
device-api/src/main/java/com/github/cosysoft/device/android/AndroidDevice.java
exec
called by 9
device-api/src/main/java/com/github/cosysoft/device/shell/ShellCommand.java
getAbsolutePath
called by 9
device-api/src/main/java/com/github/cosysoft/device/android/AndroidApp.java
contains
called by 8
device-api/src/main/java/com/github/cosysoft/device/exception/NestedException.java

Shape

Method 306
Class 53
Interface 4
Enum 1
Function 1

Languages

Java100%
TypeScript1%

Modules by API surface

device-api/src/main/java/com/github/cosysoft/device/android/impl/AbstractDevice.java40 symbols
device-api/src/main/java/com/github/cosysoft/device/android/AndroidDevice.java35 symbols
device-api/src/main/java/com/github/cosysoft/device/model/DeviceInfo.java21 symbols
device-api/src/main/java/com/github/cosysoft/device/android/xiaomi/MIDeviceUtility.java15 symbols
device-api/src/main/java/com/github/cosysoft/device/shell/AndroidSdk.java13 symbols
device-api/src/main/java/com/github/cosysoft/device/android/impl/DefaultHardwareDevice.java12 symbols
device-api/src/main/java/com/github/cosysoft/device/android/impl/DefaultAndroidApp.java11 symbols
device-node/src/main/java/com/github/cosysoft/device/node/domain/Device.java10 symbols
device-api/src/main/java/com/github/cosysoft/device/android/impl/AndroidDeviceStore.java10 symbols
device-api/src/main/java/com/github/cosysoft/device/android/AndroidDeviceBrand.java10 symbols
device-api/src/main/java/com/github/cosysoft/device/model/AppInfo.java9 symbols
device-api/src/main/java/com/github/cosysoft/device/android/impl/InstalledAndroidApp.java9 symbols

For agents

$ claude mcp add device \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact