Wie greife ich auf Daten / Datenordner im Android-Gerät zu?


316

Ich entwickle eine App und weiß, dass meine Datenbank *.dbin angezeigt wirddata/data/com.****.***

Ich kann mit Hilfe von SQLite Manager von AVD in Eclipse auf diese Datei zugreifen

Ich kann jedoch auf meinem Android-Handy nicht auf diese Datei zugreifen.
Ich google es und es heißt, ich muss mein Telefon rooten, um es zu tun, aber ich möchte es nicht tun. (Neues Telefon, Garantieprobleme und Sicherheitsprobleme)

Hier ist meine Frage: Wie kann ich auf mein data/data/.....Verzeichnis in meinem Android-Handy zugreifen, " ohne es zu rooten "?

Kann ich die Benutzerberechtigungen für das Verzeichnis ändern, data/data.....ohne es zu rooten?


1
Hast du die Datei database.db .. ???
Amit Prajapati

Ich benutze die Datenbank - "openOrCreateDatabase (....)"
Naveen Prince P

5
Sie müssen auf jeden Fall zuerst das Telefon rooten. Dann benötigen Sie eine kompetente Dateimanager-App, die Sie verwenden können. Der ASTRO-Dateimanager ist beliebt, bietet jedoch keine Unterstützung für den Root-Zugriff und ist daher für Hauptbenutzer nutzlos. Sie sollten in der Lage sein, ES File Explorer oder File Expert zu verwenden. Ich hatte kürzlich Probleme beim Anzeigen von / data / data oder anderen geschützten Ordnern mit ES File Explorer und habe es so gut wie aufgegeben. Jetzt verwende ich File Expert. Beide erfordern, dass Sie in die Einstellungen gehen und die Root-Explorer-Option aktivieren (und manchmal auch das Dateisystem als beschreibbar bereitstellen). Das müssen Sie also zuerst tun.
Samir

Dies ist keine programmierbezogene Frage oder Antwort.
SkyWalker

Antworten:


375

Der direkte Zugriff auf die Dateien auf Ihrem Telefon ist schwierig, aber Sie können sie möglicherweise auf Ihren Computer kopieren, wo Sie alles tun können, was Sie wollen. Ohne Rooting haben Sie 2 Möglichkeiten:

  1. Wenn die Anwendung debuggbar ist, können Sie den run-asBefehl in der ADB-Shell verwenden

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Alternativ können Sie die Backup-Funktion von Android verwenden.

    adb backup -noapk com.your.packagename

    Sie werden nun aufgefordert, Ihr Gerät zu entsperren und den Sicherungsvorgang zu bestätigen. Es ist am besten, KEIN Passwort anzugeben, da es sonst schwieriger wird, die Daten zu lesen. Klicken Sie einfach auf "Meine Daten sichern". Die resultierende 'backup.ab'-Datei auf Ihrem Computer enthält alle Anwendungsdaten im Android-Backup-Format. Im Grunde ist es eine komprimierte TAR-Datei. Auf dieser Seite wird erläutert, wie Sie den Befehl zlib von OpenSSL zum Dekomprimieren verwenden können. Mit dem adb restore backup.dbBefehl können Sie die Sicherung wiederherstellen.


15
adb backup -f \location\on\local\drive -noapk app.package.namearbeitete für mich ohne root
theblang

24
Verwenden Sie diesen Befehl, um Ihre Sicherungsdatei dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
Wie kann ich in Option 1 den Befehl cp anweisen, sie auf meinem Laptop (Mac) zu speichern? Wenn Sie ein Win-Beispiel geben, würde ich es auch gerne wissen und werde es einfach übersetzen. Vielen Dank.
Gerard

10
Wichtig: Beim Ausführen adb backup -noapk com.your.packagenamewird die ab-Datei im aktuellen Verzeichnis gespeichert. cd Desktop..
Stellen

6
Beachten Sie, dass der Sicherungsansatz eine leere Sicherung ergibt, wenn Ihre App Sicherungen über android:allowBackup="false"im Manifest deaktiviert hat .
Tom

130

Wenn Sie Android Studio 3.0 oder eine neuere Version verwenden, führen Sie die folgenden Schritte aus.

  1. Klicken Sie auf Ansicht > Tool Windows > Gerätedateie-Explorer .
  2. Erweitern Sie die Knoten / data / data / [Paketname] .

Sie können nur Pakete erweitern, die im Debug-Modus auf nicht gerooteten Geräten ausgeführt werden.

In Android Studio 3.0 wurden Schritte ausgeführt


1
Ich kann nichts in diesem Dock sehen. und sag mir nichts zeigen. Weißt du was das Problem ist?
Mahdi Azadbar

1
Dies funktioniert nur im Debug-Modus, nicht für Release-Builds
Uhr

Vielen Dank, dass Sie den No-Pita-Weg gezeigt haben, um in das Dateisystem zu schauen!
Lensflare

Ich habe anscheinend keine Option in der Version 3.0.1. Ist sie verschoben worden?
Codingale

1
das ist fantastisch. Ich wünschte, ich hätte das vor einiger Zeit gewusst.
Schachmatt711

59

Sie können auch versuchen, die Datenbank mit der Root-Explorer-App abzurufen. Und wenn das nicht funktioniert, können Sie Folgendes versuchen:

  1. Öffnen Sie cmd
  2. Ändern Sie Ihr Verzeichnis und gehen Sie zu "Plattform-Tools".
  3. Geben Sie ' adb shell' ein
  4. su
  5. Drücken Sie auf dem Gerät auf "Zulassen"
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Öffnen Sie die DDMS-Ansicht in Eclipse und öffnen Sie von dort aus 'FileExplorer', um die gewünschte Datei zu erhalten

Danach sollten Sie in der Lage sein, die Dateien auf dem gerooteten Gerät zu durchsuchen.


2
Ich denke, Root Explore App funktioniert nur für gerootete Telefone. Ich werde versuchen, 2. Methode
Naveen Prince P

5
Chmod

@bofredo Ich denke, es liegt daran, dass Ihr Telefon nicht gerootet ist. Sie sollten Ihr Telefon
rooten

1
@mahemadhi Ja, Sie müssten diesen Befehl wahrscheinlich manuell für jedes Verzeichnis ausführen, da alle Verzeichnisse über private Berechtigungen verfügen.
Sheraz Ahmad Khilji

1
@VivekChavda yup sie benötigen verwurzeltes Telefon
Sheraz Ahmad Khilji

21

Um einen der oben genannten Schritte auszuführen (dh von Ihrem Telefon aus auf geschützte Ordner zuzugreifen), benötigen Sie weiterhin root. (Dazu gehört das Ändern der Mount-Berechtigungen für den Ordner / data und der Zugriff darauf.)

Ohne root ist ein /datadirekter Zugriff auf das zu lesende Element nur innerhalb Ihrer Anwendung per Code möglich. Sie können also versuchen, diese Datei auf eine SD-Karte oder an einen Ort zu kopieren, auf den Sie zugreifen können, und dann sollten Sie normal darauf zugreifen können.

Durch das Rooten erlischt Ihre Garantie nicht, wenn Sie ein Entwicklergerät haben. Es tut mir leid, es gibt keinen anderen Weg AFAIK.


Ich benutze kein Entwicklergerät. Meins ist Xperia U
Naveen Prince P

Kann ich die Benutzerberechtigung des Datenordners mit chmode-Befehlen bearbeiten?
Naveen Prince P

Die gesamte Partition ist schreibgeschützt bereitgestellt. Ich würde sagen, Ihre beste Wette wäre adb pullwie in der folgenden Antwort erwähnt.
Anirudh Ramanathan

Ich bin möglich, wenn die Anwendung es erlaubt. Die Verzeichnisse haben alle x Berechtigungen für alle (aber keine r für alle, daher müssen Sie den Pfad kennen). Dann hängt es davon ab, ob die Anwendung die Dateiewelt zugänglich gemacht hat oder nicht. Einige Dateien sind, die meisten nicht.
Jan Hudec

Zuerst sagen Sie, es sei unmöglich zu lesen, dann schlagen Sie vor, die Datei an eine andere Stelle zu kopieren. Aber wie kann man eine Datei kopieren, ohne sie zuerst zu lesen? Ich denke, diese Antwort ist fehlerhaft.
Bis zum

13

Der einfachste Weg (nur ein einfacher Schritt), eine Datei aus Ihrem debuggbaren Anwendungsordner (z. B. /data/data/package.name/databases/file) auf einem nicht gerooteten Android 5.0+ Gerät abzurufen, ist die Verwendung des folgenden Befehls:

adb exec-out run-as package.name cat databases/file > file

12
  1. Öffnen Sie Ihre Eingabeaufforderung
  2. Wechseln Sie in das Verzeichnis E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Geben Sie die folgenden Befehle ein
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Wechseln Sie in das Verzeichnis, cd /sdcardum sicherzustellen, dass database.dbes vorhanden ist.
  7. adb pull /sdcard/database.db oder Sie können einfach database.db vom Gerät kopieren.

Funktioniert perfekt für mich. Vielen Dank! In meinem Fall hat der Name der Datenbankdatei jedoch keine .db-Erweiterung.
technik

10

Verwenden Sie den Datei-Explorer in Eclipse. Wählen Sie Windows => Show View => Other ... => File Explorer.

Eine andere Möglichkeit ist das Abrufen der Datei über adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

Ich hatte auch einmal das gleiche Problem. Es gibt keine Möglichkeit, direkt auf die Datei auf Android-Geräten zuzugreifen, außer auf die ADB-Shell oder das Root-Gerät.

Daneben gibt es 02 Alternativen:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2) Versuchen Sie Folgendes: https://github.com/sanathp/DatabaseManager_For_Android


5

So sichern Sie von Android auf den Desktop

Öffnen Sie die Befehlszeile cmd und führen Sie Folgendes aus: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Geben Sie kein Passwort ein und klicken Sie auf Meine Daten sichern. Stellen Sie sicher, dass Sie nicht auf Laufwerk C root speichern. Sie können abgelehnt werden. Deshalb habe ich auf C: \ Intel gespeichert.

So extrahieren Sie die * .ab-Datei

  1. Gehen Sie hier und laden Sie herunter: https://sourceforge.net/projects/adbextractor/
  2. Extrahieren Sie die heruntergeladene Datei und navigieren Sie zu dem Ordner, in den Sie extrahiert haben.
  3. Führen Sie dies mit Ihren eigenen Dateinamen aus: java -jar abe.jar entpacken Sie c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Dies ist eine großartige Antwort, danke. Arbeitete für mich beim Extrahieren eines Einzel-App-Backups, das auf einem Xiaomi-Gerät (mit der Erweiterung .bak) erstellt wurde. Keine Wurzelbildung erforderlich
Russisch

4

Auf einem gerooteten Gerät lautet die richtige Lösung:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

Die ursprüngliche Lösung funktionierte, aber der chmod gab ein unbekanntes Verzeichnis zurück. Durch Ändern des Befehls chmod in / data / data / * wurde über DDMS in Intellij auf alle Unterordner im Datenverzeichnis zugegriffen. Ich gehe davon aus, dass die gleiche Lösung für Eclipse DDMS gilt.

UPDATE Also, was ich gefunden habe, ist seltsam. Ich verwende ein Nexus 6 mit DDMS in IntelliJ (Android Device Monitor). Ich habe eine kleine Starter-App erstellt. Diese App speichert Daten in einer CSV-Datei in data / data / com.example.myapp / files

Als ich zum ersten Mal versuchte, auf diese Datei auf meinem Nexus 6 zuzugreifen, stellte ich fest, dass ich das Gerät rooten musste. Ich konnte den Datenordner sehen, aber der Versuch, ihn zu öffnen, funktionierte nicht. Wie an anderen Stellen online erwähnt, würde das expand + verschwinden und kurz darauf wieder angezeigt werden (Hinweis: Es gibt Lösungen im Web, die behaupten, den Zugriff auf diese Ordner ohne Rooting zu ermöglichen. Ich habe sie erst zu spät gefunden und bin es auch Ich bin mir nicht sicher, ob ich es sowieso vorziehen würde, nicht zu rooten ((ich würde es lieber manuell tun können, als mich auf eine App oder eine Eingabeaufforderung zu verlassen, um mir meine Lösungen zu geben)). Ich habe meine 6 gerootet und DDMS erneut versucht.

Zu diesem Zeitpunkt zeigte es mir den Datenordner und ich konnte den Ordner erweitern und die com sehen. Verzeichnisse, aber ich konnte keines von ihnen öffnen. Dann entdeckte ich die obige Lösung. Die anfänglichen Anweisungen würden in diesem Teil nicht funktionieren:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

Zu diesem Zeitpunkt habe ich die von mir veröffentlichte Lösung ausprobiert:

chmod 777 /data /data/data /data/data/*

Diese Lösung schien zu funktionieren, aber nur für bestimmte Ordner. Ich konnte jetzt meinen myapp-Ordner erweitern, aber das Dateiverzeichnis darin nicht erweitern.

Zu diesem Zeitpunkt habe ich eine Weile herumgespielt und dann herausgefunden, warum ich es nicht einfach in dem Verzeichnis versuche, das ich brauche, anstatt diese Platzhaltereinträge auszuprobieren.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Gefolgt von:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Mit diesen Befehlen konnte ich die Dateien im Verzeichnis meiner App erweitern und anzeigen, um zu bestätigen, dass die CSV-Datei korrekt gespeichert wurde.

Hoffe das hilft jemandem. Ich hatte stundenlang damit zu kämpfen!

(Um dies noch ein bisschen weiter zu verschärfen, wurden die Berechtigungen seltsamerweise nicht an die CSV-Datei übergeben, die an das Dateiverzeichnis übergeben wurde. Meine Dateiverzeichnisberechtigungen lauten drwxrwxrwx und meine log.csv-Dateiberechtigungen lesen -rw-rw --- - .. Nur zu deiner Information)


2

Sie können eine Sigle-Datei wie folgt herunterladen:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Vor dem Herunterladen möchten Sie möglicherweise nicht die Dateistruktur in Ihrem App-Verzeichnis überprüfen. Führen Sie dazu die THelperoben genannten Schritte aus :

adb shell
run-as com.your.packagename 
cd files
ls -als .

Die erwähnte Android-Studio- Methode Shahidul( https://stackoverflow.com/a/44089388/1256697 ) funktioniert ebenfalls. Für diejenigen, die die DeviceFile ExplorerOption nicht im Menü sehen: Öffnen Sie unbedingt das Verzeichnis / android-Directory in Android Studio. Beispielsweise haben reaktionsnative Benutzer dies in ihrem Projektordner direkt auf derselben Ebene wie das / ios-Verzeichnis.


1

Eine der einfachen Möglichkeiten besteht darin, Ihre Datenbank auf einer SD-Karte zu erstellen. Weil Sie keinen Zugriff auf den Datenordner Ihres Telefons im internen Speicher erhalten, es sei denn, Sie rooten Ihr Telefon. Warum also nicht einfach Ihre Datenbank auf SD-Karte erstellen?

Wenn Sie möchten, können Sie außerdem einen Dateikopiercode schreiben, um Ihre vorhandene Datenbankdatei (vom internen Speicher) in den externen Speicher zu kopieren, ohne dass Root erforderlich ist.


wie es geht? Wie kann ich eine Datenbank in SD-Karte erstellen
Naveen Prince P

Diese Methode hilft Ihnen beim Erstellen einer Datenbank auf einer SD-Karte. File
Geben

1

Für den Zugriff auf diesen Ordner benötigen Sie möglicherweise Administratorrechte.

Sie haben also zwei Möglichkeiten: -

  1. Rooten Sie Ihr Gerät und versuchen Sie dann, auf diesen Ordner zuzugreifen
  2. Emulator verwenden

ps: Wenn Sie eine der beiden oben genannten Optionen verwenden, können Sie mit den folgenden Schritten auf diesen Ordner zugreifen

Öffnen Sie die DDMS-Perspektive -> Ihr Gerät -> (Wählen Sie Datei-Explorer aus den Optionen des rechten Fensters) Wählen Sie Paket -> Daten -> Daten -> Paketname -> Dateien

und von dort aus können Sie Ihre Datei aufrufen


1

adb backuphat bei mir nicht funktioniert, also habe ich Folgendes getan (Xiaomi Redmi Note 4X, Android 6.0):
1. Gehen Sie zu Einstellungen> Zusätzliche Einstellungen> Sichern & Zurücksetzen> Lokale Sicherungen .
2. Tippen Sie unten auf dem Bildschirm auf "Sichern".
3. Deaktivieren Sie die Kontrollkästchen "System" und "Apps".
4. Tippen Sie rechts in der Zelle "Apps" auf die Schaltfläche zur Offenlegung von Details, um zum App-Auswahlbildschirm zu navigieren.
5. Wählen Sie die gewünschte App aus und tippen Sie auf OK.
6. Nach Abschluss der Sicherung muss die eigentliche Datei irgendwie gefunden werden. Meins konnte unter / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ gefunden werden .
7. Dann folgte ich den Schritten aus dieser Antwort von RonTLVUm die Sicherungsdatei (in meinem Fall .bak) tatsächlich in tar zu konvertieren (Duplizieren von der ursprünglichen Antwort):
"
a) Gehen Sie hier und laden Sie Folgendes herunter: https://sourceforge.net/projects/adbextractor/
b) Extrahieren Sie die heruntergeladene Datei und Navigieren Sie zu dem Ordner, in den Sie extrahiert haben.
c) Führen Sie diesen mit Ihren eigenen Dateinamen aus: java -jar abe.jar entpacken c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

Sie können diese Datenbankdatei an eine beliebige Stelle im Eclipse-Explorer kopieren (z. B. SD-Karte oder PC), und Sie können SQLite verwenden, um auf diese Datenbankdatei zuzugreifen und diese zu aktualisieren.



0

Sie können auch versuchen, die Datei in den SD-Kartenordner zu kopieren, der ein öffentlicher Ordner ist. Anschließend können Sie die Datei auf Ihren PC kopieren, wo Sie mit SQLite darauf zugreifen können.

Hier ist ein Code, mit dem Sie die Datei von Daten / Daten in einen öffentlichen Speicherordner kopieren können:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

Auf alle Aktionen zum Kopieren von Dateien kann nicht zugegriffen werden, wenn die Datei keine Leseberechtigung für andere freigegeben hat
Steve Luck

0

Die SQLlite-Datenbank wird auf dem Telefon des Benutzers gespeichert und unter folgendem Pfad versteckt:

/Data/Data/com.companyname.AppName/File/

Sie haben hier 2 Möglichkeiten:

  1. Sie können Ihr Telefon rooten, damit Sie Zugriff auf Ihre versteckte DB3-Datei erhalten
  2. Dies ist keine Lösung, sondern eine Umgehung. Warum nicht einfach eine Testseite erstellen, auf der Ihre Datenbanktabelle mit der Anweisung 'select' angezeigt wird?
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.