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