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?
À 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)
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.
Question: Où se trouve le cache spécifique à l'application sur Android?
Réponse: /data/data
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.
Vous pouvez vérifier les données spécifiques à l'application dans votre émulateur comme suit,
adb Shell
en cmd/data/data/
et accédez à votre applicationVous y trouverez les données de cache et les bases de données spécifiques à votre application
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);