This repository has no description
2.1 kB
67 lines
1{
2 stdenvNoCC,
3 androidenv,
4 fetchurl,
5 jdk17_headless,
6 unzip,
7 zip,
8 icon,
9 # CI sets them per run; Android only installs updates with a higher versionCode.
10 versionCode ? 1,
11 versionName ? "1",
12}:
13let
14 sdk = androidenv.composeAndroidPackages {
15 platformVersions = [ "36" ];
16 buildToolsVersions = [ "36.0.0" ];
17 includeEmulator = false;
18 includeSystemImages = false;
19 includeNDK = false;
20 };
21 sdkRoot = "${sdk.androidsdk}/libexec/android-sdk";
22 buildTools = "${sdkRoot}/build-tools/36.0.0";
23 androidJar = "${sdkRoot}/platforms/android-36/android.jar";
24 browser = fetchurl {
25 url = "https://dl.google.com/android/maven2/androidx/browser/browser/1.10.0/browser-1.10.0.aar";
26 hash = "sha256-+0DR7l/ZEMnREiAIaKlTQVanqZmrwo+7PGgVouOsUVA=";
27 };
28in
29# Unsigned release APK; tools/hermes-voice/flake-module.nix has the signer.
30# Only androidx.browser's classes go in: the parts used here need none of its
31# dependencies.
32stdenvNoCC.mkDerivation {
33 pname = "hermes-voice-android";
34 version = versionName;
35 src = ./.;
36 nativeBuildInputs = [
37 jdk17_headless
38 unzip
39 zip
40 ];
41 buildPhase = ''
42 runHook preBuild
43 unzip -q ${browser} classes.jar -d browser
44
45 mkdir -p res/mipmap-xxxhdpi
46 cp ${icon}/icon-192.png res/mipmap-xxxhdpi/ic_launcher.png
47 ${buildTools}/aapt2 compile --dir res -o res.zip
48 ${buildTools}/aapt2 link -o unsigned.apk -I ${androidJar} \
49 --manifest AndroidManifest.xml res.zip \
50 --min-sdk-version 29 --target-sdk-version 36 \
51 --version-code ${toString versionCode} --version-name ${versionName}
52
53 javac -source 8 -target 8 -Xlint:-options -encoding UTF-8 \
54 -bootclasspath ${androidJar} -cp browser/classes.jar \
55 -d classes $(find src -name '*.java')
56 ${buildTools}/d8 --release --min-api 29 --lib ${androidJar} --output . \
57 $(find classes -name '*.class') browser/classes.jar
58
59 touch -d @315532800 classes.dex
60 TZ=UTC zip -X -D unsigned.apk classes.dex
61 runHook postBuild
62 '';
63 installPhase = ''
64 install -Dm444 unsigned.apk $out/hermes-voice-android-unsigned.apk
65 '';
66 passthru = { inherit buildTools; };
67}