Почему при использовании 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 ответов


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

  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. Один из способов решить проблему-заменить символическую ссылку на фактический каталог (к сожалению, для этого обычно Требуется root-доступ).


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

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

adb shell

это приведет вас к вашей линии Android shell comand (вы должны увидеть что-то вроде этого: 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 для просмотра dbase.. если вы не установили его (вы можете узнать это, введя 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

OK!


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

> adb root

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

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

> adb shell
$ su

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

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

# exit

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


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

скриншоты такие же, как и ниже!--9-->

ChromeInspact

ChromeInspact

ваш DB

Your DB

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


без проблем устройство вы можете получить доступ к файлам следующим образом УМК скриншот:

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

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

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

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

    adb devices
    

    для ответа команды операционной системы is

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

        adb -s 0123456789ABCDEF shell "su"
    

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

        root@theDeviceName:/ #
    

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

ls

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

cd data/data

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

su - root

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