можно ли увидеть данные приложения из оболочки adb так же, как я вижу, как она монтирует SD-карту?

Я тестирую приложение для 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 файлы, присутствующие в последней?

31
задан Ele 26 January 2012 в 10:54
поделиться

2 ответа

Как правило, файлы, которые находятся в 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
72
ответ дан 27 November 2019 в 21:54
поделиться

Мне удалось получить 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

.
1
ответ дан 27 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: