Unverified Commit 3f00b40f authored by Hadi's avatar Hadi
Browse files

androidenv: don't include emulator when includeEmulator is false

parent e7120ab3
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -151,7 +151,7 @@ rec {
    postInstall = ''
      ${linkPlugin { name = "platform-tools"; plugin = platform-tools; }}
      ${linkPlugin { name = "patcher"; plugin = patcher; }}
      ${linkPlugin { name = "emulator"; plugin = emulator; }}
      ${linkPlugin { name = "emulator"; plugin = emulator; check = includeEmulator; }}
    '';
  };

@@ -171,14 +171,14 @@ rec {
    }
  ) buildToolsVersions;

  emulator = callPackage ./emulator.nix {
  emulator = lib.optionals includeEmulator (callPackage ./emulator.nix {
    inherit deployAndroidPackage os;
    package = check-version packages "emulator" emulatorVersion;

    postInstall = ''
      ${linkSystemImages { images = system-images; check = includeSystemImages; }}
    '';
  };
  });

  platforms = map (version:
    deployAndroidPackage {
@@ -373,9 +373,11 @@ rec {
          ln -s $i $out/bin
      done

      ${lib.optionalString includeEmulator ''
        for i in ${emulator}/bin/*; do
            ln -s $i $out/bin
        done
      ''}

      find $ANDROID_SDK_ROOT/${cmdline-tools-package.path}/bin -type f -executable | while read i; do
          ln -s $i $out/bin
+33 −0
Original line number Diff line number Diff line
@@ -132,6 +132,39 @@ pkgs.mkShell rec {
      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=(
        "platforms;android-23" "platforms;android-24" "platforms;android-25" "platforms;android-26" \
        "platforms;android-27" "platforms;android-28" "platforms;android-29" "platforms;android-30" \
        "platforms;android-31" "platforms;android-32" "platforms;android-33" \
        "sources;android-23" "sources;android-24" "sources;android-25" "sources;android-26" \
        "sources;android-27" "sources;android-28" "sources;android-29" "sources;android-30" \
        "sources;android-31" "sources;android-32" "sources;android-33" "sources;android-34" \
        "system-images;android-28" \
        "system-images;android-29" \
        "system-images;android-30" \
        "system-images;android-31" \
        "system-images;android-32" \
        "system-images;android-33" \
        "ndk"
      )

      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 ];
    } ''
+152 −0
Original line number Diff line number Diff line
{
  # 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/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;
  }
, 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 = {
      cmdLineToolsVersion = "11.0";
      platformTools = "34.0.5";
      buildTools = "34.0.0";
    };
    platforms = [ "34" ];
  };

  # 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 config pkgs;
    licenseAccepted = true;
    };*/

  # Otherwise, just use the in-tree androidenv:
  androidEnv = pkgs.callPackage ./.. {
    inherit config pkgs;
    # You probably need to uncomment below line to express consent.
    # licenseAccepted = true;
  };

  sdkArgs = {
    cmdLineToolsVersion = android.versions.cmdLineToolsVersion;
    platformToolsVersion = android.versions.platformTools;
    buildToolsVersions = [ android.versions.buildTools ];
    platformVersions = android.platforms;
    includeNDK = false;
    includeSystemImages = false;
    includeEmulator = false;

    # 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;
  androidSdk = androidComposition.androidsdk;
  platformTools = androidComposition.platform-tools;
  jdk = pkgs.jdk;
in
pkgs.mkShell rec {
  name = "androidenv-example-without-emulator-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";

  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
    EOF
  '';

  passthru.tests = {

    shell-without-emulator-sdkmanager-packages-test = pkgs.runCommand "shell-without-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;34.0.0" "cmdline-tools;11.0" \
        "patcher;v4" "platform-tools" "platforms;android-34"
      )

      for package in "''${packages[@]}"; do
        if [[ ! $installed_packages_section =~ "$package" ]]; then
          echo "$package package was not installed."
          exit 1
        fi
      done

      touch "$out"
    '';

    shell-without-emulator-sdkmanager-excluded-packages-test = pkgs.runCommand "shell-without-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=(
        "emulator" "ndk"
      )

      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"
    '';
  };
}
+6 −4
Original line number Diff line number Diff line
@@ -2,8 +2,10 @@
let
  examples-shell = callPackage ./examples/shell.nix { };
  examples-shell-with-emulator = callPackage ./examples/shell-with-emulator.nix { };
  examples-shell-without-emulator = callPackage ./examples/shell-without-emulator.nix { };
  all-tests = examples-shell.passthru.tests //
    examples-shell-with-emulator.passthru.tests;
    (examples-shell-with-emulator.passthru.tests //
      examples-shell-without-emulator.passthru.tests);
in
stdenv.mkDerivation {
  name = "androidenv-test-suite";
+1 −1
Original line number Diff line number Diff line
{deployAndroidPackage, lib, package, autoPatchelfHook, makeWrapper, os, pkgs, pkgsi686Linux, postInstall}:

deployAndroidPackage {
  name = "androidsdk";
  name = "androidsdk-tools";
  inherit os package;
  nativeBuildInputs = [ makeWrapper ]
    ++ lib.optionals (os == "linux") [ autoPatchelfHook ];