{ channel, pname, version, sha256Hash }: { android-tools , bash , buildFHSEnv , coreutils , dpkg , e2fsprogs , fetchurl , findutils , git , gnugrep , gnused , gnutar , gtk2, glib , gzip , fontsConf , fontconfig , freetype , libX11 , libXext , libXi , libXrandr , libXrender , libXtst , makeFontsConf , makeWrapper , ncurses5 , openssl , ps , python3 , lib , stdenv , unzip , usbutils , which , runCommand , xkeyboard_config , zip , zlib , makeDesktopItem , tiling_wm ? false # if we are using a tiling wm, need to set _JAVA_AWT_WM_NONREPARENTING in wrapper }: let drvName = "${pname}-${version}"; filename = "asfp-${version}-linux.deb"; androidStudioForPlatform = stdenv.mkDerivation { name = "${drvName}-unwrapped"; src = fetchurl { url = "https://dl.google.com/android/asfp/${filename}"; sha256 = sha256Hash; }; nativeBuildInputs = [ dpkg makeWrapper ]; installPhase = '' cp -r "./opt/${pname}/" $out wrapProgram $out/bin/studio.sh \ --set-default JAVA_HOME "$out/jbr" \ --set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb" \ ${lib.optionalString tiling_wm "--set _JAVA_AWT_WM_NONREPARENTING 1"} \ --set FONTCONFIG_FILE ${fontsConf} \ --prefix PATH : "${lib.makeBinPath [ # Checked in studio.sh coreutils findutils gnugrep which gnused # Used during setup wizard gnutar gzip # Runtime stuff git ps usbutils android-tools # For Soong sync openssl python3 unzip zip e2fsprogs ]}" \ --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ # Crash at startup without these fontconfig freetype libXext libXi libXrender libXtst libX11 # Support multiple monitors libXrandr # For GTKLookAndFeel gtk2 glib # For Soong sync e2fsprogs ]}" ''; }; desktopItem = makeDesktopItem { name = pname; exec = pname; icon = pname; desktopName = "Android Studio for Platform (${channel} channel)"; comment = "The official Android IDE for Android platform development"; categories = [ "Development" "IDE" ]; startupNotify = true; startupWMClass = "jetbrains-studio"; }; # Android Studio for Platform downloads prebuilt binaries as part of the SDK. These tools # (e.g. `mksdcard`) have `/lib/ld-linux.so.2` set as the interpreter. An FHS # environment is used as a work around for that. fhsEnv = buildFHSEnv { name = "${drvName}-fhs-env"; multiPkgs = pkgs: [ zlib ncurses5 ncurses5.dev ]; profile = '' export ALLOW_NINJA_ENV=true export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32 ''; }; in runCommand drvName { startScript = '' #!${bash}/bin/bash ${fhsEnv}/bin/${drvName}-fhs-env ${androidStudioForPlatform}/bin/studio.sh "$@" ''; preferLocalBuild = true; allowSubstitutes = false; passthru = { unwrapped = androidStudioForPlatform; }; meta = with lib; { description = "The Official IDE for Android platform development"; longDescription = '' Android Studio for Platform (ASfP) is the version of the Android Studio IDE for Android Open Source Project (AOSP) platform developers who build with the Soong build system. ''; homepage = "https://developer.android.com/studio/platform.html"; license = with licenses; [ asl20 unfree ]; # The code is under Apache-2.0, but: # If one selects Help -> Licenses in Android Studio, the dialog shows the following: # "Android Studio includes proprietary code subject to separate license, # including JetBrains CLion(R) (www.jetbrains.com/clion) and IntelliJ(R) # IDEA Community Edition (www.jetbrains.com/idea)." # Also: For actual development the Android SDK is required and the Google # binaries are also distributed as proprietary software (unlike the # source-code itself). platforms = [ "x86_64-linux" ]; maintainers = with maintainers; [ robbins ]; mainProgram = pname; }; } '' mkdir -p $out/{bin,share/pixmaps} echo -n "$startScript" > $out/bin/${pname} chmod +x $out/bin/${pname} ln -s ${androidStudioForPlatform}/bin/studio.png $out/share/pixmaps/${pname}.png ln -s ${desktopItem}/share/applications $out/share/applications ''