web-dev-qa-db-ger.com

Wie kann ich auf Daten/Datenordner auf einem Android-Gerät zugreifen?

Ich entwickle eine App und weiß, dass meine Datenbank *.db in data/data/com.****.*** angezeigt wird.

Ich kann auf diese Datei von AVD in Eclipse mit Hilfe des sqlite Managers zugreifen

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

Also hier meine Frage: Wie kann ich auf mein data/data/.....-Verzeichnis in meinem Android-Telefon " zugreifen, ohne es zu verwurzeln "? 

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

257
Naveen Prince

Der direkte Zugriff auf die Dateien über das Telefon ist schwierig, aber Sie können sie möglicherweise auf Ihren Computer kopieren, wo Sie alles tun können, was Sie damit machen möchten.

  1. Wenn die Anwendung fehlerhaft ist, können Sie den Befehl run-as 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 das Lesen der Daten sonst schwieriger wird. Klicken Sie einfach auf "Meine Daten sichern". Die resultierende "backup.ab" -Datei auf Ihrem Computer enthält alle Anwendungsdaten im Android-Sicherungsformat. Im Grunde handelt es sich um eine komprimierte TAR-Datei. Auf dieser Seite wird erklärt, wie Sie den Befehl zlib von OpenSSL verwenden können, um die Dekomprimierung durchzuführen. Sie können den Befehl adb restore backup.db verwenden, um die Sicherung wiederherzustellen. 

317
THelper

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

  1. Klicken Sie auf View> Tool Windows> Device File Explorer
  2. Erweitern Sie die Knoten / data/data/[Paketname]

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

 Steps followed in Android Studio 3.0

90
Shahidul

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. Wechseln Sie in Ihr Verzeichnis und rufen Sie "Plattform-Tools" auf.
  3. Tippe 'adb Shell'
  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 den 'FileExplorer', um die gewünschte Datei abzurufen

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

60

Um eine der oben genannten Aktionen auszuführen (d. H. Von Ihrem Telefon aus auf geschützte Ordner zugreifen zu können), benötigen Sie noch root. (Dazu gehört das Ändern der Mount-Berechtigungen für den Ordner/data und der Zugriff darauf.)

Ohne root ist der direkte Zugriff auf den /data zum Lesen außer in Ihrer Anwendung über Code nicht möglich. Sie können also versuchen, die Datei auf die SD-Karte oder an einen anderen Ort zu kopieren, und dann sollten Sie normalerweise darauf zugreifen können.

Bei einem Neustart erlischt Ihre Garantie nicht, wenn Sie ein Entwicklergerät haben. Entschuldigung, es gibt keine andere Möglichkeit, AFAIK.

21
  1. Öffnen Sie die 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 unten die Befehle ein
  4. adb -d Shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Ändern Sie das Verzeichnis in cd /sdcard, um sicherzustellen, dass database.db vorhanden ist.
  7. adb pull /sdcard/database.db oder Sie können database.db einfach vom Gerät kopieren.
11

Der einfachste Weg (nur ein einfacher Schritt), um eine Datei aus Ihrem debuggbaren Anwendungsordner (sagen wir /data/data/package.name/databases/file) auf einem Android 5.0-Gerät ohne Rootzugriff abzurufen, ist diesen Befehl

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

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

Eine andere Möglichkeit ist, die Datei über Adb zu ziehen:

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

Ich hatte auch einmal das gleiche Problem. Es ist nicht möglich, direkt auf die Datei auf Android-Geräten zuzugreifen, außer adb Shell oder Rooting-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

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, das chmod gab jedoch ein unbekanntes Verzeichnis zurück. Das Ändern des Befehls chmod in/data/data/* ermöglichte den Zugriff auf alle Unterordner im Datenverzeichnis von DDMS in Intellij. Ich gehe davon aus, dass die gleiche Lösung für Eclipse DDMS gilt.

UPDATE Was ich gefunden habe, ist seltsam. Ich verwende einen Nexus 6 mit DDMS in IntelliJ (Android Device Monitor). Ich habe eine kleine Starter-App gebaut. Die App speichert Daten in einer CSV-Datei in Dateien data/data/com.example.myapp /

Als ich zum ersten Mal versuchte, auf diese Datei auf meinem Nexus 6 zuzugreifen, stellte ich fest, dass ich das Gerät rooten muss. Ich konnte den Datenordner sehen, aber der Versuch, es zu öffnen, funktionierte nicht. Wie an anderen Stellen online erwähnt, würde das expand + verschwinden und kurz danach wieder erscheinen (Hinweis: Es gibt Lösungen im Internet, die behaupten, den Zugriff auf diese Ordner zu erlauben, ohne sie zu verwurzeln. Ich habe sie erst zu spät gefunden Ich bin mir nicht sicher, ob ich lieber nicht rooten möchte ((ich könnte es lieber manuell tun, als sich auf eine App oder den Befehl Aufforderung zu verlassen, um mir meine Lösungen zu geben))). Ich verwurzelte meine 6 und versuchte DDMS erneut. 

An diesem Punkt zeigte es mir den Datenordner und ich konnte den Ordner erweitern und die COM sehen. Verzeichnisse, aber ich konnte keines davon öffnen. Dann entdeckte ich die obige Lösung. Die ersten Anweisungen würden an diesem Teil nicht funktionieren:

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

Dann habe ich die Lösung ausprobiert:

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

Diese Lösung schien zu funktionieren, jedoch nur für bestimmte Ordner. Ich konnte jetzt meinen Ordner "myapp" erweitern, konnte jedoch das Verzeichnis "files" nicht erweitern.

An diesem Punkt habe ich eine Weile herumgespielt und dann herausgefunden, warum ich es nicht einfach in dem Verzeichnis probiere, das ich brauche, anstatt diese Platzhalter-Einträge zu versuchen.

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 ordnungsgemäß gespeichert wurde.

Hoffe das hilft jemandem. Ich kämpfte stundenlang damit!

(Um dies noch ein wenig zusammenzusetzen, wurden die Berechtigungen seltsamerweise nicht an die CSV-Datei übergeben, die an das Dateiverzeichnis übergeben wurde. Meine Dateiverzeichnisberechtigungen lesen drwxrwxrwx und meine log.csv-Dateiberechtigungen lesen -rw-rw --- - .. Nur zur Info)

4
lol2dubs

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 Backup my data .. Stellen Sie sicher, dass Sie nicht im Stammverzeichnis von Laufwerk C speichern. Möglicherweise werden Sie abgelehnt ... 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
3
RonTLV

adb backup hat für mich nicht funktioniert, also habe ich Folgendes getan (Xiaomi Redmi Note 4X, Android 6.0):
1. Gehen Sie zu Einstellungen> Weitere Einstellungen> Sichern und zurücksetzen> Lokale Sicherungen.
2. Tippen Sie unten im Bildschirm auf "Zurück".
3. Deaktivieren Sie die Kontrollkästchen "System" und "Apps".
4. Tippen Sie auf die Schaltfläche zum Anzeigen von Details auf der rechten Seite der Zelle "Apps", um zum Anwendungsauswahlbildschirm zu navigieren.
5. Wählen Sie die gewünschte App aus und tippen Sie auf OK.
6. Nachdem die Sicherung abgeschlossen wurde, muss die tatsächliche Datei irgendwie lokalisiert werden. Meine konnte unter / MIUI/backup/AllBackup/_FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ gefunden werden.
7. Dann folgte ich den Schritten von dieser Antwort by RonTLV , um die Sicherungsdatei (in meinem Fall .bak) tatsächlich in tar zu konvertieren (Duplizieren aus der ursprünglichen Antwort):
"
a) Gehen Sie hier und laden Sie 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 dies mit Ihren eigenen Dateinamen aus: Java -jar abe.jar entpacken Sie c:\Intel\xxx.ab c:\Intel\xxx.tar
"

1
Russian

Eine der einfachen Möglichkeiten ist das Erstellen Ihrer Datenbank auf einer SD-Karte. Weil Sie keinen Zugriff auf den Datenordner Ihres Telefons im internen Speicher erhalten, es sei denn, Sie haben Ihr Telefon als Root angemeldet. Warum erstellen Sie Ihre Datenbank nicht einfach auf einer SD-Karte.

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

1
waqaslam

sie können diese Datenbankdatei an einen beliebigen Ort im Eclipse-Explorer kopieren (z. B.: SD-Karte oder PC), und Sie können mit SQLite auf diese Datenbankdatei zugreifen und diese aktualisieren.

0
Vito

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

sie haben also zwei Möglichkeiten: - 

  1. root dein Gerät und versuche dann auf diesen Ordner zuzugreifen
  2. emulator verwenden

p.s. : Wenn Sie eine der beiden oben genannten Optionen verwenden, können Sie auf diesen Ordner zugreifen, indem Sie die folgenden Schritte ausführen

dDMS-Perspektive öffnen -> Ihr Gerät -> (Wählen Sie Datei-Explorer aus Rechtes Fenster.) Wählen Sie Paket -> Daten -> Daten -> Paketname -> Dateien

und von dort aus können Sie Ihre Datei abrufen

0
user3829503

Sie können auch versuchen, die Datei in den SD-Kartenordner (einen öffentlichen Ordner) zu kopieren. Anschließend können Sie die Datei auf Ihren PC kopieren, wo Sie mit sqlite darauf zugreifen können.

Mit diesem Code können Sie die Datei aus Daten/Daten in einen öffentlichen Ordner kopieren:

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" />
0
live-love

Die Frage ist: Wie kann ich auf Daten-Daten-Ordner auf einem Android-Gerät zugreifen?


Wenn das Android-Gerät Bluestacks ist * Root Browser APK zeigt Daten/Daten/..


Versuchen Sie, Root Browserfrom https://apkpure.com/root-browser/com.jrummy.root.browserfree herunterzuladen


Wenn es sich bei der Datei um eine Textdatei handelt, müssen Sie auf "Öffnen als", "Textdatei", "Öffnen als", "RB-Texteditor" klicken. 

Sie können so eine Einzeldatei herunterladen: 

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

Vor dem Download sollten Sie sich die Dateistruktur in Ihrem App-Verzeichnis nicht ansehen. Führen Sie dazu die folgenden Schritte durch, die oben beschrieben werden:

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

Die Android-Studio - Weise, die Shahidul erwähnt ( https://stackoverflow.com/a/44089388/1256697 ), funktionieren ebenfalls. Für diejenigen, die die DeviceFile Explorer-Option nicht im Menü sehen: Öffnen Sie das/Android-Verzeichnis in Android Studio. Z.B. Reaktiv-native Benutzer haben dieses inside ihres Project-Folder -Rechts auf derselben Ebene wie das/ios-Directory.

0
suther