Flake for rust tauri not working

I was tying to use tauri on my android.
It works on the browser, but running on android i get

Failed to install the following SDK components:
build-tools;34.0.0 Android SDK Build-Tools 34
The SDK directory is not writable (/nix/store/

I used this link as a guide
flake source
As i have not used nixos more than a year, i am relativelly new here.

Any help appreciated.

Warning: Observed package id 'ndk;26.3.11579264' in inconsistent location '/nix/store/iwnz7l012rnag8g6gpmsf2pq51pcnqq8-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/iwnz7l012rnag8g6gpmsf2pq51pcnqq8-androidsdk/libexec/android-sdk/ndk/26.3.11579264')

Hi can you explain further how you get the error? Do you mean you already build the binary and the you get the error when trying to execute the binary? Or do you just get the error when trying to build your project?

Sorry, i got too much work for the moment. I will come back later (a month or more) here and try to fix it.
I wanted it for a showcase, but could not make it on time. (now i got a project first to finish).

{
  description = "Tauri + Dioxus Mobile Development with Android NDK";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    rust-overlay.url = "github:oxalica/rust-overlay";
  };

  outputs = { self, nixpkgs, flake-utils, rust-overlay, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        overlays = [ (import rust-overlay) ];

        pkgs = import nixpkgs {
          inherit system overlays;
          config = {
            allowUnfree = true;
            android_sdk.accept_license = true;
          };
        };

        java = pkgs.jdk17;
        buildToolsVersion = "35.0.0";
        ndkVersion = "29.0.14206865";
        androidApiLevel = "35";  # Updated to match platform version
        
        androidSdkRoot = "/home/klala/Android/Sdk";
        ndkPath = "${androidSdkRoot}/ndk/${ndkVersion}";

        android = pkgs.androidenv.composeAndroidPackages {
          cmdLineToolsVersion = "8.0";
          toolsVersion = "26.1.1";
          platformToolsVersion = "35.0.2";
          buildToolsVersions = [ buildToolsVersion ];
          platformVersions = [ "35" "36" ];
          includeSources = false;
          includeSystemImages = false;
          includeNDK = true;
          ndkVersions = [ ndkVersion ];
          useGoogleAPIs = false;
        };

        rustToolchain = pkgs.rust-bin.stable.latest.default.override {
          extensions = [ "rust-src" "rust-analyzer" ];
          targets = [ 
            "aarch64-linux-android"
            "armv7-linux-androideabi"
            "i686-linux-android"
            "x86_64-linux-android"
            "wasm32-unknown-unknown"
          ];
        };

        dioxusCli = pkgs.rustPlatform.buildRustPackage rec {
          pname = "dioxus-cli";
          version = "0.6.3";
          src = pkgs.fetchCrate { inherit pname version; hash = "sha256-wuIJq+UN1q5qYW4TXivq93C9kZiPHwBW5Ty2Vpik2oY="; };
          cargoHash = "sha256-L9r/nJj0Rz41mg952dOgKxbDS5u4zGEjSA3EhUHfGIk=";
          nativeBuildInputs = [ pkgs.pkg-config pkgs.cacert ];
          buildInputs = [ pkgs.openssl ];
          OPENSSL_NO_VENDOR = 1;
          doCheck = false;
        };

        rustBuildInputs = [
          pkgs.cargo-tauri
          pkgs.cargo-ndk
          pkgs.cordova
          pkgs.openssl
          pkgs.rustup
          pkgs.llvmPackages_21.clang-unwrapped
          pkgs.libiconv
          pkgs.pkg-config
          pkgs.mesa
          pkgs.libgbm
          pkgs.libglvnd
          pkgs.xorg.libXi
          pkgs.xorg.libXrandr
          pkgs.xorg.libX11
          pkgs.clang
          pkgs.glibc
          pkgs.zlib
          pkgs.cmake
          dioxusCli
        ] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [
          pkgs.glib
          pkgs.gtk3
          pkgs.libsoup_3
          pkgs.webkitgtk_4_1
          pkgs.xdotool
        ] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs.darwin.apple_sdk.frameworks; [
          IOKit
          Carbon
          WebKit
          Security
          Cocoa
          CoreFoundation
          Foundation
        ]);

      in {
        devShells.default = pkgs.mkShell {
          name = "tauri-dioxus-mobile-shell";

          buildInputs = [
            java
            android.androidsdk
            rustToolchain
            pkgs.gradle
            pkgs.android-studio
            pkgs.nodejs
            dioxusCli
          ] ++ rustBuildInputs;

          env = {
            JAVA_HOME = java;
            ANDROID_HOME = androidSdkRoot;
            ANDROID_SDK_ROOT = androidSdkRoot;
            ANDROID_NDK_ROOT = ndkPath;
            NDK_HOME = ndkPath;
            ANDROID_NDK_HOME = ndkPath;
            
            PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
            OPENSSL_DIR = pkgs.openssl;
            OPENSSL_INCLUDE_DIR = "${pkgs.openssl.dev}/include";
            OPENSSL_LIB_DIR = "${pkgs.openssl.out}/lib";

            GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdkRoot}/build-tools/${buildToolsVersion}/aapt2";

            CARGO_TAURI_ANDROID_PLATFORM = "android";

            DIORAMA_SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
          };

          shellHook = ''
            # Set Android SDK and NDK paths
            export ANDROID_SDK_ROOT="${androidSdkRoot}"
            export ANDROID_HOME="$ANDROID_SDK_ROOT"
            export ANDROID_NDK_ROOT="${ndkPath}"
            export NDK_HOME="$ANDROID_NDK_ROOT"
            export ANDROID_NDK_HOME="$ANDROID_NDK_ROOT"
            
            export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin"

            # Create directories if they don't exist
            mkdir -p "$ANDROID_SDK_ROOT" "$ANDROID_NDK_ROOT"

            # Check if NDK is properly installed
            if [ ! -f "$ANDROID_NDK_ROOT/source.properties" ]; then
              echo "WARNING: NDK ${ndkVersion} not found at $ANDROID_NDK_ROOT"
              echo "Installing Android NDK ${ndkVersion}..."
              sdkmanager "ndk;${ndkVersion}" --sdk_root="$ANDROID_SDK_ROOT"
              sdkmanager --licenses --sdk_root="$ANDROID_SDK_ROOT" || true
            fi

            # Install Android SDK Platform 35 and Build Tools if missing
            if [ ! -d "$ANDROID_SDK_ROOT/platforms/android-35" ]; then
              echo "Installing Android SDK Platform 35 and Build Tools 35..."
              sdkmanager "platforms;android-35" "build-tools;35.0.0" --sdk_root="$ANDROID_SDK_ROOT"
              sdkmanager --licenses --sdk_root="$ANDROID_SDK_ROOT" || true
            fi
            
            # Verify NDK installation
            if [ -f "$ANDROID_NDK_ROOT/source.properties" ]; then
              echo "✓ NDK ${ndkVersion} is properly installed"
            else
              echo "✗ NDK installation failed. Please install manually via Android Studio"
              echo "  Look for 'NDK (Side by side)' in SDK Manager and install version ${ndkVersion}"
            fi
            
            # Cargo config for Android cross-compilation with correct API level
            mkdir -p .cargo
            cat > .cargo/config.toml <<EOF
            [target.aarch64-linux-android]
            ar = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
            linker = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${androidApiLevel}-clang"
            runner = "adb"

            [target.armv7-linux-androideabi]
            ar = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
            linker = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi${androidApiLevel}-clang"
            runner = "adb"

            [target.i686-linux-android]
            ar = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
            linker = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android${androidApiLevel}-clang"
            runner = "adb"

            [target.x86_64-linux-android]
            ar = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
            linker = "$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android${androidApiLevel}-clang"
            runner = "adb"
            EOF

            # Initialize adb server
            adb start-server || true

            echo ""
            echo "╔══════════════════════════════════════════════╗"
            echo "║  Tauri + Dioxus Mobile Environment Ready    ║"
            echo "╠══════════════════════════════════════════════╣"
            echo "║ • Android API: ${androidApiLevel}"
            echo "║ • NDK: ${ndkVersion}"
            echo "║ • SDK: $ANDROID_SDK_ROOT"
            echo "║ • NDK Path: $ANDROID_NDK_ROOT"
            echo "║ • Rust targets properly configured"
            echo "╚══════════════════════════════════════════════╝"
            echo ""
            echo "Environment variables set:"
            echo "  ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT"
            echo "  ANDROID_HOME: $ANDROID_HOME" 
            echo "  ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
            echo "  NDK_HOME: $NDK_HOME"
            echo "  ANDROID_NDK_HOME: $ANDROID_NDK_HOME"
          '';
        };
      });
}

Hello. I have managed to make it work for version sdk 34, but not 35 or API 36.

/Android/Sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
warning: ring@0.17.14: NixOS cannot run dynamically linked executables intended for generic
warning: ring@0.17.14: linux environments out of the box. For more information, see:
warning: ring@0.17.14: https://nix.dev/permalink/stub-ld
error: failed to run custom build command for `ring v0.17.14`
``

warning: ring@0.17.14: Compiler family detection failed due to error: ToolExecError: command did not execute successfully (status code exit status: 127): “/home/Lejla94/Android/Sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang” “-E” “/home/Lejla94/WORK/lx-f-dio-app/lx-f-dio-app/src-tauri/target/aarch64-linux-android/release/build/ring-6502c2ca38f61477/out/1656391200873064347detect_compiler_family.c”
warning: ring@0.17.14: Could not start dynamically linked executable: /home/Lejla94/Android/Sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
warning: ring@0.17.14: NixOS cannot run dynamically linked executables intended for generic
warning: ring@0.17.14: linux environments out of the box. For more information, see:

I also tried the following. It seems to pass until it tries to install sdk 35

Observed package id 'ndk;27.3.13750724' in inconsistent location '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk/27.3.13750724')
Observed package id 'ndk;27.3.13750724' in inconsistent location '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk/27.3.13750724')
Observed package id 'ndk;27.3.13750724' in inconsistent location '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk-bundle' (Expected '/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/ndk/27.3.13750724')
Checking the license for package Android SDK Build-Tools 35 in /nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk/licenses
License for package Android SDK Build-Tools 35 accepted.
Preparing "Install Android SDK Build-Tools 35 v.35.0.0".
Warning: Failed to read or create install properties file.

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:minifyUniversalReleaseWithR8'.
> Failed to install the following SDK components:
      build-tools;35.0.0 Android SDK Build-Tools 35
  The SDK directory is not writable (/nix/store/1gq1xalf5xiriwk2402gapjmavjg6g1n-androidsdk/libexec/android-sdk)
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    fenix.url = "github:nix-community/fenix";
    fenix.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = {
    self,
    nixpkgs,
    flake-utils,
    fenix,
  }:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = import nixpkgs {
        system = system;
        config.allowUnfree = true;
        config.android_sdk.accept_license = true;
      };

      android_sdk =
        (pkgs.androidenv.composeAndroidPackages {
          platformVersions = ["34" "35" "36"];
          ndkVersions = ["27.3.13750724"];
          includeNDK = true;
          useGoogleAPIs = false;
          useGoogleTVAddOns = false;
          includeEmulator = false;
          includeSystemImages = false;
          includeSources = false;
        })
        .androidsdk;

      packages = with pkgs; [
        curl
        wget
        pkg-config

        nodejs_20
        typescript-language-server

        (with fenix.packages.${system};
          combine [
            complete.rustc
            complete.cargo
            complete.clippy
            targets.aarch64-linux-android.latest.rust-std
            targets.armv7-linux-androideabi.latest.rust-std
            targets.i686-linux-android.latest.rust-std
            targets.x86_64-linux-android.latest.rust-std
          ])
        rust-analyzer

        android_sdk
        jdk
      ];

      libraries = with pkgs; [
        gtk3
        libsoup_3
        webkitgtk_4_1
        cairo
        gdk-pixbuf
        glib
        dbus
        openssl
        librsvg
      ];
    in {
      devShell = pkgs.mkShell {
        buildInputs = packages ++ libraries;

        LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath libraries}:$LD_LIBRARY_PATH";
        XDG_DATA_DIRS = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS";
        ANDROID_HOME = "${android_sdk}/libexec/android-sdk";
        NDK_HOME = "${android_sdk}/libexec/android-sdk/ndk/27.3.13750724";
        GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${android_sdk}/libexec/android-sdk/build-tools/35.0.0/aapt2";
      };
    });
}