web-dev-qa-db-fra.com

Comment afficher Android cache spécifique à l'application?

Existe-t-il un moyen d'afficher dynamiquement le cache spécifique à l'application dans Android? J'enregistre des images dans le cache (/ data/data/my_app_package/cache) et je suis sûr à 99% qu'elles y sont enregistrées, mais je ne sais pas combien de temps elles restent.

Lorsque je regarde dans le cache à l'aide de l'explorateur de fichiers DDMS dans Eclipse, il est toujours vide. J'ai également essayé d'examiner le répertoire de cache approprié dans ADB et encore une fois, il est toujours vide.

Aucune suggestion?

20
Karim Varela

À moins qu'ADB ne s'exécute en tant que root (comme il le ferait sur un émulateur), vous ne pouvez généralement pas voir quoi que ce soit sous/data à moins qu'une application qui le possède ne l'ait rendu lisible dans le monde. De plus, vous ne pouvez pas parcourir la structure du répertoire - vous ne pouvez lister les fichiers qu'une fois que vous arrivez dans un répertoire auquel vous avez accès, en entrant explicitement son chemin.

D'une manière générale, vous avez cinq options:

  • Faites l'enquête dans l'application propriétaire

  • Marquez les fichiers en question comme publics et utilisez quelque chose (adb Shell ou adb pull) où vous pouvez entrer un nom de chemin complet, au lieu d'essayer de parcourir l'arborescence

  • Demandez à l'application propriétaire de copier l'intégralité du répertoire sur la carte SD

  • Utilisez un émulateur ou un périphérique rooté où adb (et donc l'accès du navigateur ddms) peut s'exécuter en tant que root (ou utiliser un explorateur de fichiers racine ou un périphérique rooté)

  • utilisez adb et l'outil run-as avec une apk déboguable pour obtenir un shell de ligne de commande en cours d'exécution en tant qu'ID utilisateur de l'application. Pour ceux qui connaissent la ligne de commande unix, cela peut être le plus efficace (bien que la boîte à outils soit activée Android est limité et utilise son petit vocabulaire de messages d'erreur de manière trompeuse)

11
Chris Stratton

Vous pouvez utiliser cette commande pour répertorier les fichiers de votre propre apk déboguable:

adb Shell run-as com.corp.appName ls /data/data/com.corp.appName/cache

Et ce script pour extraire du cache:

#!/bin/sh
adb Shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb Shell "rm '/sdcard/$1'"

Ensuite, vous pouvez extraire un fichier du cache comme ceci:

./pull.sh cache/someCachedData.txt

La racine n'est pas requise.

27
Tamas

Question: Où se trouve le cache spécifique à l'application sur Android?

Réponse: /data/data

2
df3ct

Les fichiers mis en cache sont en effet stockés dans/data/data/my_app_package/cache

Assurez-vous de stocker les fichiers en utilisant la méthode suivante:

String cacheDir = context.getCacheDir();
File imageFile = new File(cacheDir, "image1.jpg");
FileOutputStream out = new FileOutputStream(imageFile);
out.write(imagebuffer, 0, imagebufferlength);

où imagebuffer [] contient des données d'image au format octet et imagebufferlength est la longueur du contenu à écrire dans FileOutputStream.

Maintenant, vous pouvez regarder l'Explorateur de fichiers DDMS ou faire un "shell adb" et cd sur/data/data/my_app_package/cache et faire un "ls". Vous trouverez les fichiers image que vous avez stockés via le code dans ce répertoire.

De plus, depuis Android:

Si vous souhaitez mettre en cache certaines données, plutôt que de les stocker de manière persistante, vous devez utiliser getCacheDir () pour ouvrir un fichier qui représente le répertoire interne où votre application doit enregistrer les fichiers de cache temporaires.

Lorsque l'appareil manque d'espace de stockage interne, Android peut supprimer ces fichiers de cache pour récupérer de l'espace. Cependant, vous ne devez pas compter sur le système pour nettoyer ces fichiers pour vous. Vous devez toujours conserver les fichiers de cache vous-même et restez dans une limite raisonnable d'espace consommé, comme 1 Mo. Lorsque l'utilisateur désinstalle votre application, ces fichiers sont supprimés.

2
sultan.of.swing

Vous pouvez vérifier les données spécifiques à l'application dans votre émulateur comme suit,

  1. Courir adb Shell en cmd
  2. Aller à /data/data/ et accédez à votre application

Vous y trouverez les données de cache et les bases de données spécifiques à votre application

1
Cassendra44

Voici le code: remplacez package_name par votre nom de package spécifique.

Intent i = new Intent(Android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:package_name"));
startActivity(i);
0
Eastern Killer