Как просмотреть кеш приложения, специфичного для Android?

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

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

Любые предложения?

Ответы

Ответ 1

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

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

  • Выполнение расследования в собственном приложении

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

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

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

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

Ответ 2

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

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

И этот script для вытягивания из кеша:

#!/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

Корень не требуется.

Ответ 3

Кэшированные файлы действительно хранятся в /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 [] содержит данные изображения в байтовом формате, а длина изображения - длина содержимого, которое должно быть записано в FileOutputStream.

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

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

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

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

Ответ 4

Вопрос. Где кеш-приложение, расположенное на Android?

Ответ:/data/data​​p >

Ответ 5

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

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

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

Ответ 6

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

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);

Ответ 7

В Android Studio вы можете использовать Device File Explorer для просмотра /data/data/my_app_package/cache.

Нажмите View > Tool Windows > Device File Explorer или кнопку Device File Explorer на панели инструментов, чтобы открыть Проводник файлов устройств.

Документация