Почему я получаю доступ к папке данных при использовании adb? - PullRequest
164 голосов
/ 25 июня 2009

Я подключился к своему живому устройству с помощью adb и следующих команд:

C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied

Я был удивлен, увидев, что у меня отказано в доступе. Почему я не могу просматривать каталоги, используя такую ​​командную строку?

Как получить root-доступ на моем телефоне?

Ответы [ 13 ]

195 голосов
/ 10 октября 2011

Начиная с уровня API 8 (Android 2.2), для отлаживаемого приложения (созданного Android Studio все время, пока не запрашивалась сборка выпуска), вы можете использовать команду shell run-as для запуска команды или исполняемого файла как конкретный пользователь / приложение или просто переключитесь на UID своего приложения, чтобы вы могли получить доступ к его каталогу data .

Список содержимого каталога yourapp:

run-as com.yourapp ls -l /data/data/com.yourapp

Переключитесь на UID com.yourapp и выполните все последующие команды, используя этот uid (пока вы не вызовете exit):

run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit


Примечание 1 : существует известная проблема с некоторыми телефонами HTC Desire. Из-за нестандартного владельца / прав доступа к каталогу /data/data команда run-as не работает на этих телефонах.

Примечание 2 : Как указано в комментариях @Avio: run-as также имеет проблемы с телефонами Samsung Galaxy S с Cyanogenmod в любой версии (от 7 до 10.1), поскольку на этой платформе /data/data является символической ссылкой на /datadata. Одним из способов решения этой проблемы является замена символической ссылки на фактический каталог (к сожалению, для этого обычно требуется доступ с правами root).

130 голосов
/ 25 июня 2009

Есть две вещи, которые нужно запомнить, если вы хотите просмотреть все на своем устройстве.

  1. Для просмотра папки с данными на телефоне Android необходим телефон с правами root. Это означает, что у вас есть устройство разработчика ( ADP1 или ION от Google I / O), или вы нашли способ «рутировать» свой телефон другим способом.
  2. Вам нужно запустить ADB в режиме root, для этого выполните: adb root
42 голосов
/ 25 июня 2013

до того, как мы начнем, у вас есть рутированный телефон? если нет, я настоятельно рекомендую вам сделать прыжок. 99% учебных пособий, которые помогут вам сделать это, требуют, чтобы у вас был рутированный телефон (я знаю, что я потратил около часа на поиск способа сделать это без рутированного телефона .. не смог найти ни одного .. ) также, если вы думаете об этом, ваш iPhone также должен быть рутован для выполнения этой же задачи. Так что это вполне разумно. Подробнее о рутировании в конце ответа.

из командной строки введите:

adb shell

это приведет вас к вашей командной строке оболочки Android (вы должны увидеть что-то вроде этого: shell@android:/ $ теперь наберите:

shell@android:/ $run-as com.domain.yourapp

это должно привести вас непосредственно к каталогу данных com.domain.yourapp:

shell@android:/data/data/com.domain.yourapp $ 

если это не так (то есть, если вы получили сообщение об ошибке), то, вероятно, у вас нет телефона с привилегированным доступом или вы не использовали свои привилегии пользователя root. Чтобы использовать свои привилегии пользователя root, введите su в командной строке adb и посмотрите, что произойдет, если вы получите ошибку, значит ваш телефон не имеет root-прав. Если это не так, сначала выполните root, затем продолжите эти инструкции.

оттуда вы можете набрать ls, и вы увидите все каталоги, включая dbs:

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

после этого вы можете использовать sqlite3 для просмотра базы данных .. если вы не установили его (вы можете узнать его, набрав sqlite3, если вы получите command not found, вам придется его установить. Чтобы установить sqlite, следуйте инструкциям здесь .

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

38 голосов
/ 06 марта 2015

$ adb shell

$ кд / данные

$ ls

opendir не удалось, разрешение отклонено


Вы должны сделать это:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

OK!

29 голосов
/ 05 апреля 2012

У меня была похожая проблема при попытке работать на рутированном Samsung Galaxy S. Выдача команды из оболочки компьютера

> adb root

терпит неудачу с сообщением "не может работать от имени root в производственных сборках". Вот простой метод, который позволяет стать пользователем root.

Вместо предыдущего, введите следующие две команды одну за другой

> adb shell
$ su

После первой команды, если приглашение изменилось с «>» на «$», как показано выше, это означает, что вы вошли в среду оболочки adb. Если впоследствии после выполнения второй команды приглашение изменилось на «#», это означает, что вы теперь являетесь пользователем root. Теперь от имени пользователя root вы можете делать с устройством все, что захотите.

Чтобы вернуться к «безопасной» оболочке, наберите

# exit

Вы увидите, что появляется приглашение '$', что означает, что вы находитесь в оболочке adb как пользователь, а не как пользователь root.

19 голосов
/ 11 мая 2012

У меня тоже было много проблем с этим. Я до сих пор не полностью понимаю разрешение и запуск root, но у меня это сработало (частично один из предыдущих ответов), чтобы скопировать файл базы данных из / data / data / [имя пакета] /databases/my_db.db. Запуск корня оболочки или su в оболочке по какой-то причине не сработал, равно как и копирование файла db (хотя я мог перейти в каталог), а также sqlite3 .

Итак, это сработало! В командной строке DOS:

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
 bus_timetable_lines.db > /sdcard/db_copy.db                                   <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
shell@android:/ $ exit
exit

C:\Program Files\Android\android-sdk\platform-tools>

Теперь перейдите в каталог SDCARD и получите ваш файл db_copy.db. Даже это было скрыто, но мне удалось написать по электронной почте. Вернувшись в Windows, я смог открыть файл базы данных с помощью браузера баз данных SQLite. :)

3 голосов
/ 08 октября 2012

Ниже приведены два шага для получения root-доступа:

  1. Ваши андроид устройства должны быть рутированы.
  2. В оболочке ADB введите su, и устройство Android предложит y / n? Вы выбираете разрешить.
2 голосов
/ 02 июня 2013

Проблема может заключаться в том, что нам нужно специально предоставить root права доступа adb в вариантах разработки в последних моделях CM. Вот что я сделал.

abc @ abc-L655: ~ $ sudo adb kill-server
abc @ abc-L655: ~ $ sudo adb root, стартовый сервер * демон не работает. начиная сейчас на порту 5037 * * демон успешно запущен * root-доступ отключен настройками системы - включите в настройках -> параметры разработки

после изменения параметров разработки ...

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go.. 
2 голосов
/ 07 января 2011

производственные сборки не могут быть введены / данные / приложение

drwxrwx--- system   cache             1970-01-01 08:00 cache
drwxrwxr-x root     system            1970-01-01 08:00 mnt 
drwxrwx--x system   system            1970-01-01 08:15 data

, возможно, потребуется изменить правообладателя, чтобы управлять им.

1 голос
/ 31 декабря 2009

если вы знаете пакет приложения, вы можете cd прямо в эту папку ..

например cd data/data/com.yourapp

, после чего вы попадете в каталог read/writable, чтобы вы могли изменять файлы по мере необходимости. Поскольку папка на emulator такая же, вы можете использовать ее для получения пути к папке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...