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)