109 lines
3.7 KiB
Python
109 lines
3.7 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')
|
|
|
|
pacific_dir = r"c:\Users\Carlos\dev\almeira-web\pacifictrans-app"
|
|
backend_public = r"c:\Users\Carlos\dev\almeira-web\transporte-cali-buenaventura\backend\public"
|
|
android_dir = os.path.join(pacific_dir, "android")
|
|
jbr_dir = r"C:\Program Files\Android\Android Studio\jbr"
|
|
release_dir = os.path.join(pacific_dir, "release")
|
|
os.makedirs(release_dir, exist_ok=True)
|
|
|
|
|
|
print("=" * 70)
|
|
print("🚀 COMPILADOR NATIVO PACIFICTRANS GO ANDROID")
|
|
print("=" * 70)
|
|
|
|
print("[1/5] Limpiando APKs residuales para evitar bloating recursivo...")
|
|
patterns = [
|
|
os.path.join(pacific_dir, "public", "*.apk"),
|
|
os.path.join(android_dir, "app", "src", "main", "assets", "public", "*.apk"),
|
|
os.path.join(android_dir, "app", "build", "intermediates", "assets", "debug", "mergeDebugAssets", "public", "*.apk")
|
|
]
|
|
for pat in patterns:
|
|
for f in glob.glob(pat):
|
|
try:
|
|
os.remove(f)
|
|
print(f" -> Eliminado: {f}")
|
|
except Exception as e:
|
|
print(f" [Warn]: {e}")
|
|
|
|
print("[2/5] Sincronizando assets locales web al proyecto Android nativo...")
|
|
res_sync = subprocess.run(["cmd.exe", "/c", "npx.cmd", "cap", "sync", "android"], cwd=pacific_dir, capture_output=True, text=True)
|
|
if res_sync.returncode != 0:
|
|
print("[ERROR] Fallo en npx cap sync android:")
|
|
print(res_sync.stderr or res_sync.stdout)
|
|
sys.exit(1)
|
|
print(" -> Assets web y 8 plugins nativos sincronizados correctamente.")
|
|
|
|
# Doble chequeo 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"):
|
|
os.remove(os.path.join(assets_public, f))
|
|
print(f" -> Removido remanente: {f}")
|
|
|
|
print("[3/5] Compilando APK nativo con Gradle (Java JBR 17)...")
|
|
env = os.environ.copy()
|
|
env["JAVA_HOME"] = jbr_dir
|
|
|
|
res_gradle = subprocess.run(
|
|
["cmd.exe", "/c", "gradlew.bat", "assembleDebug"],
|
|
cwd=android_dir,
|
|
env=env,
|
|
capture_output=True,
|
|
text=True
|
|
)
|
|
|
|
if res_gradle.returncode != 0:
|
|
print("[ERROR] Fallo en compilación Gradle:")
|
|
print(res_gradle.stderr[-1500:] if res_gradle.stderr else res_gradle.stdout[-1500:])
|
|
sys.exit(1)
|
|
|
|
print(" -> Gradle assembleDebug finalizado con éxito.")
|
|
|
|
print("[4/5] Localizando binario APK generado...")
|
|
possible_apks = [
|
|
os.path.join(android_dir, "app", "build", "outputs", "apk", "debug", "PacifictransGo.apk"),
|
|
os.path.join(android_dir, "app", "build", "outputs", "apk", "debug", "app-debug.apk")
|
|
]
|
|
|
|
src_apk = None
|
|
for p in possible_apks:
|
|
if os.path.exists(p):
|
|
src_apk = p
|
|
break
|
|
|
|
if not src_apk:
|
|
print("[ERROR] No se encontró el APK de salida en build/outputs/apk/debug")
|
|
sys.exit(1)
|
|
|
|
size_mb = os.path.getsize(src_apk) / (1024 * 1024)
|
|
print(f" -> APK generado: {src_apk} ({size_mb:.2f} MB)")
|
|
|
|
print("[5/5] Distribuyendo APK nativo en rutas locales oficiales...")
|
|
destinations = [
|
|
os.path.join(release_dir, "PacifictransGo.apk"),
|
|
os.path.join(pacific_dir, "public", "PacifictransGo.apk"),
|
|
os.path.join(backend_public, "PacifictransGo.apk"),
|
|
r"c:\Users\Carlos\dev\almeira-web\PacifictransGo.apk"
|
|
]
|
|
|
|
for dst in destinations:
|
|
shutil.copy2(src_apk, dst)
|
|
print(f" -> Copiado a: {dst}")
|
|
|
|
print("\n" + "=" * 70)
|
|
print(f"✅ [ÉXITO TOTAL] APLICACIÓN ANDROID NATIVA 100% GENERADA")
|
|
print(f"📦 Tamaño final optimizado: {size_mb:.2f} MB")
|
|
print(f"📍 Ruta local principal: {destinations[0]}")
|
|
print("=" * 70)
|