Можно ли увидеть данные приложения из оболочки adb так же, как я вижу, что она монтирует SD-карту?
Я тестирую приложение для Android.
Я хотел бы следить за содержанием
/sdcard/Android/data/com.myapplication
пока приложение запущено.
Но мое приложение работает неправильно, если SD-карта смонтирована как диск на ПК (обращается к изображениям и видео).
Поэтому я подумал, что могу использовать оболочку adb. Но он не позволяет мне получить доступ к той же папке:
ls /sdcard/Android/data/com.myapplication
/sdcard/Android/data/com.myapplication: Permission denied
Глядя на переполнение стека, я нашел этот способ увидеть данные приложения через оболочку adb:
run-as com.myapplication
и поэтому я попадаю в папку
/data/data/com.myapplication
Я смущен тем, что данные, которые я вижу здесь, отличаются от данных, которые я просматриваю при просмотре содержимого sdcard с помощью ПК.
$ ls
ls
files
databases
shared_prefs
lib
Я вижу под файлами что-то, что также было в папке sdcard Android/data/com.myapplication, но не то, что я искал. Кроме того, все другие папки отличаются.
Существует ли корреляция между этим
/data/data/com.myapplication
доступная через adb, и
/sdcard/Android/data/com.myapplication
папка
доступная через ПК?
Есть ли способ увидеть в оболочке adb файлы, присутствующие в последнем?
Ответы
Ответ 1
Как правило, файлы, находящиеся в Internal storage
и хранящиеся в вашем приложении (по умолчанию не WORLD_READABLE
), будут доступны только для чтения вашего приложения. Когда вы пытаетесь выполнить pull
эти файлы с помощью adb pull
, вы получите разрешение, отклоненное на некотором корневом устройстве. Есть способ обойти это, я объясню позже. Файлы в External storage
, с другой стороны, доступны для пользователя и для всех других приложений для чтения. так что это зависит от того, что вам нужно.
Теперь, чтобы читать файлы в хранилище internal (/data/data/com.app.name
), вы не можете читать эти файлы напрямую, но то, что вы можете сделать, это переместить их на хранилище external, а затем читайте их там.
adb shell "run-as com.yourappName cat /data/data/com.yourappName/files/myfile.txt > /sdcard/Downloads/myfile.txt"
Затем вы можете вытащить файл из внешнего хранилища без каких-либо проблем с разрешением.
adb pull /sdcard/Downloads/myfile.txt
Если вы не уверены в том, какой файл или хотите просмотреть все файлы, то пользовательский оболочка просматривает все ваши файлы приложений.
adb shell
run-as yourappPackageName
cd /data/data/youappPackageName
ls -all
Ответ 2
Вы можете получить доступ к нему через утилиту, которая была опубликована ранее в блоге.
Это утилита java, через которую вы можете получить все папки в папке с данными приложения, просто указав имя пакета вашего приложения.
Просто приложение должно быть отлаживаемым.
Извлечь файлы Android
Действительно работает