#!/data/data/com.termux/files/usr/bin/bash set -e REPO_URL="https://openjdk-8-glibc.pages.dev" GLIBC_REPO="https://packages-cf.termux.dev/apt/termux-glibc" KEYRING="$PREFIX/etc/apt/trusted.gpg.d/openjdk-8-glibc.gpg" SOURCES_LIST="$PREFIX/etc/apt/sources.list.d/openjdk-8-glibc.list" GLIBC_SOURCES_LIST="$PREFIX/etc/apt/sources.list.d/glibc.list" SOURCES_LINE="deb $REPO_URL/ stable main" GLIBC_SOURCES_LINE="deb $GLIBC_REPO glibc stable" JAVA_HOME_8="$PREFIX/opt/openjdk-8" JAVA_WRAPPER="$JAVA_HOME_8/wrapper-bin/java" JAVAC_WRAPPER="$JAVA_HOME_8/wrapper-bin/javac" is_termux() { case "$PREFIX" in */com.termux/*) return 0 ;; esac return 1 } die() { echo "" echo "[!] $1" echo "" exit 1 } echo "" echo "======================================================================" echo " openjdk-8-glibc installer" echo " Java 8 nativo no Termux, sem proot-distro." echo "======================================================================" echo "" if [ -z "$PREFIX" ] || ! is_termux; then die "Este instalador funciona somente no Termux." fi mkdir -p \ "$PREFIX/etc/apt/sources.list.d" \ "$PREFIX/etc/apt/trusted.gpg.d" if ! command -v curl >/dev/null 2>&1; then echo "[+] Instalando curl..." apt install -y curl || die "Não foi possível instalar o curl." fi if ! command -v gpg >/dev/null 2>&1; then echo "[+] Instalando gnupg..." apt install -y gnupg || die "Não foi possível instalar o gnupg." fi echo "[+] Configurando repositório do OpenJDK 8..." if [ ! -s "$KEYRING" ]; then curl -fsSL "$REPO_URL/public.gpg.key" | gpg --dearmor -o "$KEYRING" || die "Não foi possível instalar a chave GPG." fi printf '%s\n' "$SOURCES_LINE" > "$SOURCES_LIST" echo "[+] Configurando repositório glibc..." if [ -f "$GLIBC_SOURCES_LIST" ]; then if ! grep -Fxq "$GLIBC_SOURCES_LINE" "$GLIBC_SOURCES_LIST"; then printf '%s\n' "$GLIBC_SOURCES_LINE" > "$GLIBC_SOURCES_LIST" fi else printf '%s\n' "$GLIBC_SOURCES_LINE" > "$GLIBC_SOURCES_LIST" fi rm -f "$PREFIX/etc/apt/sources.list.d/termux-glibc.list" echo "[+] Atualizando índices..." apt update -qq || die "Não foi possível atualizar os índices do APT." echo "[+] Verificando dependências pendentes..." if ! dpkg --audit >/dev/null 2>&1; then echo "[+] Existem pacotes incompletos. Corrigindo..." apt-get --fix-broken install -y || die "Não foi possível corrigir as dependências pendentes." fi if ! dpkg-query -W -f='${Status}\n' glibc 2>/dev/null | grep -q '^install ok installed$'; then echo "[+] Instalando/verificando glibc..." apt-get install -y glibc || { echo "[!] A instalação direta do glibc falhou." echo "[+] Tentando corrigir as dependências..." apt-get --fix-broken install -y || die "Não foi possível instalar/corrigir o glibc." } apt-get --fix-broken install -y || die "Não foi possível finalizar o glibc." else echo "[+] glibc já está instalado." fi if ! dpkg-query -W -f='${Status}\n' openjdk-8-glibc 2>/dev/null | grep -q '^install ok installed$'; then echo "[+] Instalando openjdk-8-glibc..." apt-get install -y openjdk-8-glibc || { echo "[!] A instalação do OpenJDK 8 falhou." echo "[+] Tentando corrigir as dependências..." apt-get --fix-broken install -y || die "Não foi possível finalizar o OpenJDK 8." } else echo "[+] openjdk-8-glibc já está instalado." fi echo "[+] Verificando instalação..." if ! dpkg-query -W -f='${Status}\n' openjdk-8-glibc 2>/dev/null | grep -q '^install ok installed$'; then apt-get --fix-broken install -y || die "O pacote openjdk-8-glibc não pôde ser configurado." fi if ! dpkg-query -W -f='${Status}\n' openjdk-8-glibc 2>/dev/null | grep -q '^install ok installed$'; then die "openjdk-8-glibc não foi instalado corretamente." fi if [ ! -x "$JAVA_WRAPPER" ]; then die "Wrapper do Java 8 não encontrado." fi if [ ! -x "$JAVAC_WRAPPER" ]; then die "Wrapper do javac 8 não encontrado." fi if [ ! -x "$PREFIX/bin/update-alternatives" ]; then die "update-alternatives não foi encontrado." fi echo "[+] Registrando Java 8 no update-alternatives..." update-alternatives \ --install "$PREFIX/bin/java" \ java \ "$JAVA_WRAPPER" \ 50 \ --slave "$PREFIX/bin/javac" \ javac \ "$JAVAC_WRAPPER" update-alternatives \ --set java "$JAVA_WRAPPER" || die "Não foi possível ativar o Java 8." if [ -f "$JAVA_HOME_8/etc/profile.d/java.sh" ]; then export JAVA_HOME="$JAVA_HOME_8" else export JAVA_HOME="$JAVA_HOME_8" fi JAVA_PATH="$(command -v java || true)" JAVAC_PATH="$(command -v javac || true)" if [ -z "$JAVA_PATH" ]; then die "O comando java não está disponível." fi if [ -z "$JAVAC_PATH" ]; then die "O comando javac não está disponível." fi if ! java -version >/dev/null 2>&1; then die "Java 8 não conseguiu iniciar." fi if ! javac -version >/dev/null 2>&1; then die "javac 8 não conseguiu iniciar." fi echo "" echo "======================================================================" echo " Instalação concluída com sucesso!" echo "======================================================================" echo "" echo " Java:" java -version echo "" echo " Javac:" javac -version echo "" echo " JAVA_HOME:" echo "$JAVA_HOME" echo "" echo " Java selecionado:" readlink -f "$PREFIX/bin/java" echo "" echo " Para trocar de versão:" echo "" echo " update-alternatives --config java" echo "" echo "======================================================================" echo ""