almeira-web/scripts/build_release_bundle.py

88 lines
3.0 KiB
Python

import subprocess
import os
import shutil
import glob
import sys
import io
if sys.platform == 'win32':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
dripzone_dir = r"c:\Users\Carlos\dev\almeira-web\dripzone-app"
android_dir = os.path.join(dripzone_dir, "android")
jbr_dir = r"C:\Program Files\Android\Android Studio\jbr"
release_dir = os.path.join(dripzone_dir, "release")
os.makedirs(release_dir, exist_ok=True)
print("=" * 60)
print(" COMPILADOR OFICIAL DE ANDROID APP BUNDLE (.AAB) PARA PLAY STORE")
print("=" * 60)
print("\n[1/4] Limpiando artefactos y APKs recursivos...")
patterns = [
os.path.join(dripzone_dir, "public", "*.apk"),
os.path.join(dripzone_dir, "public", "*.aab"),
os.path.join(android_dir, "app", "src", "main", "assets", "public", "*.apk"),
os.path.join(android_dir, "app", "src", "main", "assets", "public", "*.aab"),
]
for pat in patterns:
for f in glob.glob(pat):
try:
os.remove(f)
print(f" -> Eliminado remanente: {f}")
except Exception as e:
pass
print("\n[2/4] Sincronizando Capacitor con la web actualizada...")
subprocess.run(["npx.cmd", "cap", "sync", "android"], cwd=dripzone_dir, check=True)
# Asegurar que ningún binario quedó copiado en assets
assets_public = os.path.join(android_dir, "app", "src", "main", "assets", "public")
if os.path.exists(assets_public):
for f in os.listdir(assets_public):
if f.endswith(".apk") or f.endswith(".aab"):
try:
os.remove(os.path.join(assets_public, f))
except:
pass
print("\n[3/4] Compilando Android App Bundle (.aab) firmado en modo Release con Gradle...")
env = os.environ.copy()
env["JAVA_HOME"] = jbr_dir
res = subprocess.run(
["cmd.exe", "/c", "gradlew.bat", "bundleRelease"],
cwd=android_dir,
env=env,
capture_output=True,
text=True
)
if res.returncode != 0:
print(" [ERROR DE GRADLE]:")
print(res.stdout[-2000:])
print(res.stderr[-2000:])
sys.exit(1)
print("\n[4/4] Verificando y exportando el bundle .aab generado...")
bundle_path = os.path.join(android_dir, "app", "build", "outputs", "bundle", "release", "app-release.aab")
if not os.path.exists(bundle_path):
# Buscar cualquier .aab en el directorio de build
found = glob.glob(os.path.join(android_dir, "app", "build", "outputs", "bundle", "**", "*.aab"), recursive=True)
if found:
bundle_path = found[0]
else:
print(" [ERROR] No se encontró el archivo .aab generado.")
sys.exit(1)
size_mb = os.path.getsize(bundle_path) / (1024 * 1024)
dest_release = os.path.join(release_dir, "DripZone-Release.aab")
shutil.copy2(bundle_path, dest_release)
print(f"\n✅ ¡ANDROID APP BUNDLE (.AAB) COMPILADO Y FIRMADO CON ÉXITO!")
print(f"📦 Archivo Oficial: {dest_release}")
print(f"📊 Tamaño: {size_mb:.2f} MB")
print("🚀 Este es el archivo exacto que subirás a Google Play Console.")
print("=" * 60)