Generador de APK
Crea tu aplicación Android en segundos
Generando APK...
${item}
`)
.join('');
htmlContent = htmlContent.replace('{{menuItems}}', menuItems);
}
// Crear estructura del proyecto
const zip = new JSZip();
// Agregar archivos necesarios
zip.file("index.html", htmlContent);
zip.file("config.xml", generateConfigXml(appName, appPackage));
zip.file("package.json", generatePackageJson(appName, appPackage));
// Generar el archivo ZIP
progressText.textContent = "Generando archivo de proyecto...";
const content = await zip.generateAsync({type: "blob"});
// Descargar el archivo
progressText.textContent = "¡Proyecto generado! Descargando...";
saveAs(content, `${appName.toLowerCase().replace(/\s+/g, '-')}-project.zip`);
// Mostrar instrucciones
setTimeout(() => {
alert(`Proyecto generado con éxito!\n\nPara construir el APK:\n1. Descomprime el archivo ZIP\n2. Abre una terminal en la carpeta del proyecto\n3. Ejecuta:\n npm install\n npx cap add android\n npx cap open android`);
progress.style.display = 'none';
}, 1000);
} catch (error) {
console.error(error);
progress.style.display = 'none';
alert('Error al generar el proyecto: ' + error.message);
}
});
// Generar config.xml
function generateConfigXml(appName, appPackage) {
return `
${item}
`)
.join('');
htmlContent = htmlContent.replace('{{menuItems}}', menuItems);
}
// Crear estructura del proyecto
const zip = new JSZip();
// Agregar archivos necesarios
zip.file("index.html", htmlContent);
zip.file("config.xml", generateConfigXml(appName, appPackage));
zip.file("package.json", generatePackageJson(appName, appPackage));
zip.file("capacitor.config.json", generateCapacitorConfig(appName, appPackage));
// Generar estructura de recursos
generateResourceStructure(zip);
// Procesar el icono si se proporcionó uno
const iconInput = document.getElementById('appIcon');
if (iconInput.files.length > 0) {
const iconFile = iconInput.files[0];
const iconData = await readFileAsArrayBuffer(iconFile);
zip.file("resources/icon.png", iconData);
}
// Generar el archivo ZIP
progressText.textContent = "Generando archivo de proyecto...";
const content = await zip.generateAsync({type: "blob"});
// Descargar el archivo
progressText.textContent = "¡Proyecto generado! Descargando...";
saveAs(content, `${appName.toLowerCase().replace(/\s+/g, '-')}-project.zip`);
// Mostrar instrucciones
setTimeout(() => {
alert(`Proyecto generado con éxito!\n\nPara construir el APK:\n1. Descomprime el archivo ZIP\n2. Abre una terminal en la carpeta del proyecto\n3. Ejecuta:\n npm install\n npx cap add android\n npx cap open android`);
progress.style.display = 'none';
}, 1000);
} catch (error) {
console.error(error);
progress.style.display = 'none';
alert('Error al generar el proyecto: ' + error.message);
}
});
// Función auxiliar para leer archivos
function readFileAsArrayBuffer(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsArrayBuffer(file);
});
}