88 lines
3.0 KiB
Python
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)
|