--- name: fedora-android-build-setup description: "How Android builds (Listen, FeeDreader) were made to work on Peter's Fedora 44 laptop — JDK and SDK location, and two stale-state traps" metadata: node_type: memory type: project originSessionId: 0e4bffd6-5847-4b40-9037-6bfb9055e654 modified: 2026-09-21T21:30:50.235Z --- As of 2026-09-21, on Peter's Fedora 44 laptop, building either `listen` or `feedreader` needed setup beyond the CLI's own Node/npm install: - **Fedora 44's repos have no `java-21-openjdk-devel`** (only `java-25-openjdk*` and a `java-latest` 27 EA build) — `sudo dnf install java-21-openjdk-devel` fails with "No match for argument". Worse, Java 25 itself can't run Gradle 8.14.3 (the version this repo is pinned to for Chaquopy compatibility, per `listen/CLAUDE.md`): the bundled Kotlin compiler's `JavaVersion.parse` throws `IllegalArgumentException: 25.0.4.1` — a parser bug, not a real incompatibility Gradle could work around. - **Fix applied**: downloaded Temurin JDK 21 as a portable tarball from Adoptium (`https://api.adoptium.net/v3/binary/latest/21/ga/linux/x64/jdk/hotspot/normal/eclipse`) into `~/.jdks/jdk-21.0.12.1+1` (no sudo needed), and set `org.gradle.java.home=/home/terst/.jdks/jdk-21.0.12.1+1` in `~/.gradle/gradle.properties` (user-global, untracked — applies to every Gradle project for this user, not just Listen). - **No system Android SDK either**: `/opt` isn't writable without sudo, and `/opt/android-sdk` (what both repos' `local.properties` pointed at, a stale value from a previous machine) doesn't exist here. Fix: installed SDK cmdline-tools into `~/Android/Sdk` (Google's `commandlinetools-linux-13114758_latest.zip`), ran `sdkmanager --licenses`, and installed `platform-tools`, `platforms;android-36`, `build-tools;36.0.0`, `ndk;27.2.12479018`. `local.properties` (gitignored, per-machine by design) was updated to `sdk.dir=/home/terst/Android/Sdk`. - **Stale `app/build/` from the old machine**: Chaquopy's `extractDebugPythonBuildPackages` failed following a symlink to `/usr/bin/python3.12`, which doesn't exist on this machine (it has 3.14). `app/build/` is gitignored, pure build output — `rm -rf app/build build` and rebuilding resolved it. If this recurs after a repo copy/sync from another machine, the fix is the same: delete the build directory, don't debug the symlink. **Why this matters**: none of this is written into either repo's CLAUDE.md (correctly — it's machine-specific, not project-specific), so it's easy to silently re-hit and waste a session rediscovering it. If `feedreader` build/test is attempted on this machine and hits the same JDK/SDK/stale-build issues, the fixes above apply identically — check `~/.jdks`, `~/Android/Sdk`, and `~/.gradle/gradle.properties` before reinstalling anything. **How to apply:** before debugging a Gradle failure on this laptop that looks like a JDK, SDK-location, or Python-symlink problem, check whether this setup is still in place first (`~/.jdks`, `~/Android/Sdk`, `~/.gradle/gradle.properties`) rather than re-deriving the fix from scratch.