{ # If you copy this example out of nixpkgs, use these lines instead of the next. # This example pins nixpkgs: https://nix.dev/tutorials/towards-reproducibility-pinning-nixpkgs.html /*nixpkgsSource ? (builtins.fetchTarball { name = "nixpkgs-20.09"; url = "https://github.com/NixOS/nixpkgs/archive/20.09.tar.gz"; sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy"; }), pkgs ? import nixpkgsSource {}, pkgs_i686 ? import nixpkgsSource { system = "i686-linux"; },*/ # If you want to use the in-tree version of nixpkgs: pkgs ? import ../../../../.. {}, pkgs_i686 ? import ../../../../.. { system = "i686-linux"; }, config ? pkgs.config }: # Copy this file to your Android project. let # Declaration of versions for everything. This is useful since these # versions may be used in multiple places in this Nix expression. android = { versions = { tools = "26.1.1"; platformTools = "31.0.2"; buildTools = "30.0.3"; ndk = [ "22.1.7171670" "21.3.6528147" # LTS NDK ]; cmake = "3.18.1"; emulator = "30.6.3"; }; platforms = ["23" "24" "25" "26" "27" "28" "29" "30"]; abis = ["armeabi-v7a" "arm64-v8a"]; extras = ["extras;google;gcm"]; }; # If you copy this example out of nixpkgs, something like this will work: /*androidEnvNixpkgs = fetchTarball { name = "androidenv"; url = "https://github.com/NixOS/nixpkgs/archive/.tar.gz"; sha256 = ""; }; androidEnv = pkgs.callPackage "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" { inherit config pkgs pkgs_i686; licenseAccepted = true; };*/ # Otherwise, just use the in-tree androidenv: androidEnv = pkgs.callPackage ./.. { inherit config pkgs pkgs_i686; licenseAccepted = true; }; androidComposition = androidEnv.composeAndroidPackages { toolsVersion = android.versions.tools; platformToolsVersion = android.versions.platformTools; buildToolsVersions = [android.versions.buildTools]; platformVersions = android.platforms; abiVersions = android.abis; includeSources = true; includeSystemImages = true; includeEmulator = true; emulatorVersion = android.versions.emulator; includeNDK = true; ndkVersions = android.versions.ndk; cmakeVersions = [android.versions.cmake]; useGoogleAPIs = true; includeExtras = android.extras; # If you want to use a custom repo JSON: # repoJson = ../repo.json; # If you want to use custom repo XMLs: /*repoXmls = { packages = [ ../xml/repository2-1.xml ]; images = [ ../xml/android-sys-img2-1.xml ../xml/android-tv-sys-img2-1.xml ../xml/android-wear-sys-img2-1.xml ../xml/android-wear-cn-sys-img2-1.xml ../xml/google_apis-sys-img2-1.xml ../xml/google_apis_playstore-sys-img2-1.xml ]; addons = [ ../xml/addon2-1.xml ]; };*/ # Accepting more licenses declaratively: extraLicenses = [ # Already accepted for you with the global accept_license = true or # licenseAccepted = true on androidenv. # "android-sdk-license" # These aren't, but are useful for more uncommon setups. "android-sdk-preview-license" "android-googletv-license" "android-sdk-arm-dbt-license" "google-gdk-license" "intel-android-extra-license" "intel-android-sysimage-license" "mips-android-sysimage-license" ]; }; androidSdk = androidComposition.androidsdk; platformTools = androidComposition.platform-tools; jdk = pkgs.jdk; in pkgs.mkShell rec { name = "androidenv-demo"; packages = [ androidSdk platformTools jdk pkgs.android-studio ]; LANG = "C.UTF-8"; LC_ALL = "C.UTF-8"; JAVA_HOME = jdk.home; # Note: ANDROID_HOME is deprecated. Use ANDROID_SDK_ROOT. ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk"; ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle"; # Ensures that we don't have to use a FHS env by using the nix store's aapt2. GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${android.versions.buildTools}/aapt2"; shellHook = '' # Add cmake to the path. cmake_root="$(echo "$ANDROID_SDK_ROOT/cmake/${android.versions.cmake}"*/)" export PATH="$cmake_root/bin:$PATH" # Write out local.properties for Android Studio. cat < local.properties # This file was automatically generated by nix-shell. sdk.dir=$ANDROID_SDK_ROOT ndk.dir=$ANDROID_NDK_ROOT cmake.dir=$cmake_root EOF ''; }