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