first release 0.0.0.2
This commit is contained in:
Executable
+201
@@ -0,0 +1,201 @@
|
||||
#!/bin/bash
|
||||
# ════════════════════════════════════════════════
|
||||
# ARIA Cockpit — Android Build Script
|
||||
# Verwendung: ./build.sh [debug|release]
|
||||
# ════════════════════════════════════════════════
|
||||
|
||||
set -e
|
||||
|
||||
MODE="${1:-release}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# ── Farben ────────────────────────────────────
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${YELLOW}╔═══════════════════════════════════════╗${NC}"
|
||||
echo -e "${YELLOW}║ ARIA Cockpit — Android Build ║${NC}"
|
||||
echo -e "${YELLOW}║ Modus: ${MODE}$(printf '%*s' $((27 - ${#MODE})) '')║${NC}"
|
||||
echo -e "${YELLOW}╚═══════════════════════════════════════╝${NC}"
|
||||
|
||||
# ── Voraussetzungen prüfen ────────────────────
|
||||
MISSING=0
|
||||
|
||||
check_cmd() {
|
||||
if ! command -v "$1" &> /dev/null; then
|
||||
echo -e " ${RED}✗ $1 nicht gefunden${NC}"
|
||||
MISSING=1
|
||||
else
|
||||
echo -e " ${GREEN}✓${NC} $1 — $(command -v "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}Voraussetzungen prüfen...${NC}"
|
||||
check_cmd node
|
||||
check_cmd npm
|
||||
check_cmd npx
|
||||
check_cmd java
|
||||
|
||||
if [ "$MISSING" -eq 1 ]; then
|
||||
echo ""
|
||||
echo -e "${RED}Fehlende Abhängigkeiten! Bitte zuerst ausführen:${NC}"
|
||||
echo -e "${RED} ./setup.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── JDK 17 erzwingen (AGP 8.1 + Gradle 8.3 braucht JDK 17, nicht 21+) ──
|
||||
echo ""
|
||||
echo -e "${CYAN}Java-Version prüfen...${NC}"
|
||||
|
||||
CURRENT_JAVA_MAJOR=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | cut -d'.' -f1)
|
||||
|
||||
if [ "$CURRENT_JAVA_MAJOR" -gt 17 ] 2>/dev/null; then
|
||||
echo -e " ${YELLOW}JDK $CURRENT_JAVA_MAJOR erkannt — React Native 0.73 braucht JDK 17${NC}"
|
||||
echo -e " ${YELLOW}Suche JDK 17...${NC}"
|
||||
|
||||
JDK17_FOUND=""
|
||||
for JDK_PATH in \
|
||||
/usr/lib/jvm/java-17-openjdk-amd64 \
|
||||
/usr/lib/jvm/temurin-17-jdk-amd64 \
|
||||
/usr/lib/jvm/java-17-openjdk \
|
||||
/usr/lib/jvm/jdk-17 \
|
||||
/usr/lib/jvm/zulu-17 \
|
||||
/opt/java/jdk-17 \
|
||||
/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home \
|
||||
/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home; do
|
||||
if [ -x "$JDK_PATH/bin/java" ]; then
|
||||
JDK17_FOUND="$JDK_PATH"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$JDK17_FOUND" ] && [ -x "$JDK17_FOUND/bin/jlink" ]; then
|
||||
export JAVA_HOME="$JDK17_FOUND"
|
||||
export PATH="$JAVA_HOME/bin:$PATH"
|
||||
echo -e " ${GREEN}✓${NC} JAVA_HOME → $JDK17_FOUND"
|
||||
elif [ -n "$JDK17_FOUND" ]; then
|
||||
echo -e " ${RED}JDK 17 gefunden aber unvollständig (jlink fehlt — nur JRE installiert)${NC}"
|
||||
echo -e " ${RED}Installieren: sudo apt install openjdk-17-jdk${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e " ${RED}JDK 17 nicht gefunden!${NC}"
|
||||
echo -e " ${RED}Installieren: sudo apt install openjdk-17-jdk${NC}"
|
||||
echo -e " ${RED}Oder: ./setup.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e " ${GREEN}✓${NC} JDK $CURRENT_JAVA_MAJOR — passt"
|
||||
fi
|
||||
|
||||
# ── Natives Android-Projekt prüfen ───────────
|
||||
if [ ! -f "android/gradlew" ]; then
|
||||
echo ""
|
||||
echo -e "${RED}Kein natives Android-Projekt gefunden (android/gradlew fehlt).${NC}"
|
||||
echo -e "${RED}Bitte zuerst ausführen:${NC}"
|
||||
echo -e "${RED} ./setup.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── ANDROID_HOME prüfen / automatisch finden ─
|
||||
if [ -z "$ANDROID_HOME" ] && [ -z "$ANDROID_SDK_ROOT" ]; then
|
||||
for SDK_PATH in \
|
||||
"$HOME/Android/Sdk" \
|
||||
"$HOME/android-sdk" \
|
||||
"/opt/android-sdk" \
|
||||
"$HOME/Library/Android/sdk"; do
|
||||
if [ -d "$SDK_PATH" ]; then
|
||||
export ANDROID_HOME="$SDK_PATH"
|
||||
export ANDROID_SDK_ROOT="$SDK_PATH"
|
||||
echo -e " ${YELLOW}ANDROID_HOME automatisch gefunden: ${SDK_PATH}${NC}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$ANDROID_HOME" ]; then
|
||||
echo -e " ${YELLOW}Warnung: ANDROID_HOME nicht gesetzt.${NC}"
|
||||
echo -e " ${YELLOW}Falls der Build fehlschlägt: ./setup.sh ausführen${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── Node Dependencies ────────────────────────
|
||||
echo ""
|
||||
echo -e "${GREEN}[1/3] Node Dependencies...${NC}"
|
||||
if [ ! -d "node_modules" ]; then
|
||||
npm install
|
||||
elif [ "package.json" -nt "node_modules" ]; then
|
||||
echo " package.json geändert — update..."
|
||||
npm install
|
||||
else
|
||||
echo " node_modules aktuell"
|
||||
fi
|
||||
|
||||
# ── File-Descriptor-Limit erhöhen (Metro braucht viele offene Dateien) ──
|
||||
CURRENT_ULIMIT=$(ulimit -n)
|
||||
if [ "$CURRENT_ULIMIT" -lt 8192 ] 2>/dev/null; then
|
||||
ulimit -n 8192 2>/dev/null || ulimit -n 4096 2>/dev/null || true
|
||||
NEW_ULIMIT=$(ulimit -n)
|
||||
if [ "$NEW_ULIMIT" -gt "$CURRENT_ULIMIT" ]; then
|
||||
echo -e " ${YELLOW}ulimit -n: ${CURRENT_ULIMIT} → ${NEW_ULIMIT} (Metro braucht viele offene Dateien)${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── APK bauen ─────────────────────────────────
|
||||
echo ""
|
||||
echo -e "${GREEN}[2/3] APK bauen (${MODE})...${NC}"
|
||||
|
||||
cd android
|
||||
chmod +x gradlew 2>/dev/null || true
|
||||
|
||||
# CI=true verhindert dass Metro einen File-Watcher startet (EMFILE-Fix)
|
||||
export CI=true
|
||||
|
||||
if [ "$MODE" = "debug" ]; then
|
||||
./gradlew assembleDebug
|
||||
APK_PATH="app/build/outputs/apk/debug/app-debug.apk"
|
||||
else
|
||||
./gradlew assembleRelease
|
||||
APK_PATH="app/build/outputs/apk/release/app-release.apk"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
||||
# ── Ergebnis ──────────────────────────────────
|
||||
echo ""
|
||||
if [ -f "android/$APK_PATH" ]; then
|
||||
APK_SIZE=$(du -h "android/$APK_PATH" | cut -f1)
|
||||
NICE_NAME="ARIA-Cockpit-${MODE}.apk"
|
||||
cp "android/$APK_PATH" "$NICE_NAME"
|
||||
|
||||
echo -e "${GREEN}[3/3] Fertig!${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}╔═══════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}║ APK erfolgreich gebaut! ║${NC}"
|
||||
echo -e "${GREEN}╠═══════════════════════════════════════════════╣${NC}"
|
||||
echo -e "${GREEN}║${NC} Datei: ${NICE_NAME}"
|
||||
echo -e "${GREEN}║${NC} Größe: ${APK_SIZE}"
|
||||
echo -e "${GREEN}║${NC} Pfad: android/${APK_PATH}"
|
||||
echo -e "${GREEN}╚═══════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo "Installieren:"
|
||||
echo " adb install $NICE_NAME"
|
||||
echo ""
|
||||
echo "Oder APK direkt aufs Handy kopieren."
|
||||
else
|
||||
echo -e "${RED}╔═══════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${RED}║ Build fehlgeschlagen! ║${NC}"
|
||||
echo -e "${RED}╠═══════════════════════════════════════════════╣${NC}"
|
||||
echo -e "${RED}║${NC} APK nicht gefunden."
|
||||
echo -e "${RED}║${NC} Prüfe die Gradle-Ausgabe oben."
|
||||
echo -e "${RED}║${NC}"
|
||||
echo -e "${RED}║${NC} Häufige Ursachen:"
|
||||
echo -e "${RED}║${NC} - Android SDK fehlt → ./setup.sh"
|
||||
echo -e "${RED}║${NC} - JDK 17 fehlt → ./setup.sh"
|
||||
echo -e "${RED}║${NC} - Signing Config fehlt (Release-Build)"
|
||||
echo -e "${RED}╚═══════════════════════════════════════════════╝${NC}"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user