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