Initial MVP
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
# Reproducible build of the debug APK, written the way a nixpkgs package would be.
|
||||
#
|
||||
# Two hard problems this file solves:
|
||||
# 1. The Android SDK -> supplied via `androidSdk` (built by androidenv in flake.nix)
|
||||
# and exposed through ANDROID_HOME.
|
||||
# 2. Gradle's network -> `gradle` with `mitmCache` intercepts Gradle's HTTP(S)
|
||||
# dependency fetches traffic and replays it from a hash-locked `deps.json`,
|
||||
# so the build itself runs fully offline & reproducibly.
|
||||
#
|
||||
# Regenerate deps.json whenever dependencies change:
|
||||
# nix build .#default.mitmCache.updateScript && ./result
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
gradle,
|
||||
makeWrapper,
|
||||
androidSdk,
|
||||
androidHome,
|
||||
buildToolsVersion ? "35.0.0",
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "music-remote";
|
||||
version = "0.1.0";
|
||||
|
||||
src = ./.;
|
||||
|
||||
nativeBuildInputs = [
|
||||
gradle
|
||||
androidSdk
|
||||
makeWrapper
|
||||
];
|
||||
|
||||
ANDROID_HOME = androidHome;
|
||||
# Some tooling still reads the deprecated variable; set both to be safe.
|
||||
ANDROID_SDK_ROOT = androidHome;
|
||||
|
||||
# Gradle downloads a prebuilt aapt2 from Maven that isn't patched for NixOS's
|
||||
# loader. Point AGP at the aapt2 that androidenv already patched instead.
|
||||
gradleFlags = [
|
||||
"-Pandroid.aapt2FromMavenOverride=${androidHome}/build-tools/${buildToolsVersion}/aapt2"
|
||||
];
|
||||
|
||||
# Build the (unsigned) debug APK. `assembleRelease` would additionally need a
|
||||
# signing keystore, which is out of scope for a hello-world.
|
||||
gradleBuildTask = "assembleDebug";
|
||||
|
||||
# Run the JVM unit tests as the derivation's check phase.
|
||||
doCheck = true;
|
||||
gradleCheckTask = "testDebugUnitTest";
|
||||
|
||||
mitmCache = gradle.fetchDeps {
|
||||
# `pkg` (rather than the manual's `inherit pname`) is what an out-of-tree
|
||||
# flake package must pass: the manual's shorthand resolves `pkgs.<pname>`,
|
||||
# which only exists for packages that live inside nixpkgs itself.
|
||||
pkg = finalAttrs.finalPackage;
|
||||
data = ./deps.json;
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -Dm644 app/build/outputs/apk/debug/app-debug.apk \
|
||||
"$out/music-remote.apk"
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Hello-world Kotlin / Jetpack Compose (Material 3) Android app";
|
||||
platforms = lib.platforms.linux;
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
})
|
||||
Reference in New Issue
Block a user