Warum bekomme ich Zugang zum Datenordner, wenn ich adb benutze?

Ich habe mit dem adb und den folgenden Befehlen eine Verbindung zu meinem Live-Gerät hergestellt:

C:\>adb -s HT829GZ52000 shell $ ls ls sqlite_stmt_journals cache sdcard etc system sys sbin proc logo.rle init.trout.rc init.rc init.goldfish.rc init default.prop data root dev $ cd data cd data $ ls ls opendir failed, Permission denied 

Ich war überrascht zu sehen, dass ich Zugriff verweigert habe. Wieso kann ich die Verzeichnisse nicht mit der Kommandozeile durchsuchen?

Wie bekomme ich Root-Zugriff auf mein Telefon?

Es gibt zwei Dinge zu beachten, wenn Sie alles auf Ihrem Gerät durchsuchen möchten.

  1. Sie benötigen ein Telefon mit Root-Zugriff, um den Datenordner auf einem Android-Telefon zu durchsuchen. Entweder haben Sie ein Entwicklergerät ( ADP1 oder ein ION von Google I / O) oder Sie haben eine Möglichkeit gefunden, Ihr Telefon auf andere Weise zu “rooten”.
  2. Sie müssen ADB im Root-Modus ausführen, indem Sie adb root ausführen: adb root

Ab der API-Stufe 8 (Android 2.2) können Sie für die debugbare Anwendung (die von Android Studio alle Male erstellt wurde, es sei denn, der Release-Build wurde angefordert) den Befehl shell run-as , um einen Befehl oder eine ausführbare Datei auszuführen Benutzer / Anwendung oder wechseln Sie einfach zur UID Ihrer Anwendung, damit Sie auf ihr Datenverzeichnis zugreifen können .

Verzeichnisinhalt von yourapp auflisten:

 run-as com.yourapp ls -l /data/data/com.yourapp 

Wechseln Sie zur UID von com.yourapp und führen Sie alle weiteren Befehle mit dieser uid aus (bis Sie exit aufrufen):

 run-as com.yourapp cd /data/data/com.yourapp ls -l exit 

Hinweis 1 : Bei einigen HTC Desire-Telefonen ist ein Problem bekannt . Aufgrund eines nicht standardmäßigen Besitzers / Berechtigungen des Verzeichnisses /data/data kann run-as Befehl run-as auf diesen Telefonen nicht ausgeführt werden.

Hinweis 2 : Wie in den Kommentaren von @Avio gezeigt: run-as hat auch Probleme mit Samsung Galaxy S-Telefonen, die Cyanogenmod in einer beliebigen Version (von 7 bis 10.1) /datadata da auf dieser Plattform /data/data ein Symlink zu /datadata . Eine Möglichkeit, das Problem zu lösen, besteht darin, den Symlink durch das eigentliche Verzeichnis zu ersetzen (leider erfordert dies normalerweise Root-Zugriff).

bevor wir anfangen, hast du ein gerootetes telefon? Wenn nicht, schlage ich vor, dass es an der Zeit ist, den Sprung zu machen. 99% der Tutorials, die Ihnen dabei helfen, erfordern, dass Sie ein gerootetes Telefon haben (Ich weiß b / c Ich habe ungefähr eine Stunde damit verbracht, nach einem Weg zu suchen, ohne ein verwurzeltes Telefon zu haben .. konnte keine finden .. ) Auch wenn Sie darüber nachdenken, muss Ihr iPhone auch verwurzelt sein, um diese Aufgabe zu erledigen. Es ist also völlig in Ordnung. Mehr über das Rooten am Ende der Antwort.

von deiner Kommandozeile aus:

 adb shell 

Das bringt Sie zu Ihrer Android-Shell-Befehlszeile (Sie sollten etwa Folgendes sehen: shell@android:/ $ Geben Sie nun Folgendes ein:

 shell@android:/ $run-as com.domain.yourapp 

Dies sollte Sie direkt in das Datenverzeichnis von com.domain.yourapp :

 shell@android:/data/data/com.domain.yourapp $ 

Wenn dies nicht der Fall ist (dh wenn Sie einen Fehler erhalten), haben Sie wahrscheinlich kein verwurzeltes Telefon oder Sie haben Ihre Root-Benutzerrechte nicht verwendet. Um Ihre Root-Benutzerrechte zu verwenden, geben Sie su in der adb-Befehlszeile ein und sehen Sie, was passiert, wenn Sie einen Fehler erhalten, dann ist Ihr Telefon nicht gerootet. Wenn dies nicht der Fall ist, führen Sie es zuerst aus und fahren Sie dann mit diesen statementen fort.

Von dort können Sie ls eingeben und Sie werden alle Verzeichnisse einschließlich der dbs sehen:

 shell@android:/data/data/com.domain.yourapp $ ls cache databases lib shared_prefs 

Danach können Sie sqlite3 verwenden, um die dbase zu durchsuchen. Wenn Sie es nicht installiert haben (Sie können es herausfinden, indem Sie sqlite3 , wenn Sie den command not found haben, müssen Sie ihn installieren. Um sqlite zu installieren, folgen Sie statementen hier .

über Verwurzelung: Wenn Sie Ihr Telefon noch nie verwurzelt haben und Sie sich Sorgen machen, dass es Ihr Telefon schraubt, kann ich Ihnen voller Zuversicht sagen, dass Sie sich keine Sorgen machen müssen. Es gibt Tonnen von schnellen und einfachen Telefon Rooting-Tutorials für so ziemlich alle neuen und alten Modelle da draußen, und Sie können Ihr Telefon root, auch wenn Sie einen Mac (ich habe meine s3 mit meinem Mac verwurzelt).

$ adb-Shell

$ cd / Daten

$ ls

opendir ist fehlgeschlagen, Berechtigung verweigert


Du solltest das tun:

 $ adb shell $ cd /data shell@android:/data $ run-as com.your.package shell@android:/data/data/com.your.package $ ls 

OK!

Ich hatte ein ähnliches Problem, wenn ich versuchte, auf einem gerooteten Samsung Galaxy S zu operieren. Einen Befehl von der Computerschale auszustellen

 > adb root 

schlägt mit einer Nachricht fehl, die in Produktions-Builds nicht als root ausgeführt werden kann. Hier ist eine einfache Methode, die es ermöglicht, root zu werden.

Geben Sie statt des vorherigen die folgenden zwei Befehle nacheinander ein

 > adb shell $ su 

Nach dem ersten Befehl, wenn die Eingabeaufforderung wie oben gezeigt von ‘>’ in ‘$’ geändert wurde, bedeutet dies, dass Sie die ADB-Shell-Umgebung eingegeben haben. Wenn sich die Eingabeaufforderung nach dem zweiten Befehl in ‘#’ geändert hat, bedeutet das, dass Sie jetzt root sind. Als root können Sie nun mit Ihrem Gerät alles machen, was Sie wollen.

Um zurück zur “sicheren” Shell zu wechseln, gib es aus

 # exit 

Sie werden sehen, dass die Eingabeaufforderung ‘$’ erneut angezeigt wird, was bedeutet, dass Sie sich in der AdB-Shell als Benutzer und nicht als Root befinden.

Ich hatte auch eine Menge Probleme damit. Ich verstehe immer noch nicht vollständig die Erlaubnis und Root-Lauf, aber das funktionierte für mich (eine der vorherigen Antworten teilweise) zu databasedatei aus / data / data / [Paketname] /databases/my_db.db zu kopieren. Das Ausführen von Shell-Root oder su in der Shell aus irgendeinem Grund funktionierte nicht, noch das Kopieren der db-Datei (ich konnte jedoch zu dem Verzeichnis navigieren), noch tat sqlite3 .

Also, das hat funktioniert! In der DOS-Eingabeaufforderung:

 C:\Program Files\Android\android-sdk\platform-tools>adb shell 1|shell@android:/ $ run-as de.vogella.android.locationapi.maps run-as de.vogella.android.locationapi.maps 1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data cd /data shell@android:/data $ cd data cd data shell@android:/data/data $ cd de.vogella.android.locationapi.maps cd de.vogella.android.locationapi.maps shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases cd databases shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls ls bus_timetable_lines.db bus_timetable_lines.db-journal shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus _timetable_lines.db > /sdcard/db_copy.db bus_timetable_lines.db > /sdcard/db_copy.db < shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit ^ exit shell@android:/ $ exit exit C:\Program Files\Android\android-sdk\platform-tools> 

Gehen Sie nun in das SDCARD-Verzeichnis und holen Sie sich die Datei db_copy.db. Sogar das war versteckt, aber ich schaffte es, es zu mailen. Zurück in Windows konnte ich die db-Datei mit SQLite Database Browser öffnen. 🙂

Im Folgenden sind die zwei Schritte, um Root-Zugriff zu erhalten:

  1. Ihre Android-Geräte müssen verwurzelt sein.
  2. Geben Sie in der ADB-Shell su ein, und das Android-Gerät fragt y / n? Sie wählen zulassen.

Das Problem könnte sein, dass wir speziell adb root Zugriff in den Entwicklungsoptionen in den neuesten CMs geben müssen. Hier ist was ich getan habe.

abc @ abc-L655: ~ $ sudo adb kill-server
abc @ abc-L655: ~ $ sudo adb root Start-Server * Daemon läuft nicht. Starten Sie jetzt auf Port 5037 * * Daemon startete erfolgreich * root-Zugang ist durch Systemeinstellung deaktiviert – in den Einstellungen aktivieren -> Entwicklungsoptionen

nach Änderung der Entwicklungsmöglichkeiten …

 abc@abc-L655:~$ sudo adb kill-server abc@abc-L655:~$ sudo adb root start-server * daemon not running. starting it now on port 5037 * * daemon started successfully * restarting adbd as root abc@abc-L655:~$ adb shell root@android:/ # ls /data/ .... good to go.. 

Produktions-Builds können nicht in / data / app eingegeben werden

 drwxrwx--- system cache 1970-01-01 08:00 cache drwxrwxr-x root system 1970-01-01 08:00 mnt drwxrwx--x system system 1970-01-01 08:15 data 

Möglicherweise müssen Sie den richtigen Besitzer wechseln, um ihn zu bedienen.

Wenn Sie das Anwendungspaket kennen, können Sie direkt in diesen Ordner cd .

zB cd data/data/com.yourapp

Dadurch werden Sie in ein Verzeichnis mit read/writable damit Sie die Dateien nach Bedarf ändern können. Da der Ordner im emulator identisch ist, können Sie den Ordnerpfad verwenden.

Wenn Sie nur Ihre DB und Tabellen sehen möchten, dann ist der einfachste Weg, Stetho zu verwenden. Ziemlich cooles Tool für jeden Android-Entwickler, der SQLite Buit von Facobook developed .

Steps to use the tool

  1. Fügen Sie unten die Abhängigkeiten in der Anwendungsdatei hinzu (Modul: app)

‘kompilieren’ com.facebook.stetho: stetho: 1.4.2 ‘

  1. Fügen Sie in Ihrer Activity onCreate () -Methode die folgenden Codezeilen hinzu
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); } 

Erstellen Sie jetzt Ihre Anwendung & Wenn die App ausgeführt wird, können Sie Ihre App-database durchsuchen, indem Sie in der URL chrome öffnen:

 chrome://inspect/#devices 

Screenshots der gleichen sind wie unten_

ChromeInspact

ChromeInspact

Deine DB

Deine DB

Hoffe das wird allen helfen! 🙂

Ohne das Gerät zu rooten, können Sie auf die Dateien mit folgendem Befehl zugreifen:

  1. Starten Sie das Adb mit cmd aus dem platform-tools-Ordner nach Ihrem Benutzer

     cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools 

    Es kann in einem anderen Ordner sein hängt davon ab, wo Sie es installiert haben.

  2. Anzeige der Arbeitsgeräte

     adb devices 

    zum Beispiel die Antwort des Befehls ist

     List of devices attached 0123456789ABCDEF device 
  3. schreibe den Befehl

      adb -s 0123456789ABCDEF shell "su" 

    es öffnet sich in

      root@theDeviceName:/ # 

4.Zugriff auf Dateien, listet alle Dateien auf

 ls 

und so weiter chang-Verzeichnis zu wo auch immer wie der Datenordner

 cd data/data 

Wenn Sie sich im Shell-Verzeichnis für das Gerät befinden. Lauf einfach

 su - root 

Dann sollten Sie in der Lage sein, auf den Daten / Ordner zuzugreifen.