web-dev-qa-db-fra.com

est-il possible de voir les données d'application d'Adb Shell de la même manière que je le vois monter la carte SD?

Je teste une application Android.
Je voudrais garder un œil sur le contenu de 

/sdcard/Android/data/com.myapplication   

pendant que l'application est en cours d'exécution.
Mais mon application ne fonctionne pas correctement si la carte SD est montée en tant que lecteur de disque sur PC (permet d’accéder aux images et aux vidéos).
Alors j'ai pensé que je pourrais utiliser adb Shell. Mais cela ne me permet pas d'accéder au même dossier: 

ls /sdcard/Android/data/com.myapplication  
/sdcard/Android/data/com.myapplication: Permission denied

En recherchant un dépassement de capacité, j'ai trouvé cette méthode pour afficher les données d'application via un shell adb: 

run-as com.myapplication

et ce faisant, je me retrouve dans le dossier 

/data/data/com.myapplication

Ce qui me rend confus, c'est que les données que je vois ici sont différentes de celles que je vois parcourant le contenu de la carte mémoire via un PC. 

$ ls
ls
files
databases
shared_prefs
lib

Je vois sous les fichiers quelque chose qui se trouvait également dans le dossier sdcard Android/data/com.myapplication, mais pas ce que je cherchais. En outre, tous les autres dossiers sont différents.
Y a-t-il une corrélation entre cela 

/data/data/com.myapplication

dossier accessible via adb et le

/sdcard/Android/data/com.myapplication 

dossier accessible via PC?
Y at-il un moyen de voir dans adb Shell les fichiers présents dans ce dernier?

25
Ele

En règle générale, les fichiers qui se trouvent sur le Internal storage et stockés par votre application (et non par défaut WORLD_READABLE) ne seront disponibles que pour votre application. Lorsque vous essayez de pull ces fichiers en utilisant adb pull, vous obtiendrez une autorisation refusée sur un périphérique NOT root. Il y a un moyen de contourner cela, je l'expliquerai plus tard. Les fichiers au format External storage sont quant à eux disponibles pour l'utilisateur et pour toutes les autres applications à lire. cela dépend donc de ce que vous recherchez. 

Maintenant, pour lire des fichiers dans votre internal storage (/data/data/com.app.name), vous ne pouvez pas lire ces fichiers directement, mais vous pouvez les déplacer vers le external storage, puis les lire comme ceci. 

adb Shell "run-as com.yourappName cat /data/data/com.yourappName/files/myfile.txt > /sdcard/Downloads/myfile.txt"

Ensuite, vous pouvez extraire le fichier du stockage externe sans problème d’autorisation. 

adb pull /sdcard/Downloads/myfile.txt

Si vous ne savez pas quel fichier ou si vous souhaitez parcourir tous les fichiers, utilisez le shell pour parcourir tous vos fichiers d'application.

adb Shell
run-as yourappPackageName
cd /data/data/youappPackageName
ls -all
63
Has AlTaiar

J'ai pu obtenir la base de données SQL utilisée par l'application avec cette commande Adb:

adb exec-out run-as xxx.xxx.xxx.xxx cat "/data/data/xxx.xxx.xxx.xxx/databases/databasefile.db" > %userprofile%\Desktop\databasefile.db

Où xxx.xxx.xxx.xxx est le bundleId de votre application Android et databasefile.db est le nom de la base de données SQLite.

Donc, j'imagine que vous pouvez obtenir n'importe quel fichier existant de l'application, en sachant où il se trouve et en utilisant la commande adb exec-out run-as xxx.xxx.xxx.xxx

0
rtrujillor