Почему я получаю доступ к папке данных при использовании adb?

181

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

gregm
источник
Просто ... убедитесь, что экран вашего телефона включен. Нажмите «Разрешить», когда он спросит, хотите ли вы, чтобы Unknown имел доступ к root. Готово.
решил создать простой avd для доступа к базе данных. У кого-нибудь есть ссылки на руководства, без "кастомных" бликов и графики для разработчиков? Просто как получить ванильный андроид на купленном устройстве.
Bgs
На моем устройстве Android 7.1.1 такой подсказки не происходит. Но adb идет дальше и перечисляет содержимое каталога. Проблема в том, что содержимое на самом деле не существует. Я использую adb-sync для добавления содержимого. Это довольно странно.
Том Рассел

Ответы:

139

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

  1. Для просмотра папки с данными на телефоне Android необходимо иметь телефон с root-доступом. Это означает, что либо у вас есть устройство разработчика ( ADP1 или ION от Google I / O), либо вы нашли способ «рутировать» свой телефон другим способом.
  2. Вам нужно запустить ADB в режиме root, сделайте это, выполнив: adb root
Рето Мейер
источник
77
А для «adb root» требуется пользовательская сборка adb, в противном случае «adbd не может работать как root в производственных сборках»
bortzmeyer
16
Кастомная сборка adb? где я могу получить это?
Гопинатх
9
любой ответ на вопрос @Gopinath?
Эвокс
2
@Gopinath: Я полагаю, что вы должны собрать его из исходного кода для целевого устройства, настроенного для разрешения root с помощью ndk, а затем прошить его на устройство вместе с изображением двоичных файлов.
Бен Ягуар Маршалл
4
AFAIK, нет необходимости иметь кастомную сборку adb. Необходимо иметь поддержку adbd, работающую от имени пользователя root, но этот adbd находится на устройстве - поэтому любой модификации, которая была сделана, чтобы устройство получило root-доступ, достаточно.
nitzanms
222

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

Список содержимого каталога 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).

Idolon
источник
2
Это работает, как вы объяснили, где вы run-as com.mypackage. Проблема, с которой я столкнулся, заключается в следующем sqlite3 /data/data/com.mypackage/databases/mydb: «sqlite3: разрешение отклонено». Можно ли запустить sqlite3 только от имени пользователя root?
Styfle
5
Работает как шарм, когда дело доходит до перечисления файлов, хранящихся во внутреннем хранилище.
zaplec
5
Мне пришлось изменить права доступа к файлу, чтобы можно было переместить его на мою SD-карту, потому что я не мог запустить его как мое приложение. Итак, 1) run-as com.package.example, chmod 777 databasefile.db. 2) выйти, перейдите на SDCard, cp /data/data/com.package.example/databases/databasefile.db. И шаг 3 должен
отменить
3
Моя посылка неизвестна, независимо от того, как правильно я пишу ее в свой терминал: (
Коста
3
Это должен быть ответ, помеченный как правильный, так как это правильный метод для телефонов без рута.
LNI
49

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

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

adb shell

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

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

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

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

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

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

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

cache
databases
lib
shared_prefs   

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

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

abbood
источник
8
Вам не нужен рутированный телефон для run-asработы. Я только что попробовал это на производственной Галактике Nexus S.
Тед Хопп
@TedHopp и так далее, потому что он отлично работает на вашей производственной версии Galaxy Nexus S .. он будет отлично работать на всех телефонах с Android, верно?
abbood
Во-первых, мой телефон является контрпримером, который показывает, что рутированный телефон не требуется . Во-вторых, да, он должен работать на всех некорневых устройствах, которые по крайней мере Android 2.2 (не потому, что он работает на моем телефоне, а потому, что именно так он должен работать; см. Ответ Idolon ).
Тед Хопп
@TedHopp лично я не большой разработчик для Android .. и поэтому такие инструкции build the application as debuggable (either by building it with the Eclipse, or ant debug command)могут показаться вам банальными, но они меня пугают. Я думаю, что мой ответ больше для людей, которые чувствуют себя комфортно с рутированием своих телефонов Android, но не очень хорошо разбираются в мире разработчиков Android. Но я рад, что у нас это обсуждение. Я хочу, чтобы читатели моего ответа знали о других альтернативах без
рутирования
1
Отличный ответ мужчина. Я использую несколько разных телефонов (MotoX, Nexus4, LG G3, SGIII), и это очень хорошо для всех.
Чад Бингхэм
45

$ adb shell

$ cd / data

$ ls

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


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

$ adb shell

$ cd /data

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

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

ХОРОШО!

Привет мир
источник
Это работает! Пара вещей, которые нужно сделать перед выполнением любых команд. После того, как на телефоне будут включены опции разработчика, нам также потребуется включить отладку по USB . Я также дополнительно включил что-то на своем телефоне (HTC M8) под названием « Выбор приложения отладки» и выбрал свое приложение. Может быть стандартным на всех телефонах ... должно быть.
Сриний
30

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

> adb root

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

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

> adb shell
$ su

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

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

# exit

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

Rytis
источник
13
su: разрешение отказано
petrnohejl
3
Огромное спасибо! Кстати, для этого вам нужен рутированный телефон. Вам может также понадобиться SuperSU или что-то подобное? По крайней мере, когда я попытался использовать «su», SuperSU дал мне диалог на моем телефоне.
Ричард Фунг
16
/ system / bin / sh: su: не найдено
matt lohkamp
1
Спасибо :) adb shell + suрешаемая надоедливая вещь разрешения навсегда. У меня была проблема su: not foundс Android 4.3, но после обновления до 4.4.2 проблема исчезла. 4.3, похоже, есть проблемы.
3
Су не доступен для меня, Nexus 5 / Android 5.1 - есть ли обходной путь?
CodeManX
19

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

MSquare
источник
Я попытался -> run-as <app_package_name>, но adb не распознал мое app_package_name. Я использовал имя_пакета, указанное в моем AndroidManifest.xml. Есть что-то, чего мне не хватает?
АРК
3

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

  1. Ваши андроид устройства должны быть рутированы.
  2. В оболочке ADB введите su, и устройство Android предложит y / n? Вы выбираете разрешить.
VietHuong
источник
наберите su .. выдаст запрос на мобильном устройстве .. запрашивает супер разрешение через Superuser .. он работал
Mahajan344
2

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

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

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

Кит
источник
2

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

abc @ abc-L655: ~ $ sudo adb kill-server
abc @ abc-L655: ~ $ sudo adb root start-server * демон не запущен. запуск сейчас на порту 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.. 
ashishsony
источник
1

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

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

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

отметка
источник
2
Я могу перейти к папке напрямую, но все равно получаю ошибку «opendir fail, denied denied».
Тайлер Коллиер
Это связано с тем, что у пользователя adb "shell" есть разрешение на выполнение для каталогов, но нет разрешения на чтение.
Крис Страттон
0

Если вы просто хотите увидеть свою базу данных и таблицы, то самый простой способ - это использовать Stetho. Довольно крутой инструмент для каждого разработчика Android, который использует SQLiteBuit by Facobook developed.

Steps to use the tool

  1. Добавьте приведенную ниже зависимость в файл gradle вашего приложения (Модуль: приложение)

'compile' com.facebook.stetho: stetho: 1.4.2 '

  1. Добавьте следующие строки кода в ваш метод Activity onCreate ()
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Теперь создайте свое приложение. Когда приложение будет запущено, вы можете просмотреть базу данных приложения, открыв chrome в URL:

chrome://inspect/#devices

Скриншоты того же, что и ниже_

ChromeInspact

ChromeInspact

Ваша БД

Ваша БД

Надеюсь, это поможет всем! :)

Рупеш Ядав
источник
0

Это работает, если ваше Android-устройство рутировано каким-либо образом (не уверен, что оно работает для нерутированных).

  1. adb shell - получить доступ к оболочке
  2. su - стать суперпользователем.

Теперь вы можете читать все файлы во всех каталогах.

roshnet
источник
-3

без рутирования устройства вы можете получить доступ к файлам с помощью следующего снимка экрана cmd:

  1. запустить ADB с помощью cmd из папки platform-tools в соответствии с вашим пользователем

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools

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

  2. отображать рабочие устройства.

    adb devices

    скажем, ответ на команду

    List of devices attached
    0123456789ABCDEF     device
  3. написать команду

        adb -s 0123456789ABCDEF shell "su"

    он откроется в

        root@theDeviceName:/ #

4. Доступ к файлам, список всех файлов

ls

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

cd data/data
Махмуд Ашраф
источник
1
C: \ Users \ bruker \ AppData \ Local \ Android \ sdk \ platform-tools> adb -s emulator-5554 shell "su" / system / bin / sh: su: не найден
Solo
в моем случае это был Android 5.0.2, я не знаю, отличается ли он от версии к другой @Koen
Махмуд Ашраф
путь зависит от того, где вы установили андроид студию и ее SDK @Solo
Махмуд Ашраф
1
Проблема не в том, где найти adb. Это в моем ПУТИ. Получение списка файлов (или даже выполнение su) не работает / не разрешено. Тестирование с Android 4.3.
Коен
Су не найден
Брилл
-5

Когда вы находитесь в каталоге оболочки для устройства. Просто беги

su - root

Тогда вы сможете получить доступ к данным / папке.

Petsome
источник