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

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

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

Какие-либо предложения?

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

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

    • Сделайте расследование в собственном приложении

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

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

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

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

    Вы можете использовать эту команду для перечисления файлов для собственного отлаживаемого 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 

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

    Кэшированные файлы действительно хранятся в / 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 МБ. Когда пользователь удаляет ваше приложение, эти файлы удаляются.

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

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

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

    Ответ : / данные / данные