Dopo aver guardato intorno un po ', ho deciso di creare una soluzione semplice che risolve questo e sto postando questo per tutti che si preoccupa di fare lo stesso. Tutti abbiamo bisogno è un file http server statico che punta ad Android directory di compilazione:
<project_folder>/platforms/android/assets/www
Accade così che dopo una generazione corretta, la cartella ha tutti i file per servire, tra cui cordova.js
, cordova_plugins.js
e l'intera cartella plugins
con i loro file javascript.
Dato che il nodo è presente, è facile creare un server http "veloce" con nodo/espresso. Ecco lo script che ho redatto (sentiti libero di modificare per le tue esigenze).
livesrv.JS:
var express = require('express');
var server = express();
var http = require('http').Server(server);
var port = 80;
var static_root = process.argv[2] || '<YOUR_PROJECT_FOLDER>/platforms/android/assets/www';
server.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
server.use(function(req, res, next)
{
console.log('--> '+req.url);
if(req.url.match(/(.png|.jpg|.jpeg|.svg|.woff|.woff2|.ttf|.otf|.eot)/)) {
res.header('Cache-Control', 'max-age=691200');
} else {
res.header('Cache-Control', 'max-age=0, no-cache, no-store, must-revalidate');
res.header('Pragma', 'no-cache');
res.header('Expires', 'Thu, 01 Jan 1970 00:00:01 GMT');
}
next();
});
server.use(express.static(static_root));
http.listen(port, function() {
console.log("startup: server started @ port " + port + ", root:"+static_root);
});
Quando si avvia questa applicazione nodo, i file di progetto (js/css/html) sono visibili gli aggiornamenti live dal dispositivo (ATTENZIONE: questo espone le tue fonti, quindi è necessario avere una certa idea di che cosa stai facendo prima di usare questo script). Per coloro che hanno bisogno di informazioni più dettagliate:
- Salvare il frammento di codice in un file 'livesrv.js' in una cartella vuota
- Aprire un prompt dei comandi per quella cartella
- Esegui una volta 'NPM installare Express' (se non è installata a livello globale)
- eseguire il server con il comando
node livesrv <your_project_folder>/platforms/android/assets/www
Il passo successivo: cambiare il config.xml
del progetto HTML di partenza per puntare a un altro file HTML (in questo caso ho scelto 'main.html')
Creare `main.html', che non è altro che un "bootstrap" per il server.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
</head>
<body>
<script>
console.log("Starting..");
setTimeout(function() {
console.log("Booting app..");
window.location.href = "http://<YOUR_SERVER_IP>/index.html";
}, 200);
</script>
</body>
</html>
Tutto ciò che fa è che carica `index.html 'dal server. Non dimenticare di aggiornare YOUR_SERVER_IP con il tuo (l'indirizzo IP dell'host che esegue il server del nodo).
Ultimo passo: ho messo nel mio webapp un pulsante da qualche parte (è possibile utilizzare una parte 'statica' delle app, ad esempio un logo permanente se si dispone di tale), che consente di attivare una ricarica.
$('#mylogo').on('click', function() {
console.log("Reloading..");
window.location.reload();
});
E quello ha funzionato per me. Dopo la creazione/installazione iniziale, ogni volta che premo il logo, l'app sta ricaricando il contenuto (aggiornato) dal server, quindi non è necessario ricostruirlo. Prova questo e fammi sapere se funziona per te. Non dimenticare di consentire la connessione del dispositivo con il server (es: abilitare il wifi!)
Per rilasciare l'app, cambiare il punto di partenza a index.html
e rimuovere il pulsante di ricarica.
Svantaggi/restrizioni:
- Quando si ricarica, la connessione DOM del Visual Studio si perde con l'applicazione di destinazione (almeno nel mio test)
- complesso dovrebbe essere una soluzione più semplice/automatizzata.
- È necessario ricostruire se è stato aggiunto un plug-in dopo l'ultima generazione effettiva.
Vantaggi:
- app Immediata on-device update, elimina il tempo a costruire quando i cambiamenti sono contenuti js/css/html
forse ho trascurato alcune cose, soprattutto se ci sono servizi pronti che potrei usare per ottenere questo, quindi se sai qualcosa che semplifica questo per favore fammi sapere. Quindi sentiti libero di criticare tutto quanto sopra visto che sono molto interessato a leggere le tue idee. A proposito, se qualcuno volesse rendere questo un plugin di V/S, mi piacerebbe davvero usarlo.
Cheers!
Grazie per la risposta. Posso chiederti qualche altro dettaglio su questi suggerimenti? Ad esempio: cosa intendi per "metodi di download standard di cordova"? Se potessi elaborare un po 'lo apprezzerei molto. Grazie in anticipo – mtso
@mtso Questo dovrebbe dare un po 'di testa a testa https://cordova.apache.org/docs/en/2.8.0/cordova/file/filetransfer/filetransfer.html – Matthew
@mtso Oh sì, mi dispiace per la risposta tardiva. ;-) – Matthew