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


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

13 ответов:

есть две вещи, чтобы помнить, если вы хотите просмотреть все на вашем устройстве.

  1. вы должны иметь телефон с корневым доступом для того, чтобы просматривать папку данных на Android телефон. Это означает, что либо у вас есть устройство разработчика (ADP1 или Иона из Google I / O) или вы нашли способ "укоренить" свой телефон каким-то другим способом.
  2. вам нужно запустить ADB в корневом режиме, сделайте это, выполнив:adb root

начиная с уровня 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. Из-за нестандартного владельца/разрешения , run-as команда не выполняется на этих телефонах.

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

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

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

adb shell

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

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

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

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

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

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

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

cache
databases
lib
shared_prefs   

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

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

$ 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

ОК!

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

> adb root

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

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

> adb shell
$ su

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

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

# exit

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

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

следующие два шага, чтобы получить корневой доступ:

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

проблема может быть в том, что нам нужно конкретно дать АБР root-доступ в варианта и развитию в современных CMS.. Вот что я сделал.

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

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

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.. 

производственные сборки не могут ввести /data / app

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

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

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

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

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

если вы просто хотите увидеть свой DB & Tables тогда самый простой способ-использовать Stetho. Довольно крутой инструмент для каждого разработчика Android, который использует SQLite buit by Facobook developed.

Steps to use the tool

  1. добавить ниже dependeccy в файле gradle вашего приложения (модуль: app)

'compile' com.фейсбук.stetho:stetho:1.4.2'

  1. добавить ниже строки кода в вашей деятельности 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

БД

Your DB

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

без проблем устройство вы можете получить доступ к файлам следующим образом Скриншот 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

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

su - root

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