nixapks/flake.nix
2025-11-02 18:29:39 +03:00

115 lines
3.9 KiB
Nix

{
description = "Build android applications with nix";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
android-nixpkgs.url = "github:tadfisher/android-nixpkgs";
gradle2nix.url = "github:tadfisher/gradle2nix/v2";
gradle-dot-nix.url = "github:CrazyChaoz/gradle-dot-nix";
};
outputs =
inputs@{ nixpkgs, android-nixpkgs, gradle2nix, gradle-dot-nix, ... }:
let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
# although i can only make x86_64-linux work right now
# but it should be possible to make others work in the future
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system);
in
{
packages = forAllSystems (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
myLib = pkgs.callPackage ./lib { inherit inputs; };
base = myLib.byNameOverlay ./apks;
documentation = pkgs.stdenv.mkDerivation {
pname = "nixapks-docs";
version = "0.0.1";
src = ./docs;
buildInputs = with pkgs; [ mdbook ];
buildPhase = ''
mdbook build --dest-dir $out
'';
};
in
# Merge the generated documentation package into the packages set so
# you can build it via `nix build .#packages.<system>.documentation`.
base // { documentation = documentation; }
);
devShells = forAllSystems (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
android-sdk = inputs.android-nixpkgs.sdk.${system} (
sdkPkgs: with sdkPkgs; [
build-tools-36-0-0
build-tools-35-0-0
build-tools-34-0-0
cmdline-tools-latest
platform-tools
platforms-android-36
platforms-android-34
platforms-android-35
]
);
in
{
generate-gradle-metadata = pkgs.mkShell {
name = "gradle-metadata-generator";
buildInputs = [
android-sdk
pkgs.gradle_8
pkgs.jdk21
pkgs.git
];
shellHook = ''
export ANDROID_HOME="${android-sdk}/share/android-sdk"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_NDK_ROOT="$ANDROID_HOME/ndk-bundle"
export JDK_HOME="${pkgs.jdk21.home}"
export JAVA_HOME="${pkgs.jdk21.home}"
# Set up temporary directories
export TMPDIR=$(mktemp -d)
export GRADLE_USER_HOME=$TMPDIR/.gradle
mkdir -p $TMPDIR/aapt2
export AAPT2_DAEMON_DIR=$TMPDIR/aapt2
echo "ANDROID_HOME: $ANDROID_HOME"
echo "JDK_HOME: $JDK_HOME"
echo "GRADLE_OPTS: $GRADLE_OPTS"
echo "Gradle version: $(gradle --version | head -n 3)"
echo ""
echo "To generate the verification-metadata.xml file:"
echo ""
echo " 1. get the gradle task name that generates the release apk, e.g.:"
echo ""
echo " ./gradlew tasks --all | grep assemble"
echo ""
echo " (look for the one with 'Release' in the name)"
echo ""
echo " 2. gradle -M sha256 assemblePlayRelease -Dorg.gradle.project.android.aapt2FromMavenOverride=\$ANDROID_HOME/build-tools/36.0.0/aapt2"
echo ""
'';
};
}
);
};
}