summaryrefslogtreecommitdiff
path: root/pkgs/development/mobile/androidenv/cmdline-tools.nix
blob: 77c064ac4f598fdff47eca2096f9bce94d2d7d94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
  deployAndroidPackage,
  lib,
  package,
  autoPatchelfHook,
  makeWrapper,
  os,
  arch,
  pkgs,
  stdenv,
  postInstall,
  meta,
}:

deployAndroidPackage {
  name = "androidsdk";
  inherit package os arch;
  nativeBuildInputs = [
    makeWrapper
  ]
  ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];

  patchInstructions = ''
    ${lib.optionalString (os == "linux") ''
      # Auto patch all binaries
      autoPatchelf .
    ''}

    # Strip double dots from the root path
    export ANDROID_HOME="$out/libexec/android-sdk"

    # Wrap all scripts that require JAVA_HOME.
    # Use ANDROID_SDK_ROOT as legacy compatibility but the "correct" way is ANDROID_HOME nowadays (2026+).
    find "$ANDROID_HOME/${package.path}/bin" -maxdepth 1 -type f -executable | while read program; do
      if grep -q "JAVA_HOME" "$program"; then
        wrapProgram "$program"  --prefix PATH : ${pkgs.jdk17}/bin \
          --prefix ANDROID_HOME : "$ANDROID_HOME" \
          --prefix ANDROID_SDK_ROOT : "$ANDROID_HOME"
      fi
    done

    # Wrap sdkmanager script
    wrapProgram "$ANDROID_HOME/${package.path}/bin/sdkmanager" \
      --prefix PATH : ${lib.makeBinPath [ pkgs.jdk17 ]} \
      --add-flags "--sdk_root=$ANDROID_HOME"

    # Patch all script shebangs
    patchShebangs "$ANDROID_HOME/${package.path}/bin"

    cd "$ANDROID_HOME"
    ${postInstall}
  '';

  inherit meta;
}