09.04.2013
Nach vielen Versuchen und Arbeit hab ich es jetzt tatsächlich zusammengebracht. Zugriff auf und Manipulation von Dateien im /data/data Bereich, ohne Root-Rechte, nur über die Android Debug Bridge von Android 4.x, die auf praktisch jedem Gerät verfügbar ist.
Erklärung für Interessierte, wie das denn funktioniert.
Aufgrund kleinerer Rückschläge dauerte das jetzt etwas länger, aber inzwischen habe ich das ganze fast komplett automatisiert als Java-Anwendung. Und getestet habe ich es natürlich auch. Theoretisch kann man das Programm bzw. diese Strategie dann auch für beliebige andere Android-Apps nutzen (mit kleineren Modifikationen sogar System-Apps!). Ich werde dafür die zu sicherende App bzw. automatisch zu extrahierende Datei wohl per config-file frei wählbar machen.
Unterm Strich ein nettes Feature, diese neue "backup"-Funktion von Android 4.x. Wenn sie halt ein bisschen präziser zu steuern wäre, wäre noch super.
Erklärung für Interessierte, wie das denn funktioniert.
Spoiler (Öffnen)
1. Backup der Spieldaten ziehen
Der User bekommt dann am Handy die Meldung, dass ein Backup gestartet wurde und er muss es einfach bestätigen. Damit bekommt man einen großen Teil der Daten (nämlich alles, was nicht bei Installation in der apk enthalten war) aus "/data/data/com.gameloft.android.ANMP.GloftPOHM/..." als ein "backup.ab"-file auf den Computer.
Kann man per Hand oder auch automatisiert machen.
2. Backup fachgerecht zerlegen
Dafür braucht man nun zwingend ein Programm (ich hab mir selbst eines in Java geschrieben), denn das Backup hat ein spezielles Format mit Kompression etc. Jedenfalls kann man tatsächlich am Ende die "mlp_save.dat" auf dem Weg rausbekommen.
3. Savegame beliebig verändern
mit meinem Savegame Editor natürlich, eh klar
4. Savegame mit dem Rest der Daten wieder zu einer gültigen "backup.ab" zusammenschustern
Erneut nur mit Spezialprogramm machbar. Das war ein bisschen knifflig das richtig hinzubekommen, aber jetzt funktioniert es einwandfrei.
5. Backup zurückspielen (und sich ärgern)
Der User muss wieder am Handy bestätigen. Und kein Witz, obwohl das Backup selbst keinerlei Daten aus dem (frei zugänglichen) Ordner "/sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM" enthält (und es auch keine Möglichkeit gibt diesen Ordner beim Backup mitzusichern, denn nutzt man den "-shared" Parameter werden nämlich ALLE Daten von der SD-Karte gesichert, nicht nur die der angegebenen App ), löscht Android beim Einspielen des Backups diesen Ordner einfach komplett und ohne Warnung.
Das ist zwar bei dem MLP-Spiel nicht so wild (es lädt dann halt wieder seine 70 MB Daten beim Start herunter, das Savegame funktioniert auch so), aber trotzdem ärgerlich. Also doch lieber:
5. Backup zurückspielen ohne Daten zu verlieren
Kurz erklärt: Einfach den Ordner umbennenen, so dass Android ihn beim Restore nicht findet und in Ruhe lässt. Danach wieder zurückbenennen. Dauert nur eine Sekunde und spart einem minutenlanges warten auf den Neudownload der Dateien.
Code:
adb backup -f backup.ab -noapk -noshared -nosystem com.gameloft.android.ANMP.GloftPOHM
Der User bekommt dann am Handy die Meldung, dass ein Backup gestartet wurde und er muss es einfach bestätigen. Damit bekommt man einen großen Teil der Daten (nämlich alles, was nicht bei Installation in der apk enthalten war) aus "/data/data/com.gameloft.android.ANMP.GloftPOHM/..." als ein "backup.ab"-file auf den Computer.
Kann man per Hand oder auch automatisiert machen.
2. Backup fachgerecht zerlegen
Dafür braucht man nun zwingend ein Programm (ich hab mir selbst eines in Java geschrieben), denn das Backup hat ein spezielles Format mit Kompression etc. Jedenfalls kann man tatsächlich am Ende die "mlp_save.dat" auf dem Weg rausbekommen.
3. Savegame beliebig verändern
mit meinem Savegame Editor natürlich, eh klar
4. Savegame mit dem Rest der Daten wieder zu einer gültigen "backup.ab" zusammenschustern
Erneut nur mit Spezialprogramm machbar. Das war ein bisschen knifflig das richtig hinzubekommen, aber jetzt funktioniert es einwandfrei.
Code:
adb restore backup.ab
Der User muss wieder am Handy bestätigen. Und kein Witz, obwohl das Backup selbst keinerlei Daten aus dem (frei zugänglichen) Ordner "/sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM" enthält (und es auch keine Möglichkeit gibt diesen Ordner beim Backup mitzusichern, denn nutzt man den "-shared" Parameter werden nämlich ALLE Daten von der SD-Karte gesichert, nicht nur die der angegebenen App ), löscht Android beim Einspielen des Backups diesen Ordner einfach komplett und ohne Warnung.
Das ist zwar bei dem MLP-Spiel nicht so wild (es lädt dann halt wieder seine 70 MB Daten beim Start herunter, das Savegame funktioniert auch so), aber trotzdem ärgerlich. Also doch lieber:
5. Backup zurückspielen ohne Daten zu verlieren
Code:
adb shell mv sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM.backup
adb restore backup.ab
(User bestätigt)
adb shell mv sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM.backup sdcard/Android/data/com.gameloft.android.ANMP.GloftPOHM
Kurz erklärt: Einfach den Ordner umbennenen, so dass Android ihn beim Restore nicht findet und in Ruhe lässt. Danach wieder zurückbenennen. Dauert nur eine Sekunde und spart einem minutenlanges warten auf den Neudownload der Dateien.
Aufgrund kleinerer Rückschläge dauerte das jetzt etwas länger, aber inzwischen habe ich das ganze fast komplett automatisiert als Java-Anwendung. Und getestet habe ich es natürlich auch. Theoretisch kann man das Programm bzw. diese Strategie dann auch für beliebige andere Android-Apps nutzen (mit kleineren Modifikationen sogar System-Apps!). Ich werde dafür die zu sicherende App bzw. automatisch zu extrahierende Datei wohl per config-file frei wählbar machen.
Unterm Strich ein nettes Feature, diese neue "backup"-Funktion von Android 4.x. Wenn sie halt ein bisschen präziser zu steuern wäre, wäre noch super.