Skip to main content

A drop-in replacement for sdkmanager from the Android SDK that gets package metadata from a signed index generated from an append-only transparency log. Additionally, it uses SHA-256 checksums to verify packages before installing (Google's sdkmanager uses unsigned index and SHA1 checksums).

It is written in Python with minimal dependencies to make it easy to deploy anywhere and cover many use cases that Google's does not. This makes it really easy to package for distros like Debian or Homebrew, so users can just apt-get install sdkmanager and get verified Android SDK package installs based on the root that is already trusted in their system. Also, it is trivial to install a single arbitrary package without having to install the full requirements of Google's sdkmanager (e.g. Java 17, etc). A security researcher can install just build-tools;36.0.0. Or a translator can just install emulator and system-images;android-36;default;x86_64.

It implements the exact API of the sdkmanager command line. It only deviates from that API if it can be done while being 100% compatible. The project also attempts to maintain the same terminal output so it can be compatible with things that scrape sdkmanager output.

Architecture

This was designed around the idea that each SDK package contains all the relevant metadata in it, e.g. source.properties. So the checksums.json index file was designed just to be the index of those package files. This is how F-Droid and Debian indexes work. It looks like Google's sdkmanager was designed with that idea, but sadly, the maintainers of Google's sdkmanager have not been faithful to it. Some values like "display-name" are only available in the index files, e.g. repository2-3.xml. Even worse, the SDK packages contain something similar, Pkg.Desc, but it has strange conflicting values.

Also, since XML is a nightmare and this sdkmanager is written in Python, this sdkmanager was designed to use JSON as much as possible.

Key sources

The AOSP source code is hard to navigate for many reasons. Here are a couple of entry points for info relevant to this project:

Code Format

This project uses Black to automatically format all the Python code. It uses the version of Black that is in Debian/stable. To format the code, run:

black --skip-string-normalization *.py

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdkmanager-0.7.1.tar.gz (274.5 kB view details)

Uploaded Source

File details

Details for the file sdkmanager-0.7.1.tar.gz.

File metadata

  • Download URL: sdkmanager-0.7.1.tar.gz
  • Upload date:
  • Size: 274.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for sdkmanager-0.7.1.tar.gz
Algorithm Hash digest
SHA256 49063acd70f37826ae2e88a78fe774d394b0a56cbc538649f40369834e356c67
MD5 0d9d668c5e3f257f919feb66e251268b
BLAKE2b-256 7a44094af0982afc46ae2dd5e749c10ca7eea7ed6c439e2a80bd2b8c63158047

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page