Skip to main content

Android SDK Manager

Project description

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

Project details


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.0.tar.gz (273.5 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: sdkmanager-0.7.0.tar.gz
  • Upload date:
  • Size: 273.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.0.tar.gz
Algorithm Hash digest
SHA256 5b096e0ec3946171b235b1ad778641b925ebe6f977b61f343485aac43b5f3cbc
MD5 be44c1bb7d70bd74ffb2666942adfa56
BLAKE2b-256 6c76d1047abe4e02f916323e154f522b1a7e9c6bfb7c2d8c4bcdd8764c36717c

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 Pingdom Monitoring Sentry Error logging StatusPage Status page