Record project continuation changes
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
#requires -Version 5
|
||||
|
||||
param(
|
||||
[string]$RepoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path,
|
||||
[string]$AndroidHome = $env:ANDROID_HOME,
|
||||
[switch]$SetEnvironment,
|
||||
[switch]$InstallMissing
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Fail([string]$Message) {
|
||||
Write-Error $Message
|
||||
exit 1
|
||||
}
|
||||
|
||||
function Get-CommandPath([string]$Name) {
|
||||
$cmd = Get-Command $Name -ErrorAction SilentlyContinue
|
||||
if ($null -eq $cmd) { return $null }
|
||||
return $cmd.Source
|
||||
}
|
||||
|
||||
function Parse-AndroidCompileVersion([string]$AndroidProjectDir) {
|
||||
$buildFile = Join-Path $AndroidProjectDir "app\build.gradle"
|
||||
if (-not (Test-Path $buildFile)) {
|
||||
return $null
|
||||
}
|
||||
|
||||
$content = Get-Content $buildFile -Raw
|
||||
$compileMatch = [regex]::Match($content, '(?m)^\s*compileSdk\s+([0-9]+)\s*$')
|
||||
if ($compileMatch.Success) { return $compileMatch.Groups[1].Value }
|
||||
return $null
|
||||
}
|
||||
|
||||
function Get-AndroidSdkHome([string]$CandidateHome) {
|
||||
$candidates = @(
|
||||
$CandidateHome,
|
||||
"C:\Android\Sdk",
|
||||
"$env:LOCALAPPDATA\Android\Sdk",
|
||||
"$env:USERPROFILE\AppData\Local\Android\Sdk"
|
||||
) | Where-Object { $_ -and (Test-Path $_) } | Select-Object -Unique
|
||||
|
||||
foreach ($candidate in $candidates) {
|
||||
if ((Test-Path (Join-Path $candidate "platform-tools")) -and (Test-Path (Join-Path $candidate "platforms"))) {
|
||||
return $candidate
|
||||
}
|
||||
}
|
||||
|
||||
if ($candidates.Count -gt 0) { return $candidates[0] }
|
||||
return $null
|
||||
}
|
||||
|
||||
Write-Host "=== RAP: подготовка Android среды сборки ==="
|
||||
$repoRoot = (Resolve-Path $RepoRoot).ProviderPath
|
||||
if (-not $repoRoot) {
|
||||
Fail "RepoRoot не найден: $RepoRoot"
|
||||
}
|
||||
|
||||
$androidProject = Join-Path $repoRoot "clients\android"
|
||||
if (-not (Test-Path $androidProject)) {
|
||||
Fail "Не найден проект clients\android: $androidProject"
|
||||
}
|
||||
|
||||
$compileSdk = Parse-AndroidCompileVersion $androidProject
|
||||
if ([string]::IsNullOrWhiteSpace($compileSdk)) {
|
||||
$compileSdk = "35"
|
||||
}
|
||||
|
||||
$java = Get-CommandPath "java"
|
||||
if (-not $java) {
|
||||
Write-Host "Не найден java в PATH. Установи JDK 17+: winget install EclipseAdoptium.Temurin.17.JDK или choco install temurin17"
|
||||
Fail "Зависимость Java отсутствует."
|
||||
}
|
||||
$javaVersion = (& $java -version 2>&1 | Select-Object -First 1)
|
||||
if ($javaVersion -match 'version\s+"(\d+)\.' ) {
|
||||
$major = [int]$matches[1]
|
||||
Write-Host "Java: $java ($major)"
|
||||
if ($major -lt 17) {
|
||||
Write-Host "Найден Java $major, нужен JDK 17+."
|
||||
Fail "Нужен Java 17 или новее."
|
||||
}
|
||||
} else {
|
||||
Write-Host "Java найден, версия не распознана: $javaVersion"
|
||||
}
|
||||
|
||||
$gradle = Get-CommandPath "gradle"
|
||||
if (-not $gradle) {
|
||||
Write-Host "Не найден gradle в PATH. Установи: winget install Gradle.Gradle / choco install gradle"
|
||||
Fail "Зависимость Gradle отсутствует."
|
||||
}
|
||||
Write-Host "Gradle: $gradle"
|
||||
|
||||
$sdkRoot = Get-AndroidSdkHome $AndroidHome
|
||||
if (-not $sdkRoot) {
|
||||
Write-Host "Не найден Android SDK. Укажи -AndroidHome или установи SDK в C:\Android\Sdk."
|
||||
Fail "Android SDK не найден."
|
||||
}
|
||||
Write-Host "Android SDK: $sdkRoot"
|
||||
|
||||
$cmdlineTools = Join-Path $sdkRoot "cmdline-tools\latest\bin\sdkmanager.bat"
|
||||
if (-not (Test-Path $cmdlineTools)) {
|
||||
Write-Host "Не найден Android cmdline-tools ($cmdlineTools)."
|
||||
Write-Host "Установи Android SDK Command-line Tools через Android Studio или вручную скачай SDK Manager."
|
||||
Fail "cmdline-tools не найдены."
|
||||
}
|
||||
Write-Host "sdkmanager: $cmdlineTools"
|
||||
|
||||
Write-Host "Поддерживаем compileSdk: $compileSdk"
|
||||
|
||||
$requiredComponents = @(
|
||||
"platform-tools",
|
||||
"platforms;android-$compileSdk",
|
||||
"build-tools;35.0.1"
|
||||
)
|
||||
$missingComponents = @()
|
||||
foreach ($component in $requiredComponents) {
|
||||
switch -Regex ($component) {
|
||||
"^platform-tools$" {
|
||||
if (-not (Test-Path (Join-Path $sdkRoot "platform-tools"))) { $missingComponents += $component }
|
||||
}
|
||||
"^platforms;android-(?<api>\d+)$" {
|
||||
if (-not (Test-Path (Join-Path $sdkRoot "platforms\android-$($Matches["api"])"))) { $missingComponents += $component }
|
||||
}
|
||||
"^build-tools;(?<bt>.+)$" {
|
||||
if (-not (Test-Path (Join-Path $sdkRoot "build-tools\$($Matches["bt"])"))) { $missingComponents += $component }
|
||||
}
|
||||
default { }
|
||||
}
|
||||
}
|
||||
|
||||
if ($missingComponents.Count -gt 0) {
|
||||
Write-Host ""
|
||||
Write-Host "Отсутствуют компоненты Android SDK:"
|
||||
$missingComponents | ForEach-Object { Write-Host " - $_" }
|
||||
Write-Host ""
|
||||
$installCmd = "& `"$cmdlineTools`" --sdk_root=`"$sdkRoot`" --install $($missingComponents -join ' ')"
|
||||
Write-Host "Команда установки:"
|
||||
Write-Host " $installCmd"
|
||||
if ($InstallMissing) {
|
||||
Write-Host "Запускаю установку отсутствующих компонентов..."
|
||||
& $cmdlineTools --sdk_root=$sdkRoot --install $missingComponents
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Fail "Не удалось установить компоненты через sdkmanager."
|
||||
}
|
||||
Write-Host "Компоненты установлены."
|
||||
} else {
|
||||
Write-Host "Добавь -InstallMissing для автo-установки."
|
||||
}
|
||||
} else {
|
||||
Write-Host "Все базовые компоненты SDK присутствуют."
|
||||
}
|
||||
|
||||
if ($SetEnvironment) {
|
||||
[Environment]::SetEnvironmentVariable("ANDROID_HOME", $sdkRoot, "User")
|
||||
[Environment]::SetEnvironmentVariable("ANDROID_SDK_ROOT", $sdkRoot, "User")
|
||||
Write-Host "Персистентные переменные ANDROID_HOME/ANDROID_SDK_ROOT сохранены для текущего пользователя."
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Рекомендуется в текущей сессии:"
|
||||
Write-Host " `$env:ANDROID_HOME='$sdkRoot'"
|
||||
Write-Host " `$env:ANDROID_SDK_ROOT='$sdkRoot'"
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Готово. После этого запуск:"
|
||||
Write-Host " pwsh -ExecutionPolicy Bypass -File scripts\\android\\build-android-apk.ps1"
|
||||
Reference in New Issue
Block a user