Files
healer-man/scripts/runAndroidGradle.ps1
2026-09-11 14:26:15 -04:00

69 lines
2.7 KiB
PowerShell

param(
[Parameter(Position = 0)]
[ValidateSet('assembleDebug', 'installDebug', 'assembleRelease')]
[string]$Task = 'assembleDebug'
)
$ErrorActionPreference = 'Stop'
$projectRoot = Split-Path -Parent $PSScriptRoot
$documentsRoot = Split-Path -Parent $projectRoot
$wowRoot = Join-Path $documentsRoot 'wow335a'
$projectJdkRoot = Join-Path $projectRoot '.tools\temurin-21'
$legacyJdkRoot = Join-Path $wowRoot 'dungeon-export-work\tools\temurin-21'
$portableSdkRoot = Join-Path $wowRoot '.android-sdk'
$jdkHome = $null
$configuredJavaHome = [Environment]::GetEnvironmentVariable('JAVA_HOME')
if ($configuredJavaHome -and (Test-Path -LiteralPath (Join-Path $configuredJavaHome 'bin\java.exe'))) {
$jdkHome = Get-Item -LiteralPath $configuredJavaHome
} else {
$jdkHome = @($projectJdkRoot, $legacyJdkRoot) |
ForEach-Object {
Get-ChildItem -LiteralPath $_ -Directory -ErrorAction SilentlyContinue |
Where-Object { Test-Path -LiteralPath (Join-Path $_.FullName 'bin\java.exe') }
} |
Sort-Object Name -Descending |
Select-Object -First 1
}
if (-not $jdkHome) {
throw "Java 21 was not found. Set JAVA_HOME or install the portable JDK under $projectJdkRoot"
}
$configuredSdkRoot = [Environment]::GetEnvironmentVariable('ANDROID_SDK_ROOT')
if (-not $configuredSdkRoot) { $configuredSdkRoot = [Environment]::GetEnvironmentVariable('ANDROID_HOME') }
$sdkRoot = if ($configuredSdkRoot -and (Test-Path -LiteralPath (Join-Path $configuredSdkRoot 'platforms\android-36\android.jar'))) {
$configuredSdkRoot
} else {
$portableSdkRoot
}
if (-not (Test-Path -LiteralPath (Join-Path $sdkRoot 'platforms\android-36\android.jar'))) {
throw "Android SDK Platform 36 was not found. Set ANDROID_SDK_ROOT or install the portable SDK under $portableSdkRoot"
}
$env:JAVA_HOME = $jdkHome.FullName
$env:ANDROID_HOME = $sdkRoot
$env:ANDROID_SDK_ROOT = $sdkRoot
$gradleArguments = if ($Task -eq 'installDebug') {
@('--no-daemon', 'installDebug')
} else {
@('--no-daemon', 'clean', $Task)
}
Push-Location (Join-Path $projectRoot 'android')
try {
& '.\gradlew.bat' @gradleArguments
if ($LASTEXITCODE -ne 0) {
throw "Gradle $Task failed with exit code $LASTEXITCODE"
}
$packageType = if ($Task -eq 'assembleRelease') { 'release' } else { 'debug' }
$packageDirectory = Join-Path $projectRoot "android\app\build\outputs\apk\$packageType"
$builtPackage = Get-ChildItem -LiteralPath $packageDirectory -Filter '*.apk' |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
if (-not $builtPackage) { throw "No APK was produced in $packageDirectory" }
& python (Join-Path $projectRoot 'scripts\content\verify-android-package.py') $builtPackage.FullName
if ($LASTEXITCODE -ne 0) { throw "Packaged content verification failed." }
} finally {
Pop-Location
}