Android env: require JDK 21/17 by version, since Studio now bundles JBR 25
Check each JDK candidate's major version instead of assuming Android Studio's
JBR is 21, look for Adoptium temurin-{21,17}-jdk (Fedora 44 dropped
java-21-openjdk), and propagate android-env.sh failures to scripts that
source it so fdroid-publish.sh stops before building.
This commit is contained in:
@@ -474,9 +474,10 @@ prints the three environment variables to export (`ANDROID_HOME`, `NDK_HOME`,
|
||||
> Android's system libsqlite3 either — the card schema needs FTS5 with the
|
||||
> `trigram` tokenizer, which platform SQLite often lacks.
|
||||
|
||||
> **Why `JAVA_HOME`?** Gradle/AGP reject very new JDKs. The script prefers
|
||||
> Android Studio's bundled JetBrains Runtime (JDK 21), which needs no extra
|
||||
> install.
|
||||
> **Why `JAVA_HOME`?** Gradle/AGP reject very new JDKs. The script uses
|
||||
> Android Studio's bundled JetBrains Runtime when it's JDK 21 or 17, but recent
|
||||
> Studio releases bundle JDK 25 and Fedora 44 no longer packages 21, so you may
|
||||
> need `sudo dnf install temurin-21-jdk` (from the Adoptium repo).
|
||||
|
||||
### Build and run
|
||||
|
||||
|
||||
@@ -36,19 +36,24 @@ _mtgc_android_env() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# --- JDK: Gradle/AGP reject very new JDKs; prefer Studio's bundled JBR 21 ---
|
||||
# --- JDK: Gradle/AGP reject very new JDKs. Studio's bundled JBR is preferred,
|
||||
# but newer Studio releases bundle JBR 25, so check each candidate's version.
|
||||
for d in \
|
||||
"$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/jbr" \
|
||||
"$HOME/.local/share/JetBrains/Toolbox/apps/android-studio"/*/jbr \
|
||||
"$HOME/android-studio/jbr" \
|
||||
/opt/android-studio/jbr \
|
||||
/usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21-openjdk-* \
|
||||
/usr/lib/jvm/java-17-openjdk /usr/lib/jvm/java-17-openjdk-*
|
||||
/usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21-openjdk-* /usr/lib/jvm/temurin-21-jdk* \
|
||||
/usr/lib/jvm/java-17-openjdk /usr/lib/jvm/java-17-openjdk-* /usr/lib/jvm/temurin-17-jdk*
|
||||
do
|
||||
if [ -x "$d/bin/javac" ]; then jdk="$d"; break; fi
|
||||
[ -x "$d/bin/javac" ] || continue
|
||||
case "$(sed -n 's/^JAVA_VERSION="\([0-9]*\).*/\1/p' "$d/release" 2>/dev/null)" in
|
||||
21 | 17) jdk="$d"; break ;;
|
||||
esac
|
||||
done
|
||||
if [ -z "$jdk" ]; then
|
||||
echo "android-env: no JDK 21/17 found (Gradle rejects the system default)" >&2
|
||||
echo "android-env: no JDK 21/17 found (Gradle rejects newer ones, incl. Studio's JBR 25)" >&2
|
||||
echo "android-env: sudo dnf install temurin-21-jdk" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -67,4 +72,7 @@ _mtgc_android_env() {
|
||||
}
|
||||
|
||||
_mtgc_android_env
|
||||
_mtgc_rc=$?
|
||||
unset -f _mtgc_android_env
|
||||
# Pass the failure on so `set -e` scripts that source this stop here.
|
||||
return "$_mtgc_rc" 2>/dev/null || exit "$_mtgc_rc"
|
||||
|
||||
@@ -69,30 +69,37 @@ fi
|
||||
# Fedora's default JDK is newer than AGP/Gradle supports (a JDK 25 default fails
|
||||
# the Gradle build outright), so pin JAVA_HOME to 21 (or 17) for Android work.
|
||||
#
|
||||
# Android Studio's bundled JetBrains Runtime is preferred: it's the same JDK
|
||||
# Studio itself runs Gradle with, so it's guaranteed AGP-compatible, and it
|
||||
# needs no system package install. Note we test for bin/javac specifically —
|
||||
# a JRE-only or leftover-empty /usr/lib/jvm directory must not count.
|
||||
# Android Studio's bundled JetBrains Runtime is preferred when it's 21 or 17,
|
||||
# but newer Studio releases bundle JBR 25, so every candidate's major version is
|
||||
# checked (from its `release` file) rather than assumed. Note we test for
|
||||
# bin/javac specifically — a JRE-only or leftover-empty /usr/lib/jvm directory
|
||||
# must not count.
|
||||
|
||||
# Major version of the JDK at $1 if it's one Gradle accepts (21 or 17), else fail.
|
||||
jdk_ok() {
|
||||
[ -x "$1/bin/javac" ] || return 1
|
||||
case "$(sed -n 's/^JAVA_VERSION="\([0-9]*\).*/\1/p' "$1/release" 2>/dev/null)" in
|
||||
21 | 17) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
find_jdk() {
|
||||
# Explicit override wins.
|
||||
if [ -n "${ANDROID_JAVA_HOME:-}" ] && [ -x "${ANDROID_JAVA_HOME}/bin/javac" ]; then
|
||||
echo "$ANDROID_JAVA_HOME"; return 0
|
||||
fi
|
||||
# Android Studio's bundled JBR (Toolbox or standalone install locations).
|
||||
# Android Studio's bundled JBR (Toolbox or standalone install locations),
|
||||
# then a system JDK (Fedora or Adoptium packages) of an accepted version.
|
||||
for d in \
|
||||
"$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/jbr" \
|
||||
"$HOME/.local/share/JetBrains/Toolbox/apps/android-studio"/*/jbr \
|
||||
"$HOME/android-studio/jbr" \
|
||||
/opt/android-studio/jbr
|
||||
/opt/android-studio/jbr \
|
||||
/usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21-openjdk-* /usr/lib/jvm/temurin-21-jdk* \
|
||||
/usr/lib/jvm/java-17-openjdk /usr/lib/jvm/java-17-openjdk-* /usr/lib/jvm/temurin-17-jdk*
|
||||
do
|
||||
[ -x "$d/bin/javac" ] && { echo "$d"; return 0; }
|
||||
done
|
||||
# Fall back to a system JDK of an accepted major version.
|
||||
for v in 21 17; do
|
||||
for d in "/usr/lib/jvm/java-${v}-openjdk" /usr/lib/jvm/java-${v}-openjdk-*; do
|
||||
[ -x "$d/bin/javac" ] && { echo "$d"; return 0; }
|
||||
done
|
||||
jdk_ok "$d" && { echo "$d"; return 0; }
|
||||
done
|
||||
return 1
|
||||
}
|
||||
@@ -101,9 +108,8 @@ if JDK_PATH="$(find_jdk)"; then
|
||||
export JAVA_HOME="$JDK_PATH"
|
||||
info "Android JDK: $JAVA_HOME ($("$JAVA_HOME/bin/java" -version 2>&1 | head -1))"
|
||||
else
|
||||
err "No JDK 21 or 17 found (Gradle rejects the newer system default)."
|
||||
err "Easiest fix: install Android Studio (its bundled JBR is used automatically),"
|
||||
err "or: sudo dnf install java-21-openjdk-devel"
|
||||
err "No JDK 21 or 17 found (Gradle rejects newer ones, including recent Android Studio's JBR 25)."
|
||||
err "Fix: sudo dnf install temurin-21-jdk (Adoptium repo; Fedora 44 dropped java-21-openjdk)"
|
||||
err "or: ANDROID_JAVA_HOME=/path/to/jdk ./scripts/android-setup.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user