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:
@@ -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