ADB-Zugriff auf Datenordner verweigert?

Lesezeit: 11 Minuten

gregms Benutzeravatar
gregm

Ich habe über adb und die folgenden Befehle 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, dass mir der Zugriff verweigert wurde. Wie kommt es, dass ich die Verzeichnisse nicht auf diese Weise über die Befehlszeile durchsuchen kann?

Wie erhalte ich Root-Zugriff auf mein Telefon?

  • Ganz einfach: Stellen Sie sicher, dass der Bildschirm Ihres Telefons eingeschaltet ist. Klicken Sie auf „Zulassen“, wenn Sie gefragt werden, ob Unknown Zugriff auf Root erhalten soll. Erledigt.

    Benutzer457909

    25. September 2010 um 2:21

  • Ich habe beschlossen, ein einfaches AVD zu erstellen, um Zugriff auf die Datenbank zu haben. Hat jemand Links zu Anleitungen ohne „benutzerdefinierte“ Blenden und Grafiken für Entwickler? So erhalten Sie Plain Vanilla Android auf einem gekauften Gerät.

    – bgs

    6. Januar 2011 um 19:20 Uhr


  • Auf meinem Android 7.1.1-Gerät erscheint keine solche Aufforderung. Aber adb geht weiter und listet den Inhalt des Verzeichnisses auf. Das Problem ist, dass der Inhalt nicht wirklich existiert. Ich verwende adb-sync, um Inhalte hinzuzufügen. Es ist ziemlich seltsam.

    – Tom Russell

    29. Juli 2018 um 6:04


Idolons Benutzeravatar
Idolon

Update 2023; Der Zugriff auf Daten ist nicht sogar über USB (Dateiübertragungsmodus) nicht mehr möglich (seit einigen Android- und/oder Samsung-Geräte-Updates). Rooten Sie Ihr Gerät.

Ursprüngliche Antwort;

Ab API-Level 8 (Android 2.2) können Sie für die debuggbare Anwendung (die immer von Android Studio erstellt wird, es sei denn, der Release-Build wurde angefordert) die Shell verwenden run-as Befehl, um einen Befehl oder eine ausführbare Datei als bestimmter Benutzer/Anwendung auszuführen oder einfach zu wechseln UID Ihrer Anwendung, damit Sie darauf zugreifen können Daten Verzeichnis.

Listen Sie den Verzeichnisinhalt Ihrer App auf:

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 anrufen). exit):

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

Anmerkung 1: da ist ein bekanntes Problem mit einigen HTC Desire-Telefonen. Aufgrund eines nicht standardmäßigen Eigentümers/einer nicht standardmäßigen Berechtigungen des /data/data Verzeichnis, run-as Der Befehl kann auf diesen Telefonen nicht ausgeführt werden.

Anmerkung 2: Wie in den Kommentaren von @Avio erwähnt:
run-as Es gibt auch Probleme mit Samsung Galaxy S-Telefonen, auf denen Cyanogenmod in jeder Version (von 7 bis 10.1) läuft, da auf dieser Plattform /data/data ist ein symbolischer Link zu /datadata. Eine Möglichkeit, das Problem zu lösen, besteht darin, den Symlink durch das tatsächliche Verzeichnis zu ersetzen (leider ist hierfür normalerweise Root-Zugriff erforderlich).

  • Das funktioniert so, wie Sie es erklärt haben run-as com.mypackage. Das Problem, auf das ich gestoßen bin, ist sqlite3 /data/data/com.mypackage/databases/mydb sagt „sqlite3: Berechtigung verweigert“. Kann sqlite3 nur von Root ausgeführt werden?

    – styfle

    27. November 2011 um 6:28

  • Funktioniert hervorragend, wenn es darum geht, im internen Speicher gespeicherte Dateien aufzulisten.

    – Zaplec

    21. Juni 2012 um 13:10 Uhr

  • Ich musste die Berechtigungen für die Datei ändern, um sie auf meine SD-Karte verschieben zu können, da ich sie nicht als meine Anwendung ausführen konnte. Also, 1) Ausführen als com.package.example, chmod 777 Datenbankdatei.db. 2) Beenden Sie, gehen Sie zur SD-Karte, cp /data/data/com.package.example/databases/databasefile.db . Und Schritt 3 sollte das Zurücksetzen der 777-Berechtigungen sein

    – Maragues

    30. April 2013 um 7:45 Uhr

  • Mein Paket ist unbekannt, egal wie richtig ich es in mein Terminal buchstabiere: (

    – Costa Michailidis

    24. Juni 2014 um 1:10

  • Dies sollte die als richtig markierte Antwort sein, da dies die richtige Methode für nicht gerootete Telefone ist.

    – LNI

    27. April 2016 um 16:43 Uhr

Benutzeravatar von Reto Meier
Reto Meier

Wenn Sie alles auf Ihrem Gerät durchsuchen möchten, müssen Sie zwei Dinge tun:

  1. Sie benötigen ein Telefon mit Root-Zugriff, um den Datenordner auf einem Android-Telefon durchsuchen zu können. Das heißt, Sie haben entweder 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. Führen Sie dazu Folgendes aus: adb root

Notiz dass Schritt 2 einfach funktioniert, wenn Schritt 1 korrekt ausgeführt wird (keine Notwendigkeit, etwas aus Quellcodes neu zu erstellen).

  • Und „adb root“ erfordert einen benutzerdefinierten Build von adb, sonst kann „adbd in Produktions-Builds nicht als Root ausgeführt werden“.

    – Bortzmeyer

    31. Januar 2011 um 13:55 Uhr

  • Benutzerdefinierter Build von ADB? Woher kann ich es bekommen?

    – Gopinath

    2. Mai 2011 um 11:09

  • @Gopinath: Ich glaube, Sie müssen es aus dem Quellcode für das Zielgerät erstellen, es so konfigurieren, dass Root die Verwendung des NDK zulässt, und es dann zusammen mit einem Image der Binärdateien auf das Gerät flashen.

    – Ben Jaguar Marshall

    2. November 2012 um 14:00 Uhr

  • AFAIK, es ist nicht notwendig, einen benutzerdefinierten Build von ADB zu haben. Es IST notwendig zu haben add unterstützt die Ausführung als Root, aber dieses ADBD befindet sich auf dem Gerät – daher reicht jede Änderung aus, die vorgenommen wurde, um dem Gerät Root-Zugriff zu verschaffen.

    – nitzanms

    1. Okt. 2014 um 11:14

  • Dies sollte nicht die akzeptierte Antwort sein. Siehe die Antwort von Idolon unten.

    – Brill Pappin

    15. November 2017 um 15:20 Uhr

Benutzeravatar von abbood
abbood

bevor wir anfangen, Hast du ein verwurzelt Telefon? Wenn nicht, empfehle ich dringend, dass es an der Zeit ist, den Sprung zu wagen. 99 % der Tutorials, die Ihnen dabei helfen, erfordern, dass Sie ein gerootetes Telefon haben (ich weiß, weil ich ungefähr eine Stunde damit verbracht habe, nach einer Möglichkeit zu suchen, dies zu tun, ohne ein gerootetes Telefon zu haben. Ich konnte keine finden.) ) Wenn Sie darüber nachdenken, muss Ihr iPhone auch gerootet sein, um dieselbe Aufgabe ausführen zu können. Es ist also völlig vernünftig. Weitere Informationen zum Rooten finden Sie am Ende der Antwort.

Geben Sie in Ihrer Befehlszeile Folgendes ein:

adb shell

Dadurch gelangen Sie zur Befehlszeile Ihrer Android-Shell (Sie sollten etwa Folgendes sehen: shell@android:/ $ Geben Sie nun Folgendes ein:

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

Dies sollte Sie direkt zum Datenverzeichnis von führen com.domain.yourapp:

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

Wenn dies nicht der Fall ist (dh wenn Sie eine Fehlermeldung erhalten), haben Sie wahrscheinlich kein gerootetes Telefon oder Sie haben Ihre Root-Benutzerrechte nicht genutzt. Geben Sie Folgendes ein, um Ihre Root-Benutzerrechte zu verwenden: su Klicken Sie in der ADB-Befehlszeile auf und sehen Sie, was passiert. Wenn Sie eine Fehlermeldung erhalten, ist Ihr Telefon nicht gerootet. Ist dies nicht der Fall, rooten Sie es zuerst und fahren Sie dann mit diesen Anweisungen fort.

Von dort aus können Sie tippen ls und Sie sehen alle Verzeichnisse einschließlich der Datenbanken:

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

cache
databases
lib
shared_prefs   

Danach können Sie sqlite3 verwenden, um die Datenbank zu durchsuchen. Wenn Sie sie nicht installiert haben (Sie können es herausfinden, indem Sie Folgendes eingeben sqlite3wenn du bekommst command not found dann müssen Sie es installieren. Um SQLite zu installieren, folgen Sie den Anweisungen hier.

zum Thema Rooten: Wenn Sie Ihr Telefon noch nie zuvor gerootet haben und befürchten, dass es Ihr Telefon kaputt macht, kann ich Ihnen mit voller Gewissheit sagen, dass es keinen Grund zur Sorge gibt. Es gibt unzählige schnelle und einfache Tutorials zum Rooten von Telefonen für praktisch alle neuen und alten Modelle. und Sie können Ihr Telefon rooten, auch wenn Sie einen Mac haben (Ich habe mein S3 mit meinem Mac gerootet).

  • Sie benötigen dafür kein gerootetes Telefon run-as arbeiten. Ich habe es gerade auf einem serienmäßig gebauten Galaxy Nexus S ausprobiert.

    – Ted Hopp

    10. Okt. 2013 um 2:44

  • @TedHopp und so funktioniert es auf Ihrem serienmäßigen Galaxy Nexus S einwandfrei. Auf allen Android-Handys funktioniert es einwandfrei, oder?

    – Abt

    2. April 2014 um 5:19

  • @TedHopp persönlich bin ich kein großer Android-Entwickler … und daher Anweisungen wie build the application as debuggable (either by building it with the Eclipse, or ant debug command) Das mag für Sie trivial klingen, aber sie machen mir irgendwie Angst. Ich denke, meine Antwort richtet sich eher an Leute, die sich mit dem Rooten ihrer Android-Telefone auskennen, sich aber in der Welt der Android-Entwickler nicht so gut auskennen. Aber ich bin froh, dass wir diese Diskussion führen. Ich möchte, dass die Leser meiner Antwort über die anderen Alternativen ohne Rootberechtigung informiert sind

    – Abt

    2. April 2014 um 11:51

  • Denken Sie auch daran, dass ich das nie behauptet habe alle Telefone müssen gerootet sein. In der ursprünglichen Antwort habe ich gesagt, dass %99 der Tutorials ein gerootetes Telefon erfordern. 😉

    – Abt

    2. April 2014 um 11:53

  • Tolle Antwort, Mann. Ich verwende hier ein paar verschiedene Telefone (MotoX, Nexus4, LG G3, SGIII) und das ist für alle ziemlich gut.

    – Chad Bingham

    3. Okt. 2014 um 22:58

$ adb-Shell

$ cd /data

$ ls

opendir 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!

Benutzeravatar von Rytis
Rytis

Ich hatte ein ähnliches Problem, als ich versuchte, auf einem gerooteten Samsung Galaxy S zu arbeiten. Ich gab einen Befehl über die Computer-Shell aus

> adb root

schlägt mit der Meldung „Kann in Produktions-Builds nicht als Root ausgeführt werden“ fehl. Hier ist eine einfache Methode, die es ermöglicht, Root zu werden.

Geben Sie anstelle des vorherigen die folgenden zwei Befehle nacheinander ein

> adb shell
$ su

Wenn sich die Eingabeaufforderung nach dem ersten Befehl wie oben gezeigt von „>“ in „$“ geändert hat, bedeutet dies, dass Sie die ADB-Shell-Umgebung aufgerufen haben. Wenn sich die Eingabeaufforderung nach dem zweiten Befehl in „#“ geändert hat, bedeutet dies, dass Sie jetzt Root sind. Jetzt können Sie als Root alles mit Ihrem Gerät machen, was Sie wollen.

Um zur „sicheren“ Shell zurückzukehren, geben Sie Folgendes ein:

# exit

Sie werden sehen, dass die Eingabeaufforderung „$“ erneut erscheint, was bedeutet, dass Sie sich in der ADB-Shell als Benutzer und nicht als Root befinden.

  • Ich erhalte die Fehlermeldung, dass „adb root“ in Produktions-Builds nicht funktioniert.

    – IgorGanapolsky

    20. April 2012 um 16:58

  • Super, danke! Übrigens benötigen Sie dazu ein gerootetes Telefon. Möglicherweise benötigen Sie auch SuperSU oder ähnliches? Zumindest als ich versuchte, „su“ zu verwenden, gab mir SuperSU einen Dialog auf meinem Telefon.

    – Richard Fung

    25. Okt. 2013 um 16:50 Uhr


  • /system/bin/sh: su: nicht gefunden

    – Matt Lohkamp

    25. Juni 2014 um 23:58

  • Danke 🙂 die adb shell + su hat die lästige Sache mit den Erlaubnissen für immer gelöst. Ich hatte ein Problem mit su: not found auf Android 4.3, aber seit ich auf 4.4.2 aktualisiert habe, ist das Problem verschwunden. 4.3 scheint Probleme zu haben.

    Benutzer1299518

    6. November 2014 um 1:21

  • su steht mir nicht zur Verfügung, Nexus 5 / Android 5.1 – gibt es einen Workaround?

    – CodeManX

    14. April 2015 um 17:24

Benutzeravatar von MSquare
MQuadrat

Ich hatte damit auch große Probleme. Ich verstehe die Berechtigung und die Root-Ausführung immer noch nicht ganz, aber das hat bei mir funktioniert (teilweise eine der vorherigen Antworten), um die Datenbankdatei aus /data/data/ zu kopieren.[package name]/databases/my_db.db . Betrieb Shell rootoder su in der Shell funktionierte aus irgendeinem Grund nicht, ebenso wenig wie das Kopieren der DB-Datei (ich konnte jedoch zum Verzeichnis navigieren) und auch nicht 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 Ihre Datei db_copy.db. Sogar das war verborgen, aber ich habe es geschafft, es per E-Mail zu versenden. Zurück in Windows konnte ich die DB-Datei mit dem SQLite-Datenbankbrowser öffnen. 🙂 🙂

  • Ich erhalte die Fehlermeldung, dass „adb root“ in Produktions-Builds nicht funktioniert.

    – IgorGanapolsky

    20. April 2012 um 16:58

  • Super, danke! Übrigens benötigen Sie dazu ein gerootetes Telefon. Möglicherweise benötigen Sie auch SuperSU oder ähnliches? Zumindest als ich versuchte, „su“ zu verwenden, gab mir SuperSU einen Dialog auf meinem Telefon.

    – Richard Fung

    25. Okt. 2013 um 16:50 Uhr


  • /system/bin/sh: su: nicht gefunden

    – Matt Lohkamp

    25. Juni 2014 um 23:58

  • Danke 🙂 die adb shell + su hat die lästige Sache mit den Erlaubnissen für immer gelöst. Ich hatte ein Problem mit su: not found auf Android 4.3, aber seit ich auf 4.4.2 aktualisiert habe, ist das Problem verschwunden. 4.3 scheint Probleme zu haben.

    Benutzer1299518

    6. November 2014 um 1:21

  • su steht mir nicht zur Verfügung, Nexus 5 / Android 5.1 – gibt es einen Workaround?

    – CodeManX

    14. April 2015 um 17:24

Roshnets Benutzeravatar
Roshnet

Dies funktioniert, wenn Ihr Android-Gerät auf irgendeine Weise gerootet ist (ich bin mir nicht sicher, ob es bei einem nicht gerooteten Gerät funktioniert).

  1. adb shell – Greifen Sie auf die Shell zu
  2. su – Werden Sie Superuser.

Sie können nun alle Dateien in allen Verzeichnissen lesen.

1454420cookie-checkADB-Zugriff auf Datenordner verweigert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy