Ctrl K
ComunidadGuías…

scripts/package_android.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env python3
"""Package the release APK and Android sources, excluding generated files and keys."""

import json
import re
import shutil
import zipfile
from pathlib import Path

root = Path(__file__).resolve().parents[1]
project = root / "android"
output = project / "dist"
output.mkdir(exist_ok=True)
release = project / "app/build/outputs/apk/release"
metadata = json.loads((release / "output-metadata.json").read_text())
if metadata.get("applicationId") != "com.aoede.twa" or len(metadata["elements"]) != 1:
    raise SystemExit("Unexpected Android build metadata")
build = metadata["elements"][0]
apk = release / build["outputFile"]
if apk.name not in {"app-release.apk", "app-release-unsigned.apk"} or not apk.is_file():
    raise SystemExit("Build Android assembleRelease before packaging")
version, code = build["versionName"], build["versionCode"]
if not re.fullmatch(r"\d+\.\d+\.\d+", version) or not isinstance(code, int) or code < 1:
    raise SystemExit("Invalid Android build version")
name = "aoede-android.apk" if apk.name == "app-release.apk" else "aoede-android-unsigned.apk"
shutil.copy2(apk, output / name)
(output / "android-version.txt").write_text(f"Aoede Android {version} ({code})")
with zipfile.ZipFile(output / "aoede-android-source.zip", "w", zipfile.ZIP_DEFLATED) as archive:
    for source in (root / "branding/aoede.png", root / "scripts/enlarge_brand_icons.py"):
        archive.write(source, Path("aoede-android") / source.relative_to(root))
    for name in ("ANDROID.md", "THEMES.md", "SECURITY.md", "BACKUP-RESTORE.md"):
        source = root / "docs" / name
        archive.write(source, Path("aoede-android/docs") / name)
    for source in sorted(project.rglob("*")):
        relative = source.relative_to(project)
        if not source.is_file() or any(part in {"build", "dist", ".gradle", ".kotlin", ".idea"} for part in relative.parts):
            continue
        if source.suffix in {".jks", ".keystore", ".key", ".pem", ".p12", ".pyc"} or source.name == "local.properties":
            continue
        if "__pycache__" in relative.parts:
            continue
        if source.suffix not in {
            ".kt", ".kts", ".js", ".mjs", ".xml", ".png", ".ico", ".jpg", ".jpeg", ".svg", ".webp",
            ".css", ".html", ".json", ".webmanifest", ".woff", ".woff2", ".ttf", ".otf",
            ".properties", ".jar", ".pro", ".md", ".bat", ".py", ".txt",
        } and source.name != "gradlew":
            continue
        if relative == Path("README.md"):
            archive.writestr("aoede-android/README.md", source.read_text().replace("../docs/", "docs/"))
        else:
            archive.write(source, Path("aoede-android") / relative)
    # Keep editable canonical sources alongside the generated bundle for standalone builds.
    for folder in ("assets", "concierge/templates", "concierge/locales"):
        for source in sorted((root / "Aoede" / folder).rglob("*")):
            if source.is_file() and source.suffix not in {".pyc", ".mo"}:
                archive.write(source, Path("aoede-android/frontend-source") / source.relative_to(root / "Aoede"))
print(f"Packaged {name} and aoede-android-source.zip")