diff --git a/pkgs/applications/editors/android-studio-for-platform/common.nix b/pkgs/applications/editors/android-studio-for-platform/common.nix new file mode 100644 index 0000000000000..a970f4a39d56f --- /dev/null +++ b/pkgs/applications/editors/android-studio-for-platform/common.nix @@ -0,0 +1,186 @@ +{ channel, pname, version, sha256Hash }: + +{ android-tools +, bash +, buildFHSEnv +, coreutils +, dpkg +, e2fsprogs +, fetchurl +, findutils +, git +, gnugrep +, gnused +, gnutar +, gtk2, gnome_vfs, glib, GConf +, 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 + gnome_vfs + glib + GConf + + # 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 + '' diff --git a/pkgs/applications/editors/android-studio-for-platform/default.nix b/pkgs/applications/editors/android-studio-for-platform/default.nix new file mode 100644 index 0000000000000..737ae7ddd1a80 --- /dev/null +++ b/pkgs/applications/editors/android-studio-for-platform/default.nix @@ -0,0 +1,32 @@ +{ callPackage, makeFontsConf, gnome2, buildFHSEnv, tiling_wm ? false }: + +let + mkStudio = opts: callPackage (import ./common.nix opts) { + fontsConf = makeFontsConf { + fontDirectories = []; + }; + inherit (gnome2) GConf gnome_vfs; + inherit buildFHSEnv; + inherit tiling_wm; + }; + stableVersion = { + version = "2023.2.1.20"; # Android Studio Iguana | 2023.2.1 Beta 2 + sha256Hash = "sha256-cM/pkSghqLUUvJVF/OVLDOxVBJlJLH8ge1bfZtDUegY="; + }; + canaryVersion = { + version = "2023.3.2.1"; # Android Studio Jellyfish | 2023.3.2 Canary 1 + sha256Hash = "sha256-XOsbMyNentklfEp1k49H3uFeiRNMCV/Seisw9K1ganM="; + }; +in { + # Attributes are named by their corresponding release channels + + stable = mkStudio (stableVersion // { + channel = "stable"; + pname = "android-studio-for-platform"; + }); + + canary = mkStudio (canaryVersion // { + channel = "canary"; + pname = "android-studio-for-platform-canary"; + }); +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index defcb00e9c378..aa663e91fd131 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -30413,6 +30413,10 @@ with pkgs; (callPackage ../applications/editors/android-studio { }); android-studio = androidStudioPackages.stable; + androidStudioForPlatformPackages = recurseIntoAttrs + (callPackage ../applications/editors/android-studio-for-platform { }); + android-studio-for-platform = androidStudioForPlatformPackages.stable; + antfs-cli = callPackage ../applications/misc/antfs-cli { }; antimony = libsForQt5.callPackage ../applications/graphics/antimony { };