Warum wird mir der Zugriff auf den Datenordner verweigert, wenn ich adb verwende?

StackOverflow https://stackoverflow.com/questions/1043322

  •  20-08-2019
  •  | 
  •  

Frage

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?

War es hilfreich?

Lösung

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

  1. Sie benötigen ein Telefon mit Root-Zugriff haben, um den Datenordner auf einem Android-Handy zu suchen. Das bedeutet, dass Sie entweder ein Entwickler-Gerät haben ( ADP1 oder ein ION von Google I / O) oder Sie haben eine gefunden Art und Weise zu ‚root‘ Ihr Telefon auf eine andere Weise.
  2. Sie müssen ADB im root-Modus ausgeführt werden, tun dies, indem die Ausführung: adb root

Andere Tipps

Ausgehend von API-Ebene 8 (Android 2.2), für die debug Anwendung (der einen gebaut von Android Studio alle Zeiten, wenn der Release-Build angefordert wurde), können Sie die Shell run-as Befehl verwenden können, einen Befehl oder eine ausführbare Datei als ein laufen bestimmten Benutzer / Anwendung oder wechseln Sie einfach auf die UID Ihrer Anwendung so können Sie den Zugriff auf Daten Verzeichnis.

Liste Verzeichnisinhalt von yourapp:

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

Zur UID von com.yourapp und führen alle weiteren Befehle, die uid mit (bis Sie rufen exit):

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


Hinweis 1 : Es gibt ein Problem bekannt mit einige HTC Desire-Handys. Wegen eines Nicht-Standard-Besitzer / Berechtigungen des /data/data Verzeichnis, run-as Befehl schlägt fehl, auf diesen Telefonen laufen.

Hinweis 2 : Wie in den Kommentaren von @Avio hingewiesen: run-as hat Probleme auch mit Samsung Galaxy S-Telefonen CyanogenMod zu jeder Version laufen (7-10,1), da auf dieser Plattform /data/data ist ein symbolischer Link auf /datadata. Eine Möglichkeit, das Problem zu lösen, ist die Symlink mit dem aktuellen Verzeichnis zu ersetzen (leider in der Regel erfordert Root-Zugriff).

, bevor wir beginnen, Haben Sie eine verwurzelten Handy? wenn nicht, empfehle ich, dass es Zeit Sie den Sprung zu machen. 99% der Tutorials, die Ihnen helfen, dies zu tun erfordert, dass Sie ein verwurzeltes Telefon haben (ich weiß, b / c ich etwa eine Stunde verbrachte Suche nach einem Weg, es zu tun, ohne ein verwurzeltes Telefon mit .. nicht finden konnte .. ) auch, wenn man darüber nachdenkt, wird Ihr iPhone hat auch zu tun, um diese gleiche Aufgabe verwurzelt sein. Es ist also völlig in Ordnung. Mehr über am Ende der Antwort Verwurzelung.

von der Befehlszeile ein:

adb shell

Sie gelangen auf Ihrem Android-Shell comand Linie (Sie sollten etwas sehen: shell@android:/ $ jetzt ein:

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

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

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

, wenn dies nicht der Fall (dh, wenn Sie einen Fehler), dann werden Sie wahrscheinlich nicht über ein verwurzelte Telefon, oder Sie haben Ihre Rootberechtigungen nicht verwendet. Um Ihre Rootberechtigungen, Typ su auf der adb Befehlszeile zu verwenden, und sehen, was passiert, wenn Sie eine Fehlermeldung erhalten, dann bist du Telefon ist nicht verwurzelt. Wenn es nicht ist, root es zuerst, dann diese Anweisungen weiter.

von dort können Sie ls geben, und Sie werden alle Verzeichnisse einschließlich der dbs sehen:

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

cache
databases
lib
shared_prefs   

nach, dass Sie sqlite3 verwenden können, die dBASE zu durchsuchen .. wenn Sie nicht installiert ist (Sie können es, indem Sie sqlite3 herausfinden, wenn Sie command not found erhalten dann müssen Sie es zu installieren. Sqlite zu installieren, folgen Sie den Anweisungen hier .

über Verwurzelung: , wenn Sie noch nie Ihr Telefon verwurzelt, und Sie sind besorgt über Ihr Mobiltelefon Verschrauben, kann ich Ihnen mit voller Zuversicht sagen, dass es nichts zu befürchten. gibt es Tonnen schnelle und einfache Telefon Verwurzelung Tutorials für so ziemlich allen neuen und alten Modelle gibt, und Sie können Ihr Telefon auch root, wenn Sie einen Mac (ich meine s3 mit meinem mac verwurzelt) .

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

Ich hatte ein ähnliches Problem bei dem Versuch, auf einem verwurzelten Samsung Galaxy S zu betreiben einen Befehl aus dem Computer Shell-Issuing

> adb root

nicht mit einer Meldung „kann nicht ausgeführt werden als root in der Produktion baut“. Hier ist eine einfache Methode, die root werden kann.

Statt der bisherigen, geben Sie die folgenden zwei Befehle nacheinander

> adb shell
$ su

Nach dem ersten Befehl, wenn die Aufforderung von geändert hat ‚>‘ auf ‚$‘, wie oben gezeigt, bedeutet dies, dass Sie die adb Shell-Umgebung eingegeben haben. Wenn anschließend wird die Aufforderung zum ‚#‘ geändert, nachdem den zweiten Befehl ausgegeben, bedeutet das, dass man jetzt root ist. Nun, als root können Sie tun, was Sie mit Ihrem Gerät soll.

Um wieder auf 'sichere' Schale, Ausgabe

# exit

Sie werden sehen, dass die Eingabeaufforderung ‚$‘ erscheint wieder das bedeutet, dass Sie in der adb Shell als Benutzer sind und nicht als root.

hatte ich eine Menge Ärger mit diesem auch. Ich verstehe immer noch nicht vollständig die Erlaubnis und root laufen, aber das war für mich (einer der vorherigen Antworten teilweise) Datenbankdatei von / data / data / [Paketname] /databases/my_db.db zu kopieren. Ausführen von Shell root oder su in der Schale aus irgendeinem Grund nicht funktioniert hat, auch nicht das Kopieren der db-Datei (ich aber in das Verzeichnis navigieren können), noch sqlite3 .

Also, das hat geklappt! In 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>

Nun zu SDCARD Verzeichnis gehen und die Datei db_copy.db bekommen. Auch wurde das versteckt, aber ich schaffte es, eine E-Mail. Zurück in Windows konnte ich db-Datei mit SQLite Database Browser öffnen. :)

Im Folgenden werden die beiden Schritte Root-Zugriff zu erhalten:

  1. Ihr Android-Geräte müssen verwurzelt sein.
  2. In ADB Schale, Typ SU und dem Android-Gerät fordert y / n? Sie wählen können.

Produktion baut nicht eingeben / data / app

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

könnte Änderung Rechteinhaber müssen sie arbeiten.

Das Problem könnte sein, dass wir brauchen, um speziell adb Root-Zugriff in den developnent Optionen in dem neuesten CMs geben .. Hier ist, was ich tat.

  

abc @ abc-L655: ~ $ sudo adb Kill-Server
  abc @ abc-L655: ~ $ sudo adb root Start-Server   * Daemon nicht ausgeführt wird. Starten sie jetzt auf Port 5037 *   * Dämon erfolgreich gestartet * Root-Zugriff ist deaktiviert durch Systemeinstellung - ermöglicht in Einstellungen -> Entwicklungsoptionen

Nach der Entwicklung Optionen zu ändern ...

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.. 

Wenn Sie wissen, dass das Anwendungspaket Sie direkt in diesen Ordner cd kann ..

zB cd data/data/com.yourapp

das wird Sie in ein Verzeichnis löschen, die read/writable so können Sie Dateien nach Bedarf ändern. Da der Ordner das gleiche auf der emulator ist, können Sie verwenden, den Ordnerpfad zu erhalten.

Wenn Sie nur sehen wollen Ihre DB & Tabellen dann der esiest Weg ist Stetho zu verwenden. Ziemlich cool Werkzeug für jeden Android-Entwickler, die SQLite buit von Facobook developed verwendet.

Steps to use the tool

  1. Fügen Sie unter dependeccy in Ihrem application`s gradle Datei (Modul: app)
  

'kompilieren 'com.facebook.stetho: STETH: 1.4.2'

  1. Fügen Sie unter Code-Zeilen in Ihrer Aktivität onCreate () Methode
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Nun, bauen Sie Ihre Anwendung & Wenn die App ausgeführt wird, können Sie Ihre App-Datenbank durchsuchen, von Chrom in der URL zu öffnen:

chrome://inspect/#devices

Screenshots von der gleichen sind wie unten _

  

ChromeInspact

  

Ihre DB

Hoffe, dass dies für alle helfen! :)

ohne Verwurzelung , um das Gerät können Sie die Dateien zugreifen, indem Sie die folgenden Der cmd Screenshot:

  1. Starten Sie den adb mit cmd von den Plattform-Tool Ordner nach Ihrem Benutzer

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

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

  2. die Arbeitsgeräten angezeigt werden.

    adb devices
    

    sagen für die respond os der Befehl

    List of devices attached
    0123456789ABCDEF     device
    
  3. schreiben Sie den Befehl

        adb -s 0123456789ABCDEF shell "su"
    

    es öffnet sich in

        root@theDeviceName:/ #
    

Dateien 4.Accessing, listet alle Dateien

ls

und so auf chang Verzeichnis wo sonst wie der Datenordner

cd data/data

Wenn Sie in dem Shell-Verzeichnis für das Gerät sind. Führen Sie einfach

su - root

Dann sollten Sie in der Lage sein, die Daten / Ordner zugreifen zu können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top