Skip to content

Repository files navigation

Android Device Manager

Description

Android Device Manager is a desktop app which can manage one or more Android devices

Features

  • View all connected (and wireless) devices
  • View devices connected to another computer (see SERVER.md)
  • Populates device phone number, free space, IMEI, carrier (if available)
  • Remote control selected devices (requires scrcpy)
  • Capture screenshots of selected devices
  • Drag and drop an apk to install on selected devices
  • Drag and drop a file to copy to selected devices
  • File Explorer / Browse filesystem of device
    • download and view folders/files
    • delete folders/files
    • root mode supported
  • View Device Logs
    • filter by log level/tag
    • add and combine filters to make searching logs easier
  • Restart selected devices
  • Run user-defined adb commands
  • Run user-defined scripts
  • Set and display custom properties on each device
  • Start an adb shell session with selected devices
  • View version of user-defined list of apps
  • Connect to devices wirelessly via QR code

Manage devices connected to other computers

see SERVER.md

Screenshots

devices

More Screenshots devices
file explorer
logs
logs

Prerequisites

  • adb - android debugging tools
  • scrcpy - used to mirror a device (link)
Mac Setup

Install Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install adb

brew install --cask android-platform-tools
  • add adb to PATH
echo 'export ANDROID_HOME=$HOME/Library/Android/sdk' >> ~/.profile
echo 'export PATH="/opt/homebrew/bin:$ANDROID_HOME/platform-tools:$PATH"' >> ~/.profile

Install scrcpy

brew install scrcpy
Windows Setup

Install adb

download from here and extract archive

  • move extracted platform-tools/ folder to your /Program Files/Android/
  • add the location to your PATH
  • test this by running “adb” in a command window

Install scrcpy

download and install from here

  • make sure “scrcpy” in in PATH
Linux Setup

Install curl, git, adb

sudo apt-get install curl git adb

Install Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Add homebrew to PATH

echo >> ~/.bashrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Install scrcpy

brew install scrcpy

Install Android Device Manager

I'm using jdeploy to package this as a native app for Mac/Windows/Linux. This also allows for automatic updates

To install open a terminal and run this command:

/bin/bash -c "$(curl -fsSL https://www.jdeploy.com/gh/jpage4500/AndroidDeviceManager/install.sh)"

See this page to download the installer directly, or grab it from Releases

Build

Build Android Device Manager

Prerequisites

  • Java SDK
    • min version 17; I'm using openjdk 22.0.1 2024-04-16
    • MacOSX -> Homebrew -> brew install openjdk
    • Linux - link
  • Maven
    • MacOSX -> Homebrew -> brew install maven
    • Linux - link

Build

  • sync this repo
    • git clone https://github.com/jpage4500/AndroidDeviceManager.git
  • build
    • mvn compile
  • run:
    • mvn exec:java

Releasing

How releases work (and the token they need)

Pushing to develop runs .github/workflows/jdeploy.yml, which:

  1. tags the commit 1.0.<git commit count>
  2. on that tag push, builds the jar and uses jDeploy to publish native Mac/Windows/Linux installers to Releases
  3. writes the release body: changes since the previous tag (via scripts/gen_release_notes.sh) followed by the installer download links

To preview the notes for a release locally:

./scripts/gen_release_notes.sh tag brief 1.0.511

jDeploy also keeps a package-info.json file on a prerelease tagged jdeploy — that's the manifest installed copies of the app read to auto-update, so don't delete that release.

Creating the ADM_JDEPLOY_GITHUB_TOKEN secret

Both jobs need a personal access token. The built-in GITHUB_TOKEN won't work: pushes made with it never trigger another workflow, so the tag pushed by job 1 wouldn't start job 2.

Fine-grained token (recommended) — https://github.com/settings/personal-access-tokens/new

  • Repository accessOnly select repositoriesjpage4500/AndroidDeviceManager
  • PermissionsRepository permissionsContents: Read and write (this one permission covers both pushing the tag and creating/uploading releases)
  • Expiration — note the date. Releases silently stop when the token expires.

Classic tokenhttps://github.com/settings/tokens/new

  • Scope: public_repo (or repo if the repository is ever made private)

Then add it to the repo: Settings → Secrets and variables → Actions → New repository secret, named exactly ADM_JDEPLOY_GITHUB_TOKEN.

The repository must stay public — the jDeploy installer downloads updates from the release assets anonymously.

Use Cases

We want to manage a lot of Android devices and had previously used MDM (mobile device management) software such as * AirDroid* and ScaleFusion. These tools aren't free ($$) but more importantly trying to remote control/view an Android device was often a very slow and choppy experience.

So, instead we took a different approach. Instead of running MDM software on every individual Android device, we connected all of the devices to a single macbook laptop using multiple 16-port USB hubs. The Macbook is running Splashtop remote control software. I can now remote login and using Android Device Manager control all of the devices with very little to no lag.


Tested with 45 Android devices connected to 1 Macbook laptop (using multiple 16-port USB hubs)

About

Android Device Manager is a desktop app to manage one or more connected Android devices

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages