Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
6.2 kB · 202 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203{ # To test your changes in androidEnv run `nix-shell android-sdk-with-emulator-shell.nix`
# If you copy this example out of nixpkgs, use these lines instead of the next. # This example pins nixpkgs: https://nix.dev/tutorials/first-steps/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 { config.allowUnfree = true; }, */
# If you want to use the in-tree version of nixpkgs: pkgs ? import ../../../../.. { config.allowUnfree = true; },
# You probably need to set it to true to express consent. licenseAccepted ? pkgs.callPackage ../license.nix { },}:
# Copy this file to your Android project.let # If you copy this example out of nixpkgs, something like this will work: /* androidEnvNixpkgs = fetchTarball { name = "androidenv"; url = "https://github.com/NixOS/nixpkgs/archive/<fill me in from Git>.tar.gz"; sha256 = "<fill me in with nix-prefetch-url --unpack>"; };
androidEnv = pkgs.callPackage "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" { inherit pkgs; licenseAccepted = true; }; */
# Otherwise, just use the in-tree androidenv: androidEnv = pkgs.callPackage ./.. { inherit pkgs licenseAccepted; };
emulatorSupported = pkgs.stdenv.hostPlatform.isx86_64 || pkgs.stdenv.hostPlatform.isDarwin;
sdkArgs = { includeSystemImages = true; includeEmulator = "if-supported";
# 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" ]; };
androidComposition = androidEnv.composeAndroidPackages sdkArgs; androidEmulator = androidEnv.emulateApp { name = "android-sdk-emulator-demo"; configOptions = { "hw.keyboard" = "yes"; }; sdkExtraArgs = sdkArgs; }; androidSdk = androidComposition.androidsdk; platformTools = androidComposition.platform-tools; latestSdk = pkgs.lib.foldl' pkgs.lib.max 0 androidComposition.platformVersions; jdk = pkgs.jdk;inpkgs.mkShell rec { name = "androidenv-demo"; packages = [ androidSdk platformTools androidEmulator jdk ];
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";
shellHook = '' # Write out local.properties for Android Studio. cat <<EOF > local.properties # This file was automatically generated by nix-shell. sdk.dir=$ANDROID_SDK_ROOT ndk.dir=$ANDROID_NDK_ROOT EOF '';
passthru.tests = {
shell-with-emulator-sdkmanager-packages-test = pkgs.runCommand "shell-with-emulator-sdkmanager-packages-test" { nativeBuildInputs = [ androidSdk jdk ]; } '' output="$(sdkmanager --list)" installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}') echo "installed_packages_section: ''${installed_packages_section}"
packages=( "build-tools" "cmdline-tools" \ "platform-tools" "platforms;android-${toString latestSdk}" \ "system-images;android-${toString latestSdk};google_apis;x86_64" ) ${pkgs.lib.optionalString emulatorSupported ''packages+=("emulator")''}
for package in "''${packages[@]}"; do if [[ ! $installed_packages_section =~ "$package" ]]; then echo "$package package was not installed." exit 1 fi done
touch "$out" '';
shell-with-emulator-sdkmanager-excluded-packages-test = pkgs.runCommand "shell-with-emulator-sdkmanager-excluded-packages-test" { nativeBuildInputs = [ androidSdk jdk ]; } '' output="$(sdkmanager --list)" installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}')
excluded_packages=(ndk) for x in $(seq 1 ${toString latestSdk}); do excluded_packages+=( "platforms;android-$x" "sources;android-$x" "system-images;android-$x" ) done
for package in "''${excluded_packages[@]}"; do if [[ $installed_packages_section =~ ^"$package"$ ]]; then echo "$package package was installed, while it was excluded!" exit 1 fi done
touch "$out" '';
shell-with-emulator-avdmanager-create-avd-test = pkgs.runCommand "shell-with-emulator-avdmanager-create-avd-test" { nativeBuildInputs = [ androidSdk androidEmulator jdk ]; } ( pkgs.lib.optionalString emulatorSupported '' export ANDROID_USER_HOME=$PWD/.android mkdir -p $ANDROID_USER_HOME
avdmanager delete avd -n testAVD || true echo "" | avdmanager create avd --force --name testAVD --package 'system-images;android-${toString latestSdk};google_apis;x86_64' result=$(avdmanager list avd)
if [[ ! $result =~ "Name: testAVD" ]]; then echo "avdmanager couldn't create the avd! The output is :''${result}" exit 1 fi
avdmanager delete avd -n testAVD || true '' + '' touch $out '' ); };}