2012-04-08 13 views
1

Ich möchte ein Update meiner apk senden, aber ich habe einige Datenbankänderungen, die die App zum Absturz bringen wird.Android deploy APK, neu installieren statt updaten

Also muss der Benutzer deinstallieren und dann neu installieren. Gibt es eine Möglichkeit, eine apk bereitzustellen, so wird dies automatisch erledigt.

Oder Löschen der App-Daten der vorherigen Installation.

Antwort

2

Sie die onUpgrade() Methode zur Verfügung stellen kann und dann können Sie alter table SQL siehe ausführen: http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html, dies erfordert, dass Sie die Datenbank Versionsnummer zu ändern, damit es, wenn die App startet erkannt werden kann. Wenn Ihr Schema wirklich anders ist und Sie die vorhandenen Daten speichern möchten, sollten Sie die Daten in eine temporäre Tabelle kopieren, löschen und das Schema erstellen und es erneut kopieren.

+0

ich benutze greenDAO, dort habe ich eine Option, die Schemaversion zu erhöhen. hoffentlich wird das nur auf magische Weise funktionieren. Probier es mal aus, da die App sowieso in der Beta ist. –

+0

dies ist die beste Praxis und die Datenbank-Versionsnummer gibt es aus einem Grund, also sollten Sie es verwenden und folgen convention, viel Glück. – EdChum

0

Keine Personen ignorieren/lesen keine Anweisungen, die Sie im Abschnitt "Was ist neu" geben, und Sie können dies nicht automatisch tun.

Sie sollten Ihre Datenbank innerhalb der App elegant aktualisieren. Die OpenHelper-Klasse bietet alle Funktionen, die Sie dafür benötigen.

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

+0

ok atleast sie werden bemerken, dass die App nicht mehr funktioniert :) –

+0

Und dann werden Sie mit negativen 1-Sterne-Bewertungen überflutet werden. – Kuffs

+0

Eigentlich könnten Sie eine andere Datenbank verwenden. Nicht ideal, aber es würde funktionieren. – Kuffs

0

Wie andere Antworten angegeben, sollten Sie lieber die onUpate() - Methode für eine einwandfreie Benutzererfahrung überschreiben. Neuinstallation und Aufräumen ist gut ... etwas wie 1980 Stil für mich und die Art, wie Android entworfen wird, bezweifle ich kaum, dass es unterstützt wird.

So, um die ursprüngliche Frage zu beantworten nein, ich glaube nicht, dass es möglich ist, Anwendungen über andere Anwendungen zu verwalten. Obwohl mein Mangel an Wissen über Methoden, die diese Aufgabe ausführen, kein Beweis ist, denke ich, dass es mehr eine Frage der zugrunde liegenden Struktur ist.

Android ist ein Unix-basiertes System und jede Anwendung wird als Benutzer in diesem System registriert. Die Benutzerrechte sind in dieser Umgebung sehr gut eingestellt, was bedeutet, dass ein anderer Benutzer (Anwendung) nicht einfach auf Daten anderer Anwendungen zugreifen kann und daher den Code injiziert/entführt/optimiert. Eine Ausnahme ist z.B. externer Speicher wie SD-Karten. Hier kann jede Anwendung mit den richtigen Berechtigungen beliebig herum trollen.

Doch zurück auf dem eigentlichen System gibt es einige Möglichkeiten, Anwendungen für den Zugriff auf fremde Pakete zu gewähren. Nach dem, was ich gelesen habe, scheint es eher so zu sein, dass es bestimmte Informationen und Einstellungen teilen kann. Ich bezweifle, dass dort eine Deinstallationsroutine gefunden wird.

Kurz vor dem Ende dachte ich über die Idee, dass Ihre neue Anwendung die ältere Version bitten könnte, sich selbst zu entfernen und nicht zu starten, es sei denn, es ist getan. Für diesen Ansatz finden Sie hier vielleicht mehr Informationen. Is it possible to programmatically uninstall a package in Android

Nichtsdestotrotz empfehle ich Ihnen auch die onUpdate() Lösung, da es die Art ist, wie das System entworfen wurde und daher die Erfahrung für den Benutzer viel zufriedenstellender und weniger komplex ist.

0

Ich hatte ein ähnliches Problem. In meinem Fall hat meine App eine Datenbank aus Assets geladen, und beim Upgrade der Datenbank hat sich nichts geändert. Was ich getan habe, um das zu lösen, war, den Namen der Datenbankdatei (im Ordner "Assets") zu ändern und perfekt zu funktionieren, genau wie bei einer anderen Datenbank. Es ist nicht der beste Weg, um es zu beheben, aber es löst das Problem.

Verwandte Themen