Auf einem nicht gerooteten Android-Gerät kann ich mit dem run-as
Befehl mit meinem Paketnamen zum Datenordner navigieren, der die Datenbank enthält . Die meisten Dateitypen, mit denen ich nur zufrieden bin, aber mit der Datenbank, die ich vom Android-Gerät ziehen möchte.
Gibt es einen download
copy
oder move
Befehl von diesem Teil der ADB-Shell? Ich möchte die Datenbankdatei herunterladen und ihren Inhalt mit einem Datenbankbrowser anzeigen.
Eine Antwort besteht darin, das gesamte Anwendungspaket in ein komprimiertes Archiv umzuwandeln. Es gibt jedoch keine weitere Antwort darauf, wie dieses Archiv extrahiert werden kann, sobald dies erledigt und auf den Computer verschoben wurde. Daher bin ich sehr abgelenkt, wenn es zunächst eine direktere Lösung geben könnte
Antworten:
Durch den Entwurf
user
von Android (das haben Sie auf Ihrem Telefon, bis Sie den Bootloader entsperren und das Telefon mituserdebug
oder mit dereng
Software flashen) wird der Zugriff auf den internen Speicher eingeschränkt - jede App kann nur auf ihre eigenen Dateien zugreifen. Zum Glück für Software - Entwickler nicht bereit zu verankern ihre Telefone Google bietet eine Möglichkeit , die für den Zugriff auf interne Speicher von debug Versionen ihrer Pakete mitrun-as
Befehl./data/data/debuggable.app.package.name/databases/file
Führen Sie den folgenden Befehl aus, um das Gerät von einem Android 5.1+ herunterzuladen :Mehrere Dateien in einem Ordner unter dem zum Download
/data/data/debuggable.app.package.name/
auf einmal - Verwendungtar
:quelle
run-as
kopieren Sie die Datei einfach an einen Ort im externen Speicher und ziehen Sie die Datenbankdatei von dort ab, anstatt mit den Dateiberechtigungen herumzuspielen.Die akzeptierte Antwort funktioniert bei mir nicht mehr (von Android blockiert?)
Also habe ich stattdessen folgendes gemacht:
quelle
su
, damit derrun-as
Befehl funktioniert.Wenn jemand nach einer Datenbank aus der Debug-Anwendung suchen möchte, kann er das folgende Verfahren anwenden:
quelle
Ich habe ein einfaches Shell-Skript zum Dumping von Datenbanken veröffentlicht:
Es führt zwei verschiedene Methoden aus, die hier beschrieben werden:
\r
Zeichen zu entfernen , die einige Geräte an die Shell ausgeben.Von hier aus können Sie eine Vielzahl von CLI- oder GUI-SQLite-Anwendungen verwenden, z. B.
sqlite3
odersqlitebrowser
, um den Inhalt der Datenbank zu durchsuchen.quelle
Ich konnte nichts anderes für mich arbeiten lassen als das:
Der erste Ausgang ist das Verlassen des Run-As, der zweite Ausgang ist das Verlassen der ADB-Shell, um den Pull auszuführen.
quelle
Für die Debug-Version der App ist es sehr praktisch, einen Befehl
adb exec-out run-as xxx.yyy.zzz cat somefile > somefile
zum Extrahieren einer einzelnen Datei zu verwenden. Sie müssen jedoch mehrere Male für mehrere Dateien arbeiten. Hier ist ein einfaches Skript, mit dem ich das Verzeichnis extrahiere.Hoffe es wäre hilfreich. Dieses Skript ist auch bei gist verfügbar .
Typische Verwendung ist
Anschließend werden alle Dateien im Verzeichnis Ihrer Apps-Datenbanken
/data/data/com.example.myapplication/databases
in das aktuelle Verzeichnis extrahiert .quelle
Viel einfacherer Ansatz zum Herunterladen der Datei auf Ihren lokalen Computer:
Führen Sie in Ihrer PC-Shell Folgendes aus:
quelle
Sie können dieses Skript verwenden, um die Realm-Datenbank abzurufen.
quelle
Wenn jemand nach einer anderen Antwort sucht, die sowohl zum Abrufen
Database
als auch zum Abrufen verwendet werden kann, gehen Sie folgendermaßen vorShared Preferences
:Fügen Sie in Ihrer
build.gradle
Datei Ihrer App eine Zeile hinzuWenn Sie Ihre App jetzt im
non-release
Modus ausführen, öffnet Ihre App automatisch den 8080-Port Ihres Geräts.IP address
Stellen Sie sicher, dass Ihr Gerät über verbunden istwifi
und Sielaptop
dasselbe Netzwerk gemeinsam nutzen. Besuchen Sie jetzt einfach die URLum alle Daten der Datenbank zusammen mit gemeinsamen Einstellungen zu sehen.
quelle
Hier ist eine Lösung, die auf einem Gerät mit Android 5.1 funktioniert. Das folgende Beispiel ist für Windows.
Sie benötigen sed (oder sed.exe unter Windows, z. B. von cygwin.) (Unter Unix ist es einfach da;)). Um schlechte '\ r' Zeichen zu entfernen, zumindest unter Windows.
Führen Sie nun einfach den folgenden Befehl aus:
Der Befehl sed entfernt nachgestellte / r-Zeichen.
Natürlich sollten Sie "com.yourcompany.yourapp" durch den Paketnamen der App und "YourDatabaseName" durch den Namen der Datenbank in der App ersetzen.
quelle
Die Datenbankdatei ist bei Verwendung leer
adb run-as
. Dies kann durch Aufrufen von close () in der RoomDatabase-Instanz behoben werden. Rufen Sie close () auf, damit SQLite sein Journal auf die Festplatte schreibt. Ich habe diese Schaltfläche erstellt, mit der die Datenbankverbindung auf Anfrage geschlossen wird:über GIPHY
So rufen Sie close für die RoomDatabase-Instanz auf.
quelle