web-dev-qa-db-fra.com

Pourquoi l'accès au dossier de données est-il refusé lors de l'utilisation de adb?

Je me suis connecté à mon périphérique en direct à l'aide de l'adb et des commandes suivantes:

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

J'ai été surpris de voir que j'ai un accès refusé. Pourquoi je ne peux pas parcourir les répertoires en utilisant la ligne de commande comme ceci?

Comment obtenir un accès root sur mon téléphone?

168
gregm

Si vous souhaitez tout parcourir sur votre appareil, vous devez vous rappeler deux choses.

  1. Vous devez disposer d'un téléphone avec un accès root pour pouvoir parcourir le dossier de données sur un téléphone Android. Cela signifie que vous possédez un périphérique de développement ( ADP1 ou un ION de Google I/O) ou que vous avez trouvé le moyen de "rooter" votre téléphone d'un autre façon.
  2. Vous devez exécuter ADB en mode racine. Pour ce faire, exécutez: adb root
133
Reto Meier

À partir de l’API niveau 8 (Android 2.2), pour l’application débogable (celle construite par Android Studio toutes les fois sauf si la version de construction a été demandée), vous pouvez utiliser la commande Shell run-as pour lancez une commande ou un exécutable en tant qu’utilisateur/application spécifique ou passez simplement au UID de votre application pour pouvoir accéder à ses données répertoire.

Liste le contenu du répertoire de votre application:

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

Basculez vers l'UID de com.yourapp et exécutez toutes les commandes ultérieures à l'aide de cet uid (jusqu'à ce que vous appeliez exit):

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


Remarque 1 : il existe un problème conn avec certains téléphones HTC Desire. En raison d'un propriétaire/autorisations non standard du répertoire /data/data, la commande run-as ne s'exécute pas sur ces téléphones.

Note 2 : Comme indiqué dans les commentaires de @Avio: run-as a également des problèmes avec les téléphones Samsung Galaxy S exécutant CyanogenMod, quelle que soit leur version (à partir de 7 à 10.1) car sur cette plate-forme, /data/data est un lien symbolique vers /datadata. Un moyen de résoudre le problème consiste à remplacer le lien symbolique par le répertoire réel (malheureusement, cela nécessite généralement un accès root).

202
Idolon

avant de commencer, avez-vous un téléphone enraciné ? sinon, je suggère fortement qu'il soit temps de faire le saut. 99% des tutoriels qui vous aident à faire cela nécessitent que vous ayez un téléphone enraciné (je sais, car j'ai passé environ une heure à chercher un moyen de le faire sans avoir un téléphone enraciné. Je n'en ai trouvé aucun. ) également si vous y réfléchissez, votre iPhone doit également être enraciné pour effectuer la même tâche. Donc c'est totalement raisonnable. En savoir plus sur l'enracinement à la fin de la réponse.

à partir de votre ligne de commande, tapez:

adb Shell

ceci vous amène à votre Android ligne de commande Shell (vous devriez voir quelque chose comme ceci: Shell@Android:/ $ maintenant, tapez:

Shell@Android:/ $run-as com.domain.yourapp

ceci devrait vous mener directement au répertoire de données de com.domain.yourapp:

Shell@Android:/data/data/com.domain.yourapp $ 

si ce n'est pas le cas (c'est-à-dire si vous obtenez une erreur), vous n'avez probablement pas de téléphone rooté, ou vous n'avez pas utilisé vos privilèges d'utilisateur root. Pour utiliser vos privilèges d’utilisateur root, tapez su sur la ligne de commande adb et voyez ce qui se passe. Si vous obtenez une erreur, votre téléphone n’est pas enraciné. Si ce n'est pas le cas, lancez-le d'abord puis poursuivez ces instructions.

à partir de là, vous pouvez taper ls et vous verrez tous les répertoires, y compris les dbs:

Shell@Android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

après cela, vous pouvez utiliser sqlite3 pour parcourir la base de données .. si vous ne l’avez pas installé (vous pouvez le trouver en tapant sqlite3, si vous obtenez command not found, vous devrez l’installer ensuite. . Pour installer sqlite, suivez les instructions ici .

sur l'enracinement: Si vous n'avez jamais installé votre téléphone auparavant et que vous craignez de le visser, je peux vous dire en toute confiance qu'il n'y a rien à craindre. il existe des tonnes de didacticiels d’enracinement rapide et facile pour pratiquement tous les modèles, anciens et nouveaux, et vous pouvez rooter votre téléphone même si vous avez un mac (j'ai enraciné mon s3 avec mon mac).

44
abbood

$ adb Shell

$ cd/data

$ ls

opendir a échoué, autorisation refusée


Vous devriez faire ceci:

$ adb Shell

$ cd /data

Shell@Android:/data $ run-as com.your.package 

Shell@Android:/data/data/com.your.package $ ls

D'ACCORD!

40
HelloWorld

J'ai eu un problème similaire lorsque j'essayais de faire fonctionner un Samsung Galaxy S enraciné. Émission d'une commande à partir de l'ordinateur Shell

> adb root

échoue avec le message "ne peut pas être exécuté en tant que root dans les versions de production". Voici une méthode simple qui permet de devenir root.

Au lieu de la précédente, lancez les deux commandes suivantes l'une après l'autre

> adb Shell
$ su

Après la première commande, si l’invite est passée de '>' à '$' comme indiqué ci-dessus, cela signifie que vous avez entré l’environnement Shell adb. Si, par la suite, l'invite a changé en '#' après avoir émis la deuxième commande, cela signifie que vous êtes maintenant root. Maintenant, en tant que root, vous pouvez faire tout ce que vous voulez avec votre appareil.

Pour revenir au shell "sécurisé", lancez

# exit

Vous verrez que l'invite '$' réapparaît, ce qui signifie que vous êtes dans le shell adb en tant qu'utilisateur et non en tant que root.

29
rytis

J'ai eu beaucoup de problèmes avec cela aussi. Je ne comprends toujours pas bien les permissions et la racine, mais cela a fonctionné pour moi (une des réponses précédentes en partie) pour copier le fichier de base de données à partir de/data/data/[nom du paquet] /databases/my_db.db. Fonctionnement Shell root, ou su dans Shell pour une raison quelconque ne fonctionnait pas, ni la copie du fichier db (je pouvais naviguer dans le répertoire), ni sqlite3.

Donc, cela a fonctionné! Dans l'invite de commande DOS:

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>

Allez maintenant dans le répertoire SDCARD et récupérez votre fichier db_copy.db. Même cela était caché, mais j'ai réussi à l'envoyer par courrier électronique. De retour dans Windows, j'ai pu ouvrir le fichier db avec SQLite Database Browser. :)

19
MSquare

Voici les deux étapes pour obtenir un accès root:

  1. Vos appareils Android doivent être enracinés.
  2. Dans le shell ADB, tapez su et le périphérique Android affichera une invite y/n? Vous choisissez autoriser.
3
VietHuong

les versions de production ne peuvent pas entrer/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

peut avoir besoin de changer de propriétaire pour le faire fonctionner.

2
keith

Le problème pourrait être que nous devions donner spécifiquement un accès root à adb dans les options de développement des derniers MC. Voici ce que j’ai fait.

abc @ abc-L655: ~ $ Sudo adb kill-server
abc @ abc-L655: Le démon ~ $ Sudo adb root start-server * n'est pas en cours d'exécution. en le démarrant maintenant sur le port 5037 * * le démon a été lancé avec succès * l'accès root est désactivé par les paramètres système - activé dans les paramètres -> options de développement

après avoir modifié les options de développement ...

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

si vous connaissez le package d'application, vous pouvez cd directement dans ce dossier.

par exemple cd data/data/com.yourapp

cela vous déposera dans un répertoire qui est read/writable afin que vous puissiez modifier les fichiers si nécessaire. Comme le dossier est le même sur le emulator, vous pouvez l’utiliser pour obtenir le chemin du dossier.

1
Mark

Si vous voulez juste voir votre base de données et vos tables , alors la façon la plus simple est d'utiliser Stetho. Outil plutôt cool pour chaque développeur Android qui utilise SQLite buit par Facobook developed.

Steps to use the tool

  1. Ajouter ci-dessous la dépendance dans le fichier de gradation de votre application (Module: app)

'compiler' com.facebook.stetho: stetho: 1.4.2 '

  1. Ajoutez des lignes de code ci-dessous dans votre méthode Activity onCreate ()
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Maintenant, construisez votre application et lorsque l'application est en cours d'exécution, vous pouvez parcourir votre base de données d'applications en ouvrant chrome dans l'URL:

chrome://inspect/#devices

Les images de la même chose sont comme ci-dessous_

ChromeInspact

ChromeInspact

Votre DB

Your DB

J'espère que cela aidera à tous! :)

0
Rupesh Yadav