Как просмотреть кэш для приложений Android? - PullRequest
20 голосов
/ 29 марта 2012

Есть ли способ динамически просматривать кэш приложения в Android?Я сохраняю изображения в кеш (/ data / data / my_app_package / cache) и уверен на 99%, что они там сохраняются, но не уверен, как долго они там находятся.

Когда язагляните в кеш с помощью DDMS File Explorer в Eclipse, он всегда пуст.Я также попытался изучить соответствующий каталог кеша в ADB, и снова он всегда пуст.

Есть предложения?

Ответы [ 6 ]

27 голосов
/ 09 июля 2014

Вы можете использовать эту команду для вывода списка файлов для вашего собственного отлаживаемого apk:

adb shell run-as com.corp.appName ls /data/data/com.corp.appName/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'"

Затем вы можете извлечь файлиз кеша вот так:

./pull.sh cache/someCachedData.txt

Root не требуется.

11 голосов
/ 30 апреля 2012

Если ADB не запущен от имени пользователя root (как на эмуляторе), вы не можете просматривать что-либо в каталоге / data, если только приложение, которое владеет им, не делает его доступным для чтения всем пользователям.Кроме того, вы не можете просматривать структуру каталогов - вы можете перечислять файлы только после того, как попадете в каталог, к которому у вас есть доступ, явно введя его путь.

Вообще говоря, у вас есть пять вариантов:

  • Выполните расследование в приложении-владельце

  • Пометьте рассматриваемые файлы как общедоступные и используйте что-нибудь (оболочка adb или adb pull), где вы можете ввести полный путьимя, вместо того, чтобы пытаться просмотреть дерево

  • Пусть приложение-владелец скопирует весь каталог на SD-карту

  • Используйте эмулятор или rootустройство, на котором adb (и, следовательно, доступ к браузеру ddms) может работать от имени пользователя root (или использовать обозреватель корневых файлов или корневое устройство)

  • использовать adb и инструмент запуска от имени с отладкойapk, чтобы получить оболочку командной строки, работающую как идентификатор пользователя приложения.Для тех, кто знаком с командной строкой Unix, это может быть наиболее эффективным (хотя набор инструментов sh на android ограничен и использует его крошечный словарь сообщений об ошибках вводящим в заблуждение способами)

2 голосов
/ 10 июня 2017

Вопрос : Где находится кэш для конкретного приложения на Android?

Ответ : / data / data

2 голосов
/ 30 апреля 2012

Кэшированные файлы действительно хранятся в / data / data / my_app_package / cache

Обязательно храните файлы, используя следующий метод:

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

где imagebuffer [] содержит данные изображения в байтовом формате, а imagebufferlength - длина содержимого, которое должно быть записано в FileOutputStream.

Теперь вы можете посмотреть в DDMS File Explorer или сделать «оболочку adb» и перейти в / data / data / my_app_package / cache и сделать «ls». В этом каталоге вы найдете файлы изображений, которые вы сохранили с помощью кода.

Более того, из документации Android:

Если вы хотите кэшировать некоторые данные, а не хранить их постоянно, вы должны использовать getCacheDir (), чтобы открыть файл, представляющий внутренний каталог, в котором ваше приложение должно сохранять временные файлы кэша.

Когда на устройстве недостаточно внутренней памяти, Android может удалить эти файлы кэша, чтобы освободить место. Однако вы не должны полагаться на систему, чтобы очистить эти файлы для вас. Вы всегда должны поддерживать файлы кэша самостоятельно и не выходить за разумные пределы, например, 1 МБ. Когда пользователь удаляет ваше приложение, эти файлы удаляются.

1 голос
/ 03 мая 2018

Вы можете проверить данные приложения в своем эмуляторе следующим образом,

  1. Выполнить adb shell в cmd
  2. Перейдите на /data/data/ и перейдите в свое приложение

Там вы можете найти данные кеша и базы данных, специфичные для вашего приложения

0 голосов
/ 20 сентября 2012

Вот код: замените имя_пакета на ваше конкретное имя пакета.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...