{
  description = "Android dev environment.";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  };

  outputs =
    { self, nixpkgs }@inputs:
    let
      buildTools = "31.0.0";
      jdk = pkgs.jdk11;
      lib = nixpkgs.lib;
      system = "x86_64-linux";
      androidSdk = androidComposition.androidsdk;
      pkgs = import nixpkgs {
        system = system;
        config = {
          allowUnfree = true;
          android_sdk.accept_license = true;
        };
      };
      androidComposition = pkgs.androidenv.composeAndroidPackages {
        cmdLineToolsVersion = "8.0";
        includeEmulator = false;
        includeNDK = false;
        includeSources = false;
        includeSystemImages = false;
        platformToolsVersion = "34.0.5";
        toolsVersion = "26.1.1";
        useGoogleAPIs = false;
        useGoogleTVAddOns = false;
        abiVersions = [
          "arm64-v8a"
          "armeabi-v7a"
        ];
        buildToolsVersions = [ buildTools ];
        platformVersions = [ "31" ];
        # cmakeVersions    = [ "3.10.2" ];
        # emulatorVersion  = "30.3.4";
        # includeExtras    = [ "extras;google;gcm" ];
        # ndkVersions      = ["22.0.7026061"];
        # systemImageTypes = [ "google_apis_playstore" ];
      };
    in
    {
      devShells.${system} = {
        default = pkgs.mkShell rec {
          nativeBuildInputs = with pkgs; [
            android-tools
            androidSdk
            glibc
            gnumake
            jdk
          ];
          buildInputs = with pkgs; [ ];

          ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk/";
          GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/${buildTools}/aapt2";
          JAVA_HOME = "${jdk}";
          LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}";
          SOURCE_DATE_EPOCH = "${toString self.lastModified}";
        };
      };
    };
}