Загрузка данных


<# 
.SYNOPSIS
    Автоматическая установка APK-файлов на Android-устройства (Aquarius) через ADB
.DESCRIPTION
    Профессиональный DevOps-скрипт для массовой установки приложений
#>

# ==================== НАСТРОЙКИ ====================
$ScriptVersion = "2.1"
$LogPath = ".\logs\install_log_$(Get-Date -Format 'yyyy-MM-dd_HH-mm-ss').log"
$ApkFolder = ".\apk_files"

# Цвета для красивого вывода
function Write-Color {
    param([string]$Message, [string]$Color = "White")
    $colors = @{
        "Green"  = "Green"
        "Red"    = "Red"
        "Yellow" = "Yellow"
        "Cyan"   = "Cyan"
        "Magenta"= "Magenta"
    }
    Write-Host $Message -ForegroundColor $colors[$Color]
}

# Логирование
function Write-Log {
    param([string]$Message)
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    "$timestamp | $Message" | Out-File -FilePath $LogPath -Append -Encoding UTF8
    Write-Host "$timestamp | $Message"
}

# Создание папок
if (-not (Test-Path ".\logs")) { New-Item -ItemType Directory -Path ".\logs" | Out-Null }
if (-not (Test-Path $ApkFolder)) {
    Write-Color "ОШИБКА: Папка $ApkFolder не найдена!" "Red"
    Write-Log "КРИТИЧЕСКАЯ ОШИБКА: Папка apk_files отсутствует"
    Pause
    exit 1
}

Write-Color "=== Android APK Mass Installer v$ScriptVersion ===" "Cyan"
Write-Log "=== Запуск установки v$ScriptVersion ==="

# ==================== ПРОВЕРКА ADB ====================
function Test-ADB {
    $adbPath = (Get-Command adb -ErrorAction SilentlyContinue).Path
    if (-not $adbPath) {
        Write-Color "ОШИБКА: ADB не найден в PATH!" "Red"
        Write-Log "КРИТИЧЕСКАЯ ОШИБКА: ADB не найден"
        Write-Host "`nУстановите Platform-Tools и добавьте в PATH" -ForegroundColor Yellow
        Pause
        exit 1
    }
    Write-Color "✓ ADB найден: $adbPath" "Green"
    return $true
}

# ==================== ПРОВЕРКА УСТРОЙСТВ ====================
function Get-ConnectedDevices {
    $devices = adb devices 2>&1 | Select-String -Pattern '^\S+\s+device' | ForEach-Object { $_.ToString().Split()[0] }
    return $devices
}

# ==================== ОСНОВНАЯ ЛОГИКА ====================
Test-ADB

Write-Color "`nПоиск подключенных устройств..." "Cyan"
$devices = Get-ConnectedDevices

if ($devices.Count -eq 0) {
    Write-Color "ОШИБКА: Устройства не найдены!" "Red"
    Write-Log "КРИТИЧЕСКАЯ ОШИБКА: Нет подключенных устройств"
    Write-Host "`nПодключите планшет и разрешите отладку USB." -ForegroundColor Yellow
    Pause
    exit 1
}

Write-Color "✓ Найдено устройств: $($devices.Count)" "Green"
$devices | ForEach-Object { Write-Color "   → $_" "White" }

# Поиск APK
$apks = Get-ChildItem -Path $ApkFolder -Filter "*.apk" -File
if ($apks.Count -eq 0) {
    Write-Color "ОШИБКА: В папке $ApkFolder не найдено .apk файлов!" "Red"
    Write-Log "КРИТИЧЕСКАЯ ОШИБКА: Нет APK файлов"
    Pause
    exit 1
}

Write-Color "`nНайдено APK-файлов: $($apks.Count)" "Green"
$apks | ForEach-Object { Write-Color "   → $($_.Name)" "White" }

Write-Log "Начало установки $($apks.Count) приложений на $($devices.Count) устройств"

# Установка
$successCount = 0
$totalCount = $apks.Count * $devices.Count

foreach ($device in $devices) {
    Write-Color "`nУстановка на устройство: $device" "Magenta"
    Write-Log "=== Начало работы с устройством $device ==="

    foreach ($apk in $apks) {
        $apkName = $apk.Name
        Write-Color "Установка: $apkName" "Cyan"
        
        $result = adb -s $device install -r -d -g "$($apk.FullName)" 2>&1
        $exitCode = $LASTEXITCODE

        if ($exitCode -eq 0 -and $result -match "Success") {
            Write-Color "✓ Успешно: $apkName" "Green"
            Write-Log "УСПЕХ: $apkName на $device"
            $successCount++
        }
        else {
            Write-Color "✗ Ошибка: $apkName" "Red"
            Write-Log "ОШИБКА: $apkName на $device | $result"
            Write-Host $result -ForegroundColor DarkRed
        }
    }
}

# ==================== ИТОГОВЫЙ ОТЧЁТ ====================
Write-Color "`n" "Cyan"
Write-Color "╔══════════════════════════════════════╗" "Cyan"
Write-Color "║          ИТОГОВЫЙ ОТЧЁТ              ║" "Cyan"
Write-Color "╚══════════════════════════════════════╝" "Cyan"

Write-Color "Установлено успешно: $successCount из $totalCount" "Green"
Write-Log "ИТОГ: $successCount/$totalCount успешных установок"

if ($successCount -eq $totalCount) {
    Write-Color "✅ ВСЕ ПРИЛОЖЕНИЯ УСТАНОВЛЕНЫ УСПЕШНО!" "Green"
}
else {
    Write-Color "⚠️ Установка завершена с ошибками" "Yellow"
}

Write-Color "`nЛог сохранён: $LogPath" "White"
Write-Color "`nНажмите любую клавишу для выхода..." "Cyan"
Pause