{
  description = "An example project using flutter";

  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";
  inputs.android-nixpkgs.url = "github:tadfisher/android-nixpkgs";

  outputs = {
    self,
    flake-utils,
    nixpkgs,
    ...
  } @ inputs:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = import nixpkgs {
        inherit system;
      };
    in {
      devShell = let
        android-nixpkgs = pkgs.callPackage inputs.android-nixpkgs {};
        android-sdk = android-nixpkgs.sdk (sdkPkgs:
          with sdkPkgs; [
            cmdline-tools-latest
            build-tools-30-0-3
            # This version needs to match the GRADLE_OPTS env var down below, vice versa
            build-tools-34-0-0
            platform-tools
            platforms-android-28
            platforms-android-29
            platforms-android-31
            platforms-android-33
            platforms-android-34
            emulator
          ]);
      in 
        pkgs.mkShell {
          # Fix an issue with Flutter using an older version of aapt2, which does not know
          # an used parameter.
          GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${android-sdk}/share/android-sdk/build-tools/34.0.0/aapt2";
          FLUTTER_ROOT = "${pkgs.flutter}";
          # nativeBuildInputs = with pkgs; [
          # ];
          buildInputs = with pkgs; [
            flutter
            # pkg-config
            jdk17
            android-sdk
          ];
          shellHook = ''
            export PATH="$PATH":"$HOME/.pub-cache/bin" 
          '';
        };
    });
}