#!/data/data/com.termux/files/usr/bin/bash set -euo pipefail PREFIX="${PREFIX:-/data/data/com.termux/files/usr}" BASE_URL="https://openjdk-8-glibc.pages.dev" PKG_NAME="openjdk-8-glibc" info() { echo "[+] $*" } warn() { echo "[!] $*" >&2 } error() { echo "[!] $*" >&2 exit 1 } echo echo "======================================================================" echo " openjdk-8-glibc installer" echo " Java 8 nativo no Termux, sem proot-distro." echo "======================================================================" echo if [ ! -d "$PREFIX" ]; then error "PREFIX do Termux não encontrado: $PREFIX" fi if [ ! -x "$PREFIX/bin/pkg" ]; then error "Este instalador deve ser executado dentro do Termux." fi if [ "$(uname -m)" != "aarch64" ]; then error "Este pacote suporta somente AArch64/ARM64." fi info "Termux detectado." info "PREFIX: $PREFIX" info "Arquitetura: $(uname -m)" if ! command -v curl >/dev/null 2>&1; then info "curl não encontrado." info "Instalando curl..." apt update apt install -y curl fi if ! dpkg-query -W -f='${Status}' glibc-repo 2>/dev/null | grep -q "install ok installed"; then info "Instalando glibc-repo..." apt update apt install -y glibc-repo fi info "Atualizando índices..." apt update MISSING=() for package in glibc patchelf; do if ! dpkg-query \ -W \ -f='${Status}' \ "$package" 2>/dev/null \ | grep -q "install ok installed" then MISSING+=("$package") fi done if [ "${#MISSING[@]}" -gt 0 ]; then info "Instalando dependências: ${MISSING[*]}" apt install -y "${MISSING[@]}" else info "Dependências já estão instaladas." fi find_package_url() { local package_url package_url="$( curl -fsSL \ --retry 3 \ --connect-timeout 15 \ --max-time 60 \ "$BASE_URL" 2>/dev/null \ | grep -oE 'https?://[^"'\''<> ]+\.deb' \ | grep -E 'openjdk-8-glibc.*(aarch64|arm64).*\.deb' \ | head -n 1 \ || true )" if [ -n "$package_url" ]; then printf '%s\n' "$package_url" return 0 fi return 1 } info "Procurando pacote OpenJDK 8..." PACKAGE_URL="$(find_package_url || true)" if [ -z "$PACKAGE_URL" ]; then PACKAGE_URL="$( curl -fsSL \ --retry 3 \ --connect-timeout 15 \ --max-time 60 \ "https://api.github.com/repos/NczinX/openjdk-8-glibc/releases/latest" \ | grep -oE 'https://[^"]+\.deb' \ | grep -E '(aarch64|arm64)' \ | head -n 1 \ || true )" fi if [ -z "$PACKAGE_URL" ]; then error "Não foi possível encontrar o pacote .deb do OpenJDK 8." fi info "Pacote encontrado:" echo " $PACKAGE_URL" TMP_DIR="$PREFIX/tmp" mkdir -p "$TMP_DIR" PACKAGE_FILE="$TMP_DIR/${PKG_NAME}.deb" rm -f "$PACKAGE_FILE" info "Baixando pacote..." curl -fsSL \ --retry 3 \ --retry-delay 2 \ --connect-timeout 15 \ --max-time 0 \ -o "$PACKAGE_FILE" \ "$PACKAGE_URL" if [ ! -s "$PACKAGE_FILE" ]; then error "O download do pacote falhou." fi info "Download concluído." info "Instalando pacote..." if ! dpkg -i "$PACKAGE_FILE"; then warn "Existem dependências pendentes." info "Corrigindo dependências..." apt install -f -y info "Finalizando instalação..." dpkg -i "$PACKAGE_FILE" fi rm -f "$PACKAGE_FILE" JAVA8_HOME="$PREFIX/opt/openjdk-8" JAVA8_WRAPPER="$JAVA8_HOME/wrapper-bin" echo echo "======================================================================" echo " Verificando instalação" echo "======================================================================" echo if [ ! -d "$JAVA8_HOME" ]; then error "Java 8 não foi instalado em: $JAVA8_HOME" fi for binary in java javac jar javadoc; do if [ ! -x "$JAVA8_HOME/bin/$binary" ]; then error "$binary não foi encontrado em $JAVA8_HOME/bin/$binary" fi done for binary in java javac jar javadoc; do if [ ! -x "$JAVA8_WRAPPER/$binary" ]; then error "Wrapper $binary não foi encontrado em $JAVA8_WRAPPER/$binary" fi done GLIBC_LOADER="$PREFIX/glibc/lib/ld-linux-aarch64.so.1" if [ ! -x "$GLIBC_LOADER" ]; then error "Loader do glibc não encontrado: $GLIBC_LOADER" fi info "Testando Java 8..." if ! "$JAVA8_WRAPPER/java" -version >/dev/null 2>&1; then error "O Java 8 não conseguiu iniciar pelo wrapper." fi info "Testando javac 8..." if ! "$JAVA8_WRAPPER/javac" -version >/dev/null 2>&1; then error "O javac 8 não conseguiu iniciar pelo wrapper." fi info "Testando jar..." if ! "$JAVA8_WRAPPER/jar" --help >/dev/null 2>&1; then error "O jar 8 não conseguiu iniciar pelo wrapper." fi ALT="$PREFIX/bin/update-alternatives" if [ ! -x "$ALT" ]; then error "update-alternatives não foi encontrado. Instale/atualize termux-tools." fi if ! "$ALT" --query java >/dev/null 2>&1; then info "Java 8 ainda não está registrado no update-alternatives." info "Executando configuração do pacote..." else info "Java 8 já está registrado no update-alternatives." fi echo echo "======================================================================" echo " OpenJDK 8 instalado com sucesso!" echo "======================================================================" echo echo "Java 8:" echo " $JAVA8_HOME" echo echo "Versão instalada:" "$JAVA8_WRAPPER/java" -version 2>&1 "$JAVA8_WRAPPER/javac" -version 2>&1 echo echo "Para ativar o Java 8:" echo echo " update-alternatives --config java" echo echo "Escolha:" echo echo " $JAVA8_WRAPPER/java" echo echo "Depois teste:" echo echo " java -version" echo " javac -version" echo " jar --version" echo echo "Para usar nesta sessão:" echo echo " export JAVA_HOME=\"$JAVA8_HOME\"" echo " export PATH=\"\$JAVA_HOME/bin:\$PATH\"" echo echo "======================================================================" echo " Instalação concluída." echo "======================================================================"