Files
dms/build-apk.ps1
T

58 lines
2.9 KiB
PowerShell
Raw Normal View History

2026-08-11 10:03:40 +08:00
# Manual APK build pipeline: aapt2 -> javac -> d8 -> jar -> zipalign -> apksigner
$root = 'c:\Users\shz73\Documents\Qoder\2026-08-09\chat-1\device-management-system'
$jdk = "$root\android-tools\jdk\jdk-17.0.20+8"
$sdk = "$root\android-sdk"
$bt = "$sdk\build-tools\33.0.2"
$androidJar = "$sdk\platforms\android-33\android.jar"
$proj = "$root\android-app"
$build = "$proj\build"
$env:JAVA_HOME = $jdk
$env:Path = "$jdk\bin;" + $env:Path
if (Test-Path $build) { Remove-Item $build -Recurse -Force }
New-Item -ItemType Directory -Force -Path "$build\gen" | Out-Null
New-Item -ItemType Directory -Force -Path "$build\classes" | Out-Null
New-Item -ItemType Directory -Force -Path "$build\dex" | Out-Null
Write-Host '=== 1. aapt2 compile ==='
& "$bt\aapt2.exe" compile --dir "$proj\res" -o "$build\res.zip"
if ($LASTEXITCODE -ne 0) { Write-Host 'AAPT2 COMPILE FAILED'; exit 1 }
Write-Host '=== 2. aapt2 link ==='
& "$bt\aapt2.exe" link -o "$build\app.unsigned.apk" -I $androidJar --manifest "$proj\AndroidManifest.xml" --java "$build\gen" --auto-add-overlay "$build\res.zip"
if ($LASTEXITCODE -ne 0) { Write-Host 'AAPT2 LINK FAILED'; exit 1 }
Write-Host '=== 3. javac ==='
$srcs = @(Get-ChildItem -Recurse -Filter *.java "$build\gen" | ForEach-Object { $_.FullName }) + @(Get-ChildItem -Recurse -Filter *.java "$proj\src" | ForEach-Object { $_.FullName })
& "$jdk\bin\javac.exe" -classpath $androidJar -d "$build\classes" @srcs
if ($LASTEXITCODE -ne 0) { Write-Host 'JAVAC FAILED'; exit 1 }
Write-Host '=== 4. d8 ==='
$classes = Get-ChildItem -Recurse -Filter *.class "$build\classes" | ForEach-Object { $_.FullName }
& "$jdk\bin\java.exe" -cp "$bt\lib\d8.jar" com.android.tools.r8.D8 --output "$build\dex" --lib $androidJar @classes
if ($LASTEXITCODE -ne 0) { Write-Host 'D8 FAILED'; exit 1 }
Write-Host '=== 5. add classes.dex ==='
Push-Location "$build\dex"
& "$jdk\bin\jar.exe" uf "$build\app.unsigned.apk" classes.dex
Pop-Location
if ($LASTEXITCODE -ne 0) { Write-Host 'JAR ADD FAILED'; exit 1 }
Write-Host '=== 6. zipalign ==='
& "$bt\zipalign.exe" -f 4 "$build\app.unsigned.apk" "$build\app-aligned.apk"
if ($LASTEXITCODE -ne 0) { Write-Host 'ZIPALIGN FAILED'; exit 1 }
Write-Host '=== 7. sign ==='
$ks = "$build\debug.keystore"
if (-not (Test-Path $ks)) {
& "$jdk\bin\keytool.exe" -genkeypair -keystore $ks -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'CN=Android Debug,O=Android'
}
& "$jdk\bin\java.exe" -jar "$bt\lib\apksigner.jar" sign --ks $ks --ks-pass pass:android --key-pass pass:android --ks-key-alias androiddebugkey --out "$build\yingshi-device-manager.apk" "$build\app-aligned.apk"
if ($LASTEXITCODE -ne 0) { Write-Host 'SIGN FAILED'; exit 1 }
Write-Host '=== 8. verify ==='
& "$jdk\bin\java.exe" -jar "$bt\lib\apksigner.jar" verify --verbose "$build\yingshi-device-manager.apk"
Get-Item "$build\yingshi-device-manager.apk" | Select-Object Name, Length
Write-Host 'APK-BUILD-DONE'