2024-01-22 17:41:51 -05:00
|
|
|
{
|
|
|
|
# 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.
|
2024-07-07 17:13:43 +02:00
|
|
|
# This example pins nixpkgs: https://nix.dev/tutorials/first-steps/towards-reproducibility-pinning-nixpkgs.html
|
2024-12-10 20:26:33 +01:00
|
|
|
/*
|
|
|
|
nixpkgsSource ? (builtins.fetchTarball {
|
2025-03-14 00:53:09 -07:00
|
|
|
name = "nixpkgs-20.09";
|
|
|
|
url = "https://github.com/NixOS/nixpkgs/archive/20.09.tar.gz";
|
|
|
|
sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy";
|
2024-01-22 17:41:51 -05:00
|
|
|
}),
|
|
|
|
pkgs ? import nixpkgsSource {
|
2025-03-14 00:53:09 -07:00
|
|
|
config.allowUnfree = true;
|
2024-01-22 17:41:51 -05:00
|
|
|
},
|
|
|
|
*/
|
|
|
|
|
|
|
|
# If you want to use the in-tree version of nixpkgs:
|
|
|
|
pkgs ? import ../../../../.. {
|
|
|
|
config.allowUnfree = true;
|
2024-12-10 20:26:33 +01:00
|
|
|
},
|
2025-03-14 00:53:09 -07:00
|
|
|
|
|
|
|
licenseAccepted ? pkgs.callPackage ../license.nix { },
|
2024-01-22 17:41:51 -05:00
|
|
|
}:
|
|
|
|
|
|
|
|
# Copy this file to your Android project.
|
|
|
|
let
|
|
|
|
# If you copy this example out of nixpkgs, something like this will work:
|
2024-12-10 20:26:33 +01:00
|
|
|
/*
|
|
|
|
androidEnvNixpkgs = fetchTarball {
|
2025-03-14 00:53:09 -07:00
|
|
|
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>";
|
2024-01-22 17:41:51 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
androidEnv = pkgs.callPackage "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" {
|
2025-03-14 00:53:09 -07:00
|
|
|
inherit pkgs;
|
|
|
|
licenseAccepted = true;
|
2024-12-10 20:26:33 +01:00
|
|
|
};
|
|
|
|
*/
|
2024-01-22 17:41:51 -05:00
|
|
|
|
|
|
|
# Otherwise, just use the in-tree androidenv:
|
|
|
|
androidEnv = pkgs.callPackage ./.. {
|
2025-03-14 00:53:09 -07:00
|
|
|
inherit pkgs licenseAccepted;
|
2024-01-22 17:41:51 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
sdkArgs = {
|
|
|
|
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;
|
2025-03-14 01:19:49 -07:00
|
|
|
latestSdk = pkgs.lib.foldl' pkgs.lib.max 0 androidComposition.platformVersions;
|
2024-01-22 17:41:51 -05:00
|
|
|
jdk = pkgs.jdk;
|
|
|
|
in
|
2025-03-14 02:57:08 +01:00
|
|
|
pkgs.mkShell {
|
2024-01-22 17:41:51 -05:00
|
|
|
name = "androidenv-example-without-emulator-demo";
|
2024-12-10 20:26:33 +01:00
|
|
|
packages = [
|
|
|
|
androidSdk
|
|
|
|
platformTools
|
|
|
|
jdk
|
|
|
|
];
|
2024-01-22 17:41:51 -05:00
|
|
|
|
|
|
|
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 = {
|
|
|
|
|
2024-12-10 20:26:33 +01:00
|
|
|
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=(
|
2025-02-05 00:17:00 -08:00
|
|
|
"build-tools" "cmdline-tools" \
|
2025-03-14 01:19:49 -07:00
|
|
|
"platform-tools" "platforms;android-${toString latestSdk}"
|
2024-12-10 20:26:33 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
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"
|
|
|
|
'';
|
2024-01-22 17:41:51 -05:00
|
|
|
};
|
|
|
|
}
|