diff --git a/pkgs/by-name/ap/apkeditor-bin/package.nix b/pkgs/by-name/ap/apkeditor-bin/package.nix new file mode 100644 index 0000000000000..d595cf3ff1368 --- /dev/null +++ b/pkgs/by-name/ap/apkeditor-bin/package.nix @@ -0,0 +1,37 @@ +{ + lib, + buildEnv, + fetchurl, + jre, + writeShellScriptBin, +}: + +let + pname = "apkeditor-bin"; + version = "1.4.1"; + + jar = fetchurl { + url = "https://github.com/REAndroid/APKEditor/releases/download/V${version}/APKEditor-${version}.jar"; + hash = "sha256-SpiuanVSZDV2A/GQa5LmLnV9WSKQFOMzlfTgP/AZ/ag="; + }; +in +buildEnv { + name = "${pname}-${version}"; + + paths = [ + (writeShellScriptBin "APKEditor" '' + exec ${lib.getExe jre} -jar ${jar} "$@" + '') + ]; + + meta = { + description = "Powerful android apk resources editor"; + maintainers = with lib.maintainers; [ ulysseszhan ]; + license = lib.licenses.asl20; + platforms = lib.platforms.all; + homepage = "https://github.com/REAndroid/APKEditor"; + mainProgram = "APKEditor"; + sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; + }; + +} diff --git a/pkgs/by-name/ap/apkeditor/arsclib/default.nix b/pkgs/by-name/ap/apkeditor/arsclib/default.nix new file mode 100644 index 0000000000000..37e9d0d9ec59a --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/arsclib/default.nix @@ -0,0 +1,33 @@ +{ + fetchFromGitHub, + gradle, + lib, + REAndroidLibrary, +}: + +let + self = REAndroidLibrary { + pname = "arsclib"; + # 1.3.5 is not new enough for APKEditor because of API changes + version = "1.3.5-unstable-2024-10-21"; + projectName = "ARSCLib"; + + src = fetchFromGitHub { + owner = "REAndroid"; + repo = "ARSCLib"; + # This is the latest commit at the time of packaging. + # It can be changed to a stable release ("V${version}") + # if it is compatible with APKEditor. + rev = "ed6ccf00e56d7cce13e8648ad46a2678a6093248"; + hash = "sha256-jzd7xkc4O+P9hlGsFGGl2P3pqVvV5+mDyKTRUuGfFSA="; + }; + + mitmCache = gradle.fetchDeps { + pkg = self; + data = ./deps.json; + }; + + meta.license = lib.licenses.asl20; + }; +in +self diff --git a/pkgs/by-name/ap/apkeditor/arsclib/deps.json b/pkgs/by-name/ap/apkeditor/arsclib/deps.json new file mode 100644 index 0000000000000..de1ed4d2da3c4 --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/arsclib/deps.json @@ -0,0 +1,17 @@ +{ + "!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.", + "!version": 1, + "https://repo.maven.apache.org/maven2": { + "junit#junit/4.12": { + "jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=", + "pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ=" + }, + "org/hamcrest#hamcrest-core/1.3": { + "jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=", + "pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM=" + }, + "org/hamcrest#hamcrest-parent/1.3": { + "pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps=" + } + } +} diff --git a/pkgs/by-name/ap/apkeditor/jcommand/default.nix b/pkgs/by-name/ap/apkeditor/jcommand/default.nix new file mode 100644 index 0000000000000..43b6ce8cae4c7 --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/jcommand/default.nix @@ -0,0 +1,33 @@ +{ + fetchFromGitHub, + gradle, + lib, + REAndroidLibrary, +}: + +let + self = REAndroidLibrary { + pname = "jcommand"; + version = "0-unstable-2024-09-20"; + projectName = "JCommand"; + + src = fetchFromGitHub { + owner = "REAndroid"; + repo = "JCommand"; + # No tagged releases, and + # it is hard to determine the actual commit that APKEditor is intended to use, + # so I think we should use the latest commit that doesn't break compilation or basic functionality. + # Currently this is the latest commit at the time of packaging. + rev = "714b6263c28dabb34adc858951cf4bc60d6c3fed"; + hash = "sha256-6Em+1ddUkZBCYWs88qtfeGnxISZchFrHgDL8fsgZoQg="; + }; + + mitmCache = gradle.fetchDeps { + pkg = self; + data = ./deps.json; + }; + + meta.license = lib.licenses.asl20; + }; +in +self diff --git a/pkgs/by-name/ap/apkeditor/jcommand/deps.json b/pkgs/by-name/ap/apkeditor/jcommand/deps.json new file mode 100644 index 0000000000000..de1ed4d2da3c4 --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/jcommand/deps.json @@ -0,0 +1,17 @@ +{ + "!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.", + "!version": 1, + "https://repo.maven.apache.org/maven2": { + "junit#junit/4.12": { + "jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=", + "pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ=" + }, + "org/hamcrest#hamcrest-core/1.3": { + "jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=", + "pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM=" + }, + "org/hamcrest#hamcrest-parent/1.3": { + "pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps=" + } + } +} diff --git a/pkgs/by-name/ap/apkeditor/package.nix b/pkgs/by-name/ap/apkeditor/package.nix new file mode 100644 index 0000000000000..43fc102c8048f --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/package.nix @@ -0,0 +1,106 @@ +{ + lib, + stdenv, + fetchFromGitHub, + callPackage, + + jre, + gradle_6, + makeWrapper, +}: + +let + gradle = gradle_6; + REAndroidLibrary = + args: + let + inherit (args) pname version projectName; + outJar = "share/${projectName}/${projectName}.jar"; + self = stdenv.mkDerivation ( + { + __darwinAllowLocalNetworking = true; + + buildInputs = [ jre ]; + nativeBuildInputs = [ gradle ]; + + gradleFlags = [ "-Dfile.encoding=utf-8" ]; + gradleBuildTask = "jar"; + doCheck = true; + + inherit outJar; + installPhase = '' + runHook preInstall + install -Dm644 build/libs/*.jar $out/${outJar} + runHook postInstall + ''; + } + // args + // { + meta = { + sourceProvenance = with lib.sourceTypes; [ + fromSource + binaryBytecode # mitm cache + ]; + } // args.meta; + } + ); + in + self; + + arsclib = callPackage ./arsclib { inherit gradle REAndroidLibrary; }; + smali = callPackage ./smali { inherit gradle REAndroidLibrary; }; + jcommand = callPackage ./jcommand { inherit gradle REAndroidLibrary; }; + + apkeditor = + let + pname = "apkeditor"; + version = "1.4.1"; + projectName = "APKEditor"; + in + REAndroidLibrary { + inherit pname version projectName; + + # When you need to update **/deps.json for the dependencies (e.g. for smali), + # run `nix build apkeditor.passthru.deps.smali.mitmCache.updateScript`. + passthru.deps = { + inherit arsclib smali jcommand; + }; + + src = fetchFromGitHub { + owner = "REAndroid"; + repo = "APKEditor"; + rev = "V${version}"; + hash = "sha256-a72j9qGjJXnTFeqLez2rhBSArFVYCX+Xs7NQd8CY5Yk="; + }; + + nativeBuildInputs = [ + gradle + makeWrapper + ]; + + gradleBuildTask = "fatJar"; + + # The paths libs/*.jar are hardcoded in build.gradle of APKEditor: + # https://github.com/REAndroid/APKEditor/blob/V1.4.1/build.gradle#L24-L31 + preConfigure = '' + ln -sf ${arsclib}/${arsclib.outJar} libs/ARSCLib.jar + ln -sf ${smali}/${smali.outJar} libs/smali.jar + ln -sf ${jcommand}/${jcommand.outJar} libs/JCommand.jar + ''; + + postInstall = '' + mkdir -p $out/bin + makeWrapper ${lib.getExe jre} $out/bin/APKEditor \ + --add-flags "-jar $out/${apkeditor.outJar}" + ''; + + meta = { + description = "Powerful android apk resources editor"; + maintainers = with lib.maintainers; [ ulysseszhan ]; + license = lib.licenses.asl20; + platforms = lib.platforms.all; + mainProgram = "APKEditor"; + }; + }; +in +apkeditor diff --git a/pkgs/by-name/ap/apkeditor/smali/default.nix b/pkgs/by-name/ap/apkeditor/smali/default.nix new file mode 100644 index 0000000000000..0d5eb593481d6 --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/smali/default.nix @@ -0,0 +1,52 @@ +{ + fetchFromGitHub, + gradle, + lib, + REAndroidLibrary, +}: + +let + self = REAndroidLibrary { + pname = "smali"; + version = "0-unstable-2024-10-15"; + projectName = "smali"; + + src = fetchFromGitHub { + owner = "REAndroid"; + repo = "smali-lib"; + # No tagged releases, and + # it is hard to determine the actual commit that APKEditor is intended to use, + # so I think we should use the latest commit that doesn't break compilation or basic functionality. + # Currently this is the latest commit at the time of packaging. + rev = "c781eafb31f526abce9fdf406ce2c925fec20d28"; + hash = "sha256-6tkvikgWMUcKwzsgbfpxlB6NZBAlZtTE34M3qPQw7Y4="; + }; + + mitmCache = gradle.fetchDeps { + pkg = self; + data = ./deps.json; + }; + gradleBuildTask = "build"; + + installPhase = '' + runHook preInstall + install -Dm644 smali/build/libs/*-fat.jar $out/${self.outJar} + runHook postInstall + ''; + + # This fork deleted the NOTICE file from the original repo: + # https://github.com/REAndroid/smali-lib/commit/40c075a1ff5fa8e29f339f4e71f45c028789c86c#diff-dfb14fbb9e7d095209ec4cfd621069437bf9c442ff9de9d4ce889781bd0fefcf + # Here is the gist of the original NOTICE file: + # Various portions of the code are from AOSP and is licensed under Apache 2.0. + # Other parts are copyrighted by JesusFreke and Google, + # permitting redistribution (with or without modification) of source and binary + # as long as the copyright notice is present. + # For full details, see: + # https://github.com/JesusFreke/smali/blob/master/NOTICE + meta.license = with lib.licenses; [ + asl20 + free + ]; + }; +in +self diff --git a/pkgs/by-name/ap/apkeditor/smali/deps.json b/pkgs/by-name/ap/apkeditor/smali/deps.json new file mode 100644 index 0000000000000..ffaa427db4c1f --- /dev/null +++ b/pkgs/by-name/ap/apkeditor/smali/deps.json @@ -0,0 +1,86 @@ +{ + "!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.", + "!version": 1, + "https://repo.maven.apache.org/maven2": { + "antlr#antlr/2.7.7": { + "jar": "sha256-iPvaS5Ellrn1bo4S5YDMlUus+1F3bs/d0+GPwc9W3Ew=", + "pom": "sha256-EA95O6J/i05CBO20YXHr825U4PlM/AJSf+oHoLsfzrc=" + }, + "com/beust#jcommander/1.48": { + "jar": "sha256-pzE/z94HCTDkDsee3zxZSM805PDSXLOgn5lj2L3YQRM=", + "pom": "sha256-EH4aAn6KszS4H7KJYGDba68y430uME5glCNtPn6ymQM=" + }, + "de/jflex#jflex-parent/1.6.1": { + "pom": "sha256-zgOPd5P3f7eO+hFMMyjlx37OF9MzRfB7TsCm4U4WB1k=" + }, + "de/jflex#jflex/1.6.1": { + "jar": "sha256-EsuEWC3TPm3O2yTaSwwf6AdfxjkWx8xt8UCHDPHpKbY=", + "pom": "sha256-MXynvUMHgykKCEHUwxEvcbyY1aR+6cyIaZXEFChcnes=" + }, + "junit#junit/4.12": { + "jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=", + "pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ=" + }, + "org/antlr#ST4/4.0.8": { + "jar": "sha256-WMqrxAyfdLC1mT/YaOD2SlDAdZCU5qJRqq+tmO38ejs=", + "pom": "sha256-PAiQ3scRdOs7o9QEyp40GQH/awQhgIsAcTsNuxMGwXw=" + }, + "org/antlr#antlr-master/3.5.2": { + "pom": "sha256-QtkaUx6lEA6wm1QaoALDuQjo8oK9c7bi9S83HvEzG9Y=" + }, + "org/antlr#antlr-runtime/3.5.2": { + "jar": "sha256-zj/I7LEPOemjzdy7LONQ0nLZzT0LHhjm/nPDuTichzQ=", + "pom": "sha256-RqnCIAu4sSvXEkqnpQl/9JCZkIMpyFGgTLIFFCCqfyU=" + }, + "org/antlr#antlr/3.5.2": { + "jar": "sha256-WsNsKs+woPPTfa/iC1tXDyZD4tAAxkjURQPCc4vmQ98=", + "pom": "sha256-Bl5egGYv64WHldPAH3cUJHvdMZRZcF7hOxpLGWj6IuQ=" + }, + "org/antlr#stringtemplate/3.2.1": { + "jar": "sha256-9mznLpZeUwHLDwIOVNK6atdv65Gzy/ww278AwGpt9tc=", + "pom": "sha256-tF6CZVqlpI8z0TpD5DRUJrFWM1s14kta6hLbWCPBahY=" + }, + "org/apache/ant#ant-launcher/1.7.0": { + "jar": "sha256-crPQPg19hqVlE+w43UzWq+PaZiAYm+IiqyVTUstuuko=", + "pom": "sha256-0p0myykG6cOYOBvUhz7KuwTWMO9hNDXssUmoWirvyvQ=" + }, + "org/apache/ant#ant-parent/1.7.0": { + "pom": "sha256-GlLYNxpsvG4F7b8CZGcXEX3SNERZvulnAU8EH9zzCJM=" + }, + "org/apache/ant#ant/1.7.0": { + "jar": "sha256-kvcjB+dEDx41LJFvJDjSu6s//Sz3MMcTFhF60Eq63qg=", + "pom": "sha256-fAIXQD9XogDLgNSJiSzgTqdi8qEzq+PdOEcGUUNM+vI=" + }, + "org/hamcrest#hamcrest-core/1.3": { + "jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=", + "pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM=" + }, + "org/hamcrest#hamcrest-parent/1.3": { + "pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps=" + }, + "org/mockito#mockito-core/1.10.19": { + "jar": "sha256-1YMe5PcQVYAIIaNKMFHPHtWzcC8pX/69UPZftdgacbg=", + "pom": "sha256-cVJo2AC6zQcjbuHm9EB2UOYc+XlzO8Ji5N4V+9E7kg0=" + }, + "org/objenesis#objenesis-parent/2.1": { + "pom": "sha256-NDsaMJNBDj+ybGaZhCOrOJw6dEHNGohZvTJ90VtHmqQ=" + }, + "org/objenesis#objenesis/2.1": { + "jar": "sha256-x0MwzGuAbIBP0350SHtP5dfCdQxeFfvG76E73uG974A=", + "pom": "sha256-QFTxhhN+O4SafCPJ6EbNV9ii/jLBfUxivUIFEtdMPT8=" + }, + "org/sonatype/oss#oss-parent/3": { + "pom": "sha256-DCeIkmfAlGJEYRaZcJPGcVzMAMKzqVTmZDRDDY9Nrt4=" + }, + "org/sonatype/oss#oss-parent/7": { + "pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ=" + }, + "org/sonatype/oss#oss-parent/9": { + "pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno=" + }, + "org/xbib/gradle/plugin#gradle-plugin-jflex/1.1.0": { + "jar": "sha256-nfON5Bsazk30I3o2pAw8k0qzVWBomj9b6DiwfQ3jn3g=", + "pom": "sha256-Ikxjj1TL8LCYxDw6GylqmsF/dfYC9m65szjnkqr6C5g=" + } + } +}