Я тестирую приложение для Android.
Я хотел бы следить за содержимым
/sdcard/Android/data/com.myapplication
во время работы приложения.
Но мое приложение работает неправильно, если SD-карта смонтирована в качестве дисковода на ПК (доступ к изображениям и видео).
Поэтому я подумал, что могу использовать оболочку adb. Но это не позволяет мне получить доступ к той же папке:
ls /sdcard/Android/data/com.myapplication
/sdcard/Android/data/com.myapplication: Permission denied
Глядя на Stack Overflow, я нашел такой способ видеть данные приложения через оболочку 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 файлы, присутствующие в последней?
Как правило, файлы, которые находятся в Internal storage
и хранятся в вашем приложении (по умолчанию не WORLD_READABLE
), будут доступны только для чтения вашим приложением. Когда вы попытаетесь pull
использовать эти файлы с помощью adb pull
, вам будет отказано в разрешении на устройстве, не имеющем root-прав. Есть способ обойти это, я объясню позже. С другой стороны, файлы в External storage
доступны для чтения пользователю и всем другим приложениям. так что это зависит от того, что вы после.
Теперь для чтения файлов из вашего внутреннего хранилища (/data/data/com.app.name
) вы не можете читать эти файлы напрямую, но вы можете переместить их на внешний ] хранения, а затем прочитать их оттуда, как это.
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
Мне удалось получить Sqlite DB, используемое приложением, с помощью этой команды Adb:
adb exec-out run-as xxx.xxx.xxx.xxx cat "/data/data/xxx.xxx.xxx.xxx/databases/databasefile.db" > %userprofile%\Desktop\databasefile.db
Где xxx.xxx.xxx.xxx - это bundleId вашего приложения для Android и databasefile.db это имя Sqlite DB
. Итак, я могу представить, что вы можете получить любой существующий файл приложения, зная, где он находится, и используя команду adb exec-out run-as xxx.xxx.xxx.xxx