Skip to content

Commit

Permalink
apkeditor: init at 1.4.1
Browse files Browse the repository at this point in the history
  • Loading branch information
UlyssesZh committed Oct 31, 2024
1 parent 5d82464 commit 2fcbb64
Show file tree
Hide file tree
Showing 7 changed files with 346 additions and 0 deletions.
33 changes: 33 additions & 0 deletions pkgs/by-name/ap/apkeditor/arsclib/default.nix
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions pkgs/by-name/ap/apkeditor/arsclib/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions pkgs/by-name/ap/apkeditor/jcommand/default.nix
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions pkgs/by-name/ap/apkeditor/jcommand/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

107 changes: 107 additions & 0 deletions pkgs/by-name/ap/apkeditor/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
{
lib,
stdenv,
fetchFromGitHub,
callPackage,

jre,
gradle,
makeWrapper,
}:

let
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 REAndroidLibrary; };
smali = callPackage ./smali { inherit REAndroidLibrary; };
jcommand = callPackage ./jcommand { inherit REAndroidLibrary; };

apkeditor =
let
pname = "apkeditor";
version = "1.4.1-unstable-2024-10-31";
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";
# This is a commit from a PR. It fixes build on Gradle 8.
# The master branch can only build from Gradle 6, which has been removed from nixpkgs.
rev = "a8eb8592b5da9bf0ae68bebecae5ba639fb11b83";
hash = "sha256-Grgk993tJJqxTkTD8xIwc4rvnDP9KGUEW8Fu7Hj05fQ=";
};

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
53 changes: 53 additions & 0 deletions pkgs/by-name/ap/apkeditor/smali/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
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 from a PR that fixes build on Gradle 8
# (master branch can only build on Gradle 6, which as been removed from nixpkgs).
rev = "67d8289df2ffe6a50a2b7e7dcff4bab87f9ad124";
hash = "sha256-BRgHXqYNYKQZ5DpM4XzZFUA3CD0yLCpVw17svkKPMeA=";
};

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
86 changes: 86 additions & 0 deletions pkgs/by-name/ap/apkeditor/smali/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2fcbb64

Please sign in to comment.