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

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

  •  20-08-2019
  •  | 
  •  

Question

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 l'accès est refusé. Comment se fait-il que je ne puisse pas parcourir les répertoires en utilisant la ligne de commande comme ceci?

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

Était-ce utile?

La solution

Il y a deux choses à retenir si vous voulez parcourir tout votre appareil.

  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 avez soit un appareil de développement ( ADP1 ou un ION de Google I / O) ou vous avez trouvé un manière de «rooter» votre téléphone d’une autre manière.
  2. Vous devez exécuter ADB en mode racine. Pour ce faire, exécutez: adb root

Autres conseils

À partir de l'API de niveau 8 (Android 2.2), pour l'application débogable (celle générée par Android Studio toutes les fois sauf si la version de l'édition est demandée), vous pouvez utiliser le shell run-as . commande pour exécuter une commande ou un exécutable en tant qu’utilisateur / application spécifique ou simplement basculer sur UID de votre application afin que vous puissiez accéder à son répertoire données .

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.votre application et exécutez toutes les commandes ultérieures utilisant cet uid (jusqu'à ce que vous appeliez exit ):

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

& nbsp;
Note 1 : il existe un problème connu 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 (de 7 à 10.1) car sur cette plate-forme, / data / data est un lien symbolique vers / datadata . Une façon de résoudre ce problème consiste à remplacer le lien symbolique par le répertoire réel (malheureusement, cela nécessite généralement un accès root).

avant de commencer, disposez-vous d'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 type de ligne de commande:

adb shell

cela vous amène à votre ligne de commande shell android (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 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 déjà installé (vous pouvez le trouver en tapant sqlite3 , si vous obtenez une commande non trouvée puis installez-le. Pour installer sqlite, suivez les instructions ici .

sur l'enracinement: si vous n'avez jamais installé votre téléphone et que vous craignez de le faire visser, je peux vous dire en toute confiance qu'il n'y a pas de quoi s'inquiéter. 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) .

$ shell adb

$ cd / data

$ ls

échec d'opendir, 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

OK!

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

> adb root

échoue avec un 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 des précédentes, lancez les deux commandes suivantes l'une après l'autre

> adb shell
$ su

Après la première commande, si l'invite a changé de '>' comme indiqué ci-dessus, cela signifie que vous avez entré l'environnement shell adb. Si, par la suite, l'invite a été remplacée par '#' après avoir exécuté 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é", exécutez

.
# exit

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

J'ai également eu beaucoup de difficulté avec cela. Je ne comprends toujours pas bien les permissions et l'exécution root, mais cela a fonctionné pour moi (une partie des réponses précédentes) pour copier le fichier de base de données à partir de / data / data / [nom du paquet] /databases/my_db.db. Exécuter racine du shell ou su dans un shell pour une raison quelconque ne fonctionnait pas, pas plus que la copie du fichier db (je pouvais accéder au répertoire par contre), 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. :)

Les étapes pour obtenir un accès root sont les suivantes:

  1. Vos appareils Android doivent être enracinés.
  2. Dans le shell ADB, tapez su et le périphérique Android vous demandera y / n? Vous choisissez autoriser.
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.

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

  

abc @ abc-L655: ~ $ sudo adb kill-server
  abc @ abc-L655: ~ $ sudo adb root start-server   * le démon ne fonctionne pas. en le démarrant maintenant sur le port 5037 *   * démon démarré avec succès * l'accès root est désactivé par les paramètres système - activez 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.. 

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

Par exemple, cd data / data / com.votre application

cela vous déposera dans un répertoire en lecture / écriture afin que vous puissiez modifier les fichiers si nécessaire. Le dossier étant le même sur emulator , vous pouvez l'utiliser pour obtenir le chemin du dossier.

Si vous souhaitez simplement voir votre base de données & amp; Dans les tableaux , la méthode la plus simple consiste à utiliser Stetho . Outil plutôt cool pour tous les développeurs Android utilisant SQLite par développé par Facobook .

Procédure d'utilisation de l'outil

  1. Ajouter ci-dessous la dépendance dans le fichier de classe 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 & amp; 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 captures d'écran sont les mêmes que ci-dessous _

  

ChromeInspact

 ChromeInspact

  

Votre DB

 Votre base de données

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

sans enraciner le périphérique, vous pouvez accéder aux fichiers à l'aide des éléments suivants La capture d'écran cmd:

  1. démarrez l’adb en utilisant cmd à partir du dossier platform-tools en fonction de votre utilisateur

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

    il peut être dans un autre dossier, cela dépend de l'endroit où vous l'avez installé.

  2. afficher les périphériques qui fonctionnent.

    adb devices
    

    pour dire le répondeur la commande est

    List of devices attached
    0123456789ABCDEF     device
    
  3. écrivez la commande

        adb -s 0123456789ABCDEF shell "su"
    

    il va s'ouvrir dans

        root@theDeviceName:/ #
    

4.Accès aux fichiers, liste tous les fichiers

ls

et ainsi de suite dans le répertoire de modifications vers n'importe quel autre emplacement, comme le dossier de données

cd data/data

Lorsque vous vous trouvez dans le répertoire shell du périphérique. Il suffit de courir

su - root

Ensuite, vous devriez pouvoir accéder aux données / dossiers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top