Flutter doctor cannot find android sdk installed via android-studio-full package

Given the following config:

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{
  config,
  pkgs,
  inputs,
  ...
}:{
  imports = [
    # Include the results of the hardware scan.
    ./hardware-configuration.nix
    ./hyprland.nix
    #  "home-manager/nixos"
  ];

  nix.settings = {

    experimental-features = [
      "nix-command"
      "flakes"
    ];
    substituters = [ "https://hyprland.cachix.org" ];
    trusted-substituters = [ "https://hyprland.cachix.org" ];
    trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
  };
  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  # Use latest kernel.
  boot.kernelPackages = pkgs.linuxPackages_latest;
  boot.kernelParams = [ "kvm.enable_virt_at_load=0" ];
  networking.hostName = "nixos"; # Define your hostname.
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.

  # Configure network proxy if necessary
  # networking.proxy.default = "http://user:password@proxy:port/";
  # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";

  # Enable networking
  networking.networkmanager.enable = true;

  # Set your time zone.
  time.timeZone = "America/New_York";

  # Select internationalisation properties.
  i18n.defaultLocale = "en_US.UTF-8";

  i18n.extraLocaleSettings = {
    LC_ADDRESS = "en_US.UTF-8";
    LC_IDENTIFICATION = "en_US.UTF-8";
    LC_MEASUREMENT = "en_US.UTF-8";
    LC_MONETARY = "en_US.UTF-8";
    LC_NAME = "en_US.UTF-8";
    LC_NUMERIC = "en_US.UTF-8";
    LC_PAPER = "en_US.UTF-8";
    LC_TELEPHONE = "en_US.UTF-8";
    LC_TIME = "en_US.UTF-8";
  };

  # Enable the X11 windowing system.
  services.xserver.enable = true;
  # Enable virtualization
  virtualisation.virtualbox.host.enable = true;
  # Enable the GNOME Desktop Environment.
  services.xserver.displayManager.gdm.enable = true;
  services.xserver.desktopManager.gnome.enable = true;

  # Configure keymap in X11
  services.xserver.xkb = {
    layout = "us";
    variant = "";
  };
services.gvfs.enable = true;
  # Enable CUPS to print documents.
  services.printing.enable = true;

  # Enable sound with pipewire.
  services.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    #jack.enable = true;

    # use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Enable touchpad support (enabled default in most desktopManager).
  # services.xserver.libinput.enable = true;
  # enable fish shell
  programs.fish.enable = true;
  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.user1 = {
    shell = pkgs.fish;
    isNormalUser = true;
    description = "user";
    extraGroups = [
      "adbusers"
      "networkmanager"
      "wheel"
      "audio"
      "kvm"
    ];
    packages = with pkgs; [
      #  thunderbird
      rofi
      waybar
      networkmanagerapplet
      nerd-fonts.symbols-only
      pavucontrol
      wlogout
      source-code-pro
      gimp
      hypridle
      hyprlock
      vivaldi
    ];
  };

  # Install firefox.
  programs.firefox.enable = true;

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;
 # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    #  wget
    emacs
    helix
    clojure
    clojure-lsp
    dotnet-sdk_9
    git
    ghostty
    syncthing
    killall
    aspell
    aspellDicts.en
    nil
    clinfo
    vlc
    nixfmt
    jdk
    silver-searcher
    jetbrains.idea-ultimate
#androidenv.androidPkgs.androidsdk
android-studio-full
flutter
flutterPackages-source.stable
pkg-config
clang
cmake
ninja
  ];
  

# android
programs.adb.enable = true;
nixpkgs.config.android_sdk.accept_license = true;

#android_sdk.accept_license = true;
  # Some programs need SUID wrappers, can be configured further or are
  # started in user sessions.
  # programs.mtr.enable = true;
  # programs.gnupg.agent = {
  #   enable = true;
  #   enableSSHSupport = true;
  # };

  # List services that you want to enable:

  # Enable the OpenSSH daemon.
  # services.openssh.enable = true;

  # Open ports in the firewall.
  # networking.firewall.allowedTCPPorts = [ ... ];
  # networking.firewall.allowedUDPPorts = [ ... ];
  # Or disable the firewall altogether.
  # networking.firewall.enable = false;

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. It‘s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "25.05"; # Did you read the comment?
  programs.hyprland = {
    enable = true;
    # set the flake package
    package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
    # make sure to also set the portal package, so that they are in sync
    portalPackage =
      inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
  };
  hardware.opengl.enable = true;
  hardware.opengl.extraPackages = with pkgs; [
    rocmPackages.clr.icd
    # Mesa libraries for AMD
    #mesa.amdgpu
    #mesa.galliumVa
    mesa
    libGL
    libglvnd
   ];
  systemd.tmpfiles.rules = [
    "L+    /opt/rocm/hip   -    -    -     -    ${pkgs.rocmPackages.clr}"
  ];

  # ollama
  services.ollama = {
    enable = true;
    acceleration = "rocm";
    loadModels = [ "gemma3:4b" ];
  };
  #bluetooth
  hardware.bluetooth = {
  enable = true;
  powerOnBoot = true;
  settings = {
    General = {
      # Shows battery charge of connected devices on supported
      # Bluetooth adapters. Defaults to 'false'.
      Experimental = true;
      # When enabled other devices can connect faster to us, however
      # the tradeoff is increased power consumption. Defaults to
      # 'false'.
      FastConnectable = true;
    };
    Policy = {
      # Enable all controllers when they are found. This includes
      # adapters present on start as well as adapters that are plugged
      # in later on. Defaults to 'true'.
      AutoEnable = true;
    };
  };
};
services.blueman.enable = true;
}

I get the following output when I run flutter doctor:

[✓] Flutter (Channel stable, 3.35.1, on NixOS 25.11 (Xantusia) 6.16.3, locale en_US.UTF-8)
[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/to/linux-android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.

[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Linux toolchain - develop for Linux desktop
    ! Unable to access driver information using 'eglinfo'.
      It is likely available from your distribution (e.g.: apt install mesa-utils)
[!] Android Studio (version 2025.1.2)
    ✗ Unable to determine bundled Java version.
[✓] IntelliJ IDEA Ultimate Edition (version 2025.2)
[✓] Connected device (1 available)
[✓] Network resources

What am I missing here?

nixpkgs/pkgs/applications/editors/android-studio/common.nix at c8aa8cc00a5cb57fada0851a038d35c08a36a2bb · NixOS/nixpkgs · GitHub + Issues with creating a Flutter `nix develop` shell hopefully will helpful

Copying the flake linked to the end of that thread partially works when I change to the stable branch. However I am unable to create any android emulators, I get the following error:

avdmanager create avd -n test -k "system-images;android-33;google_apis;x86" Warning: Observed package id 'ndk;27.0.12077973' in inconsistent location '/nix/store/ziss2flg1ld8c5ww5hiidc151nzbpn9p-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/ziss2flg1ld8c5ww5hiidc151nzbpn9p-androidsdk/libexec/android-sdk/ndk/27.0.12077973') [=======================================] 100% Fetch remote repository... Error: Package path is not valid. Valid system image paths are: null

avdmanager create avd -b x86_64 -n baz -k 'system-images;android-35;google_apis_playstore;x86_64' -d 39

randomly pulled from my shell history. I don’t think x86 exists for later android versions. You need 64bit.

The same error is returned when I run avdmanager create avd -b x86_64 -n baz -k 'system-images;android-35;google_apis_playstore;x86_64' -d 39

Sorry for the late reply,

The nixpkgs-unstable branch does in fact currently break my flake.

I’m guessing somebody was tinkering with version parsing of a value in pkgs.androidenv.composeAndroidPackages because I am currently getting the following error (which I probably haven’t noticed thanks to my project using a major-only version) when running nix develop:

error:
       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:37:12:
           36|
           37|   strict = derivationStrict drvAttrs;
             |            ^
           38|

       … while evaluating derivation 'nix-shell'
         whose name attribute is located at /nix/store/1wnxdqr2n1pj80lirh9pzsymslx8zd9l-source/pkgs/stdenv/generic/make-derivation.nix:544:13

       … while evaluating attribute 'ANDROID_HOME' of derivation 'nix-shell'
         at /nix/store/1dic14fyxnh2fs8xr9icr9fd9pvcr5av-source/nix_develop/flutter_minimal/flake.nix:99:13:
           98|             # The location of the Android SDK.
           99|             ANDROID_HOME = "${composedAndroidSdk}/libexec/android-sdk";
             |             ^
          100|             # If this isn't working, see this:

       (stack trace truncated; use '--show-trace' to show the full, detailed trace)

       error: toIntBase10: Could not convert "36.1" to int.

Setting nixpkgs.url to the nixos-25.05 branch is a valid workaround for now, though.

Hello
Yeah I tinkered with it precisely to avoid the error you’re seeing when “36.1” became the version because the code expected only a single integer in the string value

Looks like you’re somehow getting the androidenv.platforms bump but not the parsing fix even though I did both in the same PR?

1 Like

That’s right. Does my flake work on your end?

It took me a while to realize the warning is unrelated to the error you received after running the command.

The tool is complaining about not having any system images available. To fix this, I have added the following three parameters to the androidComposition of my aforementioned flake.nix file:

  # ...
  includeSystemImages = true;
  systemImageTypes = [ "google_apis_playstore" ];
  includeEmulator = true;

Do note that my flake was not meant to accommodate the Android Studio, so I won’t update the repository with these changes.

And now after running this command in the nix develop shell, I still get the warning, but the emulator gets created successfully:

$ avdmanager create avd -b x86_64 -n baz -k 'system-images;android-35;google_apis_playstore;x86_64' -d 39
Warning: Observed package id 'ndk;27.0.12077973' in inconsistent location '/nix/store/l7dxb68r2hl0dfsslyymha8qfa3pligw-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/l7dxb68r2hl0dfsslyymha8qfa3pligw-androidsdk/libexec/android-sdk/ndk/27.0.12077973')
[=======================================] 100% Fetch remote repository...

Hope this helps.

It doesn’t, but it made me realise my parsing fix needs to be applied in more places on that file, which then also fixes the flake.
Will put up a PR soon

2 Likes
3 Likes

After testing the flake again (and temporarily switching its nixpkgs.url to the master branch, since the fix is not yet on nixpkgs-unstable), it now works. Many thanks.