Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 # If you copy this example out of nixpkgs, use these lines instead of the next. 3 # This example pins nixpkgs: https://nix.dev/tutorials/towards-reproducibility-pinning-nixpkgs.html 4 /*nixpkgsSource ? (builtins.fetchTarball { 5 name = "nixpkgs-20.09"; 6 url = "https://github.com/NixOS/nixpkgs/archive/20.09.tar.gz"; 7 sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy"; 8 }), 9 pkgs ? import nixpkgsSource { 10 config.allowUnfree = true; 11 }, 12 */ 13 14 # If you want to use the in-tree version of nixpkgs: 15 pkgs ? import ../../../../.. { 16 config.allowUnfree = true; 17 }, 18 19 config ? pkgs.config 20}: 21 22# Copy this file to your Android project. 23let 24 # Declaration of versions for everything. This is useful since these 25 # versions may be used in multiple places in this Nix expression. 26 android = { 27 versions = { 28 cmdLineToolsVersion = "9.0"; 29 platformTools = "34.0.1"; 30 buildTools = "33.0.2"; 31 ndk = [ 32 "25.1.8937393" # LTS NDK 33 "25.2.9519653" 34 ]; 35 cmake = "3.6.4111459"; 36 emulator = "33.1.6"; 37 }; 38 39 platforms = ["23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33"]; 40 abis = ["armeabi-v7a" "arm64-v8a"]; 41 extras = ["extras;google;gcm"]; 42 }; 43 44 # If you copy this example out of nixpkgs, something like this will work: 45 /*androidEnvNixpkgs = fetchTarball { 46 name = "androidenv"; 47 url = "https://github.com/NixOS/nixpkgs/archive/<fill me in from Git>.tar.gz"; 48 sha256 = "<fill me in with nix-prefetch-url --unpack>"; 49 }; 50 51 androidEnv = pkgs.callPackage "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" { 52 inherit config pkgs; 53 licenseAccepted = true; 54 };*/ 55 56 # Otherwise, just use the in-tree androidenv: 57 androidEnv = pkgs.callPackage ./.. { 58 inherit config pkgs; 59 # You probably need to uncomment below line to express consent. 60 # licenseAccepted = true; 61 }; 62 63 androidComposition = androidEnv.composeAndroidPackages { 64 cmdLineToolsVersion = android.versions.cmdLineToolsVersion; 65 platformToolsVersion = android.versions.platformTools; 66 buildToolsVersions = [android.versions.buildTools]; 67 platformVersions = android.platforms; 68 abiVersions = android.abis; 69 70 includeSources = true; 71 includeSystemImages = true; 72 includeEmulator = true; 73 emulatorVersion = android.versions.emulator; 74 75 includeNDK = true; 76 ndkVersions = android.versions.ndk; 77 cmakeVersions = [android.versions.cmake]; 78 79 useGoogleAPIs = true; 80 includeExtras = android.extras; 81 82 # If you want to use a custom repo JSON: 83 # repoJson = ../repo.json; 84 85 # If you want to use custom repo XMLs: 86 /*repoXmls = { 87 packages = [ ../xml/repository2-1.xml ]; 88 images = [ 89 ../xml/android-sys-img2-1.xml 90 ../xml/android-tv-sys-img2-1.xml 91 ../xml/android-wear-sys-img2-1.xml 92 ../xml/android-wear-cn-sys-img2-1.xml 93 ../xml/google_apis-sys-img2-1.xml 94 ../xml/google_apis_playstore-sys-img2-1.xml 95 ]; 96 addons = [ ../xml/addon2-1.xml ]; 97 };*/ 98 99 # Accepting more licenses declaratively: 100 extraLicenses = [ 101 # Already accepted for you with the global accept_license = true or 102 # licenseAccepted = true on androidenv. 103 # "android-sdk-license" 104 105 # These aren't, but are useful for more uncommon setups. 106 "android-sdk-preview-license" 107 "android-googletv-license" 108 "android-sdk-arm-dbt-license" 109 "google-gdk-license" 110 "intel-android-extra-license" 111 "intel-android-sysimage-license" 112 "mips-android-sysimage-license" 113 ]; 114 }; 115 116 androidSdk = androidComposition.androidsdk; 117 platformTools = androidComposition.platform-tools; 118 jdk = pkgs.jdk; 119in 120pkgs.mkShell rec { 121 name = "androidenv-demo"; 122 packages = [ androidSdk platformTools jdk pkgs.android-studio ]; 123 124 LANG = "C.UTF-8"; 125 LC_ALL = "C.UTF-8"; 126 JAVA_HOME = jdk.home; 127 128 # Note: ANDROID_HOME is deprecated. Use ANDROID_SDK_ROOT. 129 ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk"; 130 ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle"; 131 132 # Ensures that we don't have to use a FHS env by using the nix store's aapt2. 133 GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${android.versions.buildTools}/aapt2"; 134 135 shellHook = '' 136 # Add cmake to the path. 137 cmake_root="$(echo "$ANDROID_SDK_ROOT/cmake/${android.versions.cmake}"*/)" 138 export PATH="$cmake_root/bin:$PATH" 139 140 # Write out local.properties for Android Studio. 141 cat <<EOF > local.properties 142 # This file was automatically generated by nix-shell. 143 sdk.dir=$ANDROID_SDK_ROOT 144 ndk.dir=$ANDROID_NDK_ROOT 145 cmake.dir=$cmake_root 146 EOF 147 ''; 148 149 passthru.tests = { 150 151 shell-sdkmanager-licenses-test = pkgs.runCommand "shell-sdkmanager-licenses-test" { 152 nativeBuildInputs = [ androidSdk jdk ]; 153 } '' 154 if [[ ! "$(sdkmanager --licenses)" =~ "All SDK package licenses accepted." ]]; then 155 echo "At least one of SDK package licenses are not accepted." 156 exit 1 157 fi 158 touch $out 159 ''; 160 161 shell-sdkmanager-packages-test = pkgs.runCommand "shell-sdkmanager-packages-test" { 162 nativeBuildInputs = [ androidSdk jdk ]; 163 } '' 164 output="$(sdkmanager --list)" 165 installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}') 166 167 packages=( 168 "build-tools;33.0.2" "platform-tools" \ 169 "platforms;android-23" "platforms;android-24" "platforms;android-25" "platforms;android-26" \ 170 "platforms;android-27" "platforms;android-28" "platforms;android-29" "platforms;android-30" \ 171 "platforms;android-31" "platforms;android-32" "platforms;android-33" \ 172 "sources;android-23" "sources;android-24" "sources;android-25" "sources;android-26" \ 173 "sources;android-27" "sources;android-28" "sources;android-29" "sources;android-30" \ 174 "sources;android-31" "sources;android-32" "sources;android-33" \ 175 "system-images;android-28;google_apis_playstore;arm64-v8a" \ 176 "system-images;android-29;google_apis_playstore;arm64-v8a" \ 177 "system-images;android-30;google_apis_playstore;arm64-v8a" \ 178 "system-images;android-31;google_apis_playstore;arm64-v8a" \ 179 "system-images;android-32;google_apis_playstore;arm64-v8a" \ 180 "system-images;android-33;google_apis_playstore;arm64-v8a" 181 ) 182 183 for package in "''${packages[@]}"; do 184 if [[ ! $installed_packages_section =~ "$package" ]]; then 185 echo "$package package was not installed." 186 exit 1 187 fi 188 done 189 190 touch "$out" 191 ''; 192 }; 193} 194