Загрузка данных
<#
.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