Automatische App-Installation per ADB — Batch-Deployment auf 75 Geräte

Einzeln Apps auf 75 Geräten installieren? Kannst du knicken. Nach den ersten 20 manuellen Installationen hab ich mir ein Skript geschrieben, das ich heute kaum noch anfasse — es läuft einfach. Hier zeige ich dir, wie du Apps im Batch auf dutzende Geräte gleichzeitig bringst.

Das Grundprinzip: ADB install über TCP

Alle meine Geräte sind per ADB-TCP verbunden, also funktioniert eine Installation so:

adb -s 10.0.10.11:5555 install meine-app.apk

Für 75 Geräte wird das schnell unübersichtlich. Also: Liste der IPs + for-loop + parallel.

Mein Batch-Install-Skript

#!/bin/bash
# batch-install.sh — Installiert eine APK auf allen Farm-Geräten
APK="$1"
DEVICES_FILE="/opt/phone-farm/devices.txt"
FAILED_LOG="/opt/phone-farm/failed-installs.log"

if [ ! -f "$APK" ]; then
    echo "Fehler: APK-Datei '$APK' nicht gefunden."
    exit 1
fi

PACKAGE=$(aapt dump badging "$APK" | grep package: | cut -d"'" -f2)
echo "→ Installiere $PACKAGE auf allen Geräten..."

> "$FAILED_LOG"  # Log leeren

install_on_device() {
    local IP="$1"
    echo -n "  $IP ... "
    if adb -s "$IP:5555" install -r "$APK" &>/dev/null; then
        echo "OK"
    else
        echo "FAILED"
        echo "$IP" >> "$FAILED_LOG"
    fi
}

# Parallele Installation, maximal 10 gleichzeitig
cat "$DEVICES_FILE" | xargs -P 10 -I {} bash -c 'install_on_device "$@"' _ {}

FAILED=$(wc -l < "$FAILED_LOG")
echo "Fertig. Erfolgreich: $(($(wc -l < "$DEVICES_FILE") - FAILED)), Fehlgeschlagen: $FAILED"

Wichtig: -r flag bei install — das ersetzt eine existierende Installation, ohne dass du sie vorher deinstallieren musst. Ohne -r würde das Skript bei bereits installierten Apps abbrechen.

Pro-Tipp: xargs -P 10 limitiert auf 10 parallele ADB-Verbindungen. Mehr als 15 gleichzeitige ADB-Sessions überlasten selbst den OPNsense-Router. Ich hab's mit -P 50 probiert — nach 10 Sekunden war die Hälfte der Verbindungen abgebrochen. -P 10 ist der Sweetspot auf meinem Setup.

App-Deinstallation im Batch

Genauso wichtig wie installieren: Apps sauber und vollständig entfernen:

#!/bin/bash
# batch-uninstall.sh
PACKAGE="$1"
DEVICES_FILE="/opt/phone-farm/devices.txt"

while read IP; do
    echo -n "$IP ... "
    # Erst für aktuellen User deinstallieren
    adb -s "$IP:5555" uninstall "$PACKAGE" 2>/dev/null
    # Dann als System-App versuchen (Root)
    adb -s "$IP:5555" shell su -c "pm uninstall $PACKAGE" 2>/dev/null
    echo "done"
done < "$DEVICES_FILE"

Split-APKs (APKM, XAPK, APKS)

Moderne Apps kommen oft als Split-APKs. ADB kann die seit Platform Tools 30 nativ installieren:

# APKS-Datei (Bundle-Format)
adb install-multiple app.APKS

# Oder einzelne Split-APKs:
adb install-multiple base.apk split_config.armeabi_v7a.apk

Play Store Alternativen für die Farm

Den Google Play Store auf 75 Geräten zu nutzen ist Wahnsinn — jede App-Installation triggert Play Protect, Updates laufen asynchron, und Google sieht 75 Installationen von der gleichen IP als verdächtig. Meine Alternativen:

Aurora Store

Open-Source Play-Store-Client, der anonyme Accounts nutzt. Installation per F-Droid oder APK. Vorteil: Kein Google-Account nötig, keine Device-Fingerprints. Nachteil: Manchmal Rate-limited von Google. Trotzdem meine erste Wahl.

APKMirror / APKPure

Für Apps, die ich oft installiere, lade ich die APK einmal runter und verteile sie per Batch-Skript. Spart Bandbreite und ist zuverlässiger als der Play Store.

Eigener APK-Server

Für interne Apps hab ich einen simplen HTTP-Server, von dem die Geräte per wget + pm install ziehen:

adb shell wget -O /data/local/tmp/app.apk http://10.0.1.1:8080/app.apk
adb shell pm install /data/local/tmp/app.apk

Fehlerbehandlung: Was tun bei "INSTALL_FAILED"?

Die häufigsten ADB-Install-Fehler und ihre Lösungen:

Monitoring: Wie du verifizierst, dass die Installation erfolgreich war

# Check ob ein Package installiert ist:
adb -s $IP:5555 shell pm list packages | grep com.package.name

# Version checken:
adb -s $IP:5555 shell dumpsys package com.package.name | grep versionName

Fazit: Automatische App-Installation per ADB ist einer der größten Zeitgewinne in der Phone Farm. Mein Batch-Skript installiert eine App in 3 Minuten auf 75 Geräten — manuell würde das 2 Stunden dauern.