Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Thunderbird/scripts/   (Thunderbird Email Client Version 5.6©)  Datei vom 22.9.2026 mit Größe 3 kB image not shown  

Quelle  app_cycler.sh   Sprache: Shell

 

#!/bin/bash

# ==============================================================================
# Android App Cycler
# Opens and closes a specified Android package repeatedly via ADB.
# ==============================================================================

# 1. Validate Arguments
if [ -z "$1" ]; then
    echo "Error: Package name required."
    echo "Usage: ./app_cycler.sh <package_name> [iterations] [load_wait_seconds]"
    echo "Example: ./app_cycler.sh net.thunderbird.android 10 5"
    exit 1
fi

PACKAGE_NAME=$1
ITERATIONS=${2:-5}  # Default to 5 iterations if not specified
LOAD_WAIT=${3:-5}   # Default to 5 seconds wait if not specified
COOLDOWN=2          # Seconds to wait after closing before restarting

echo "Target Package: $PACKAGE_NAME"
echo "Total Cycles:   $ITERATIONS"
echo "Load Wait:      ${LOAD_WAIT}s"
echo "----------------------------------------"

for ((i=1; i<=ITERATIONS; i++)); do
    echo "[Cycle $i/$ITERATIONS] Starting..."

    # Clear logcat buffer to ensure we only catch crashes from this cycle
    adb shell logcat -c

    # 2. Launch the App
    # We use 'monkey' because it automatically finds the launchable intent
    adb shell monkey -p "$PACKAGE_NAME" -c android.intent.category.LAUNCHER 1 > /dev/null 2>& style='color: green'>1

    # 3. Detect "Loaded" State
    echo "  - Waiting for app focus..."
    IS_FOCUSED=false
    HAS_CRASHED=false
    ATTEMPT=0
    MAX_ATTEMPTS=20

    while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
        # Crash Check 1: Scan logcat for Fatal Exceptions linked to the package
        CRASH_LOG=$(adb shell "logcat -d | grep -E 'FATAL EXCEPTION' | grep '$PACKAGE_NAME'")
        if [ -n "$CRASH_LOG" ]; then
            echo "  ! CRASH DETECTED: System reported a fatal exception before UI appeared."
            echo "    Log snippet: $(echo "$CRASH_LOG" | head -n 1)"
            HAS_CRASHED=true
            break
        fi

        # specific grep handles different android versions (mCurrentFocus vs mFocusedApp)
        CURRENT_FOCUS=$(adb shell dumpsys window 2>/dev/null | grep -E 'mCurrentFocus|mFocusedApp')

        if [[ "$CURRENT_FOCUS" == *"$PACKAGE_NAME"* ]]; then
            IS_FOCUSED=true
            break
        fi
        sleep 1
        ((ATTEMPT++))
    done

    if [ "$IS_FOCUSED" = true ]; then
        echo "  - App focused. Monitoring stability for ${LOAD_WAIT}s..."

        # Loop for load wait to catch crashes during load (Crash Check 2)
        for ((w=0; w<LOAD_WAIT; w++)); do
            sleep 1
            # Check logcat again for crashes that happen after focus (during load)
            CRASH_LOG=$(adb shell "logcat -d | grep -E 'FATAL EXCEPTION' | grep '$PACKAGE_NAME'")
            if [ -n "$CRASH_LOG" ]; then
                echo "  ! CRASH DETECTED: System reported a fatal exception during load time."
                echo "    Log snippet: $(echo "$CRASH_LOG" | head -n 1)"
                HAS_CRASHED=true
                break
            fi
        done
    elif [ "$HAS_CRASHED" = false ]; then
        echo "  - WARNING: App took too long to focus (no crash log found). Proceeding anyway."
    fi

    # 4. Force Close the App
    echo "  - Closing app..."
    adb shell am force-stop "$PACKAGE_NAME"

    # 5. Cooldown period
    if [ $i -lt $ITERATIONS ]; then
        sleep $COOLDOWN
    fi
    echo ""
done

echo "Done. Completed $ITERATIONS cycles."

Messung
CHZG
889910095

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.