2015-02-20 5 views
14

Ich muss ionic platform add android/iOs einige Male ausführen, um das gewünschte Ergebnis zu erhalten. Manchmal werden Plugins nach dem ersten Lauf hinzugefügt, aber normalerweise muss ich die Plugins und Plattformverzeichnisse löschen und den plc-Zyklus einige Male wiederholen, bis alle Plugins zum android-Ordner hinzugefügt wurden.Plugins werden nicht immer nach cordova add platform hinzugefügt android und iOs

Hat jemand anderes dasselbe Problem erlebt und wenn ja - wie lautet die Auflösung? jede wenn ...

Dank im Voraus

+0

Ich habe immer noch das gleiche Problem ... irgendwelche Ideen? – batanasov

+0

An welchem ​​Betriebssystem arbeiten Sie? Das scheint ein Problem mit der Schreibberechtigung zu sein. – grytrn

+0

Es ist osx. Wenn es ein Problem mit der Schreibberechtigung wäre, wäre ich überhaupt nicht in der Lage, es zu tun. – batanasov

Antwort

2

Die Lösung, die ich am Ende mit deinstallieren und alle Plugins neu installieren, nachdem die Plattform hinzufügen. Da ich in früheren Cordova-Apps Probleme mit diesem Problem hatte, versuche ich, die Builds so konsistent wie möglich zu gestalten, also verpflichte ich das Plattformverzeichnis nicht und lösche es, nachdem ich die Apk erstellt habe. Ich habe dies mit einem Skript getan:

ionic platform add android 

ionic plugin remove org.apache.cordova.device 
ionic plugin remove org.apache.cordova.console 
ionic plugin remove com.ionic.keyboard 

ionic plugin add org.apache.cordova.device 
ionic plugin add org.apache.cordova.console 
ionic plugin add com.ionic.keyboard 

platforms/android/cordova/build --release 

rm -rf platforms 

Dies hat immer wieder für mich gearbeitet, aber da ich lieber nicht über das Halten dieser Strom zu kümmern, ich habe diese Befehle in die bewegte: after_platform_add/010_install_plugins. js, mit den folgenden Zusätzen:

packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || []; 

packageJSON.cordovaPlugins.forEach(function(plugin) { 
    exec('cordova plugin remove ' + plugin, function(error, stdout, stderr) { 
    sys.puts(stdout); 
    }); 
}); 

packageJSON.cordovaPlugins.forEach(function(plugin) { 
    exec('cordova plugin add ' + plugin, function(error, stdout, stderr) { 
    sys.puts(stdout); 
    }); 
}); 

Dies setzt voraus, dass etwas in diese Richtung in der package.json im Stamm JSON-Objekt vorhanden ist:

"cordovaPlugins": [ 
    "org.apache.cordova.console", 
    "org.apache.cordova.device", 
    "com.ionic.keyboard" 
] 

Welche shou ld tritt automatisch auf, wenn das after_plugin_add/010_register_plugin.js ordnungsgemäß funktioniert.

Alles was gesagt wird, ich fühle mich wie das ist hacky und dass Ionic sollte das alles richtig behandeln, so hoffentlich kann ich etwas Zeit finden, dieses Problem auf dieser Seite der Dinge zu untersuchen und die Wurzel dieses Problems zu finden Problem.

+0

Ist 'cordova prepare [plattform]' alles, was wirklich benötigt wird? Dadurch werden die Dateien aus dem Projekt-Plug-in-Ordner auf die Zielplattform kopiert. – laughingpine

+0

'cordova build' ist eine Abkürzung für:' cordova prepare', 'cordova compile', also sollte es alles tun, was Sie brauchen. Das Problem ist, dass es ein Treffer ist, ob es tatsächlich funktioniert. Ich brauche wirklich etwas, das wirklich reproduzierbar ist (wir setzen unsere Kunden kontinuierlich ein). Diese Methode scheint den Trick zu machen. – jbeck

+0

Das hat das Problem für mich nicht gelöst. Das Problem besteht immer noch. – batanasov

0

Ich denke, ich habe eine Lösung für dieses Problem gefunden. Anstatt ionischen cli für das Hinzufügen von Plattform zu verwenden, verwende ich sudo cordova platform add .... Es funktioniert jedes Mal.

+4

Sie sollten '' '' sudo'''' nicht für diesen Befehl verwenden. – com2ghz

24

Ich habe selbst einige ähnliche Probleme erlebt. Versuchen Sie, Ihr ionisches Projekt Reseting:

ionic state reset 

Das die platforms/ und plugins/ Ordner entfernt und stellt sich wieder her aus den gespeicherten Informationen in Ihrem package.json. Es gibt ein paar andere nützliche Befehle, die auf der ionic-cli project dokumentiert sind.

+0

Dieser hat mir einen Traum erfüllt! –

+0

Perfekt, ich liebe diesen Befehl. – jlafay