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

Ответ 1

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

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

Ответ 2

Начиная с уровня API 8 (Android 2.2) для отлаживаемого приложения (которое было создано Android Studio все время, за исключением случаев, когда была запрошена сборка), вы можете использовать команду shell 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).

Ответ 3

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

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

adb shell

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

[email protected]:/ $run-as com.domain.yourapp

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

[email protected]:/data/data/com.domain.yourapp $ 

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

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

[email protected]:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

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

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

Ответ 4

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

> adb root

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

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

> adb shell
$ su

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

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

# exit

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

Ответ 5

$adb shell

$cd/data​​p >

$ls

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


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

$ adb shell

$ cd /data

[email protected]:/data $ run-as com.your.package 

[email protected]:/data/data/com.your.package $ ls

OK!

Ответ 6

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

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

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|[email protected]:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|[email protected]:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
[email protected]:/data $ cd data
cd data
[email protected]:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
[email protected]:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
[email protected]:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
[email protected]:/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                                   <
[email protected]:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
[email protected]:/ $ exit
exit

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

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

Ответ 7

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

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

Ответ 8

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

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

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

[email protected]:~$ sudo adb kill-server
[email protected]:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
[email protected]:~$ adb shell
[email protected]:/ # ls /data/ .... good to go.. 

Ответ 9

производственные сборки не могут войти /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

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

Ответ 10

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

eg cd data/data/com.yourapp

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

Ответ 11

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

  • Запустите adb, используя cmd из папки инструментов-платформ в соответствии с вашим пользователем.

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

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

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

    adb devices
    

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

    List of devices attached
    0123456789ABCDEF     device
    
  • напишите команду

        adb -s 0123456789ABCDEF shell "su"
    

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

        [email protected]:/ #
    

4. Файлы доступа, список всех файлов

ls

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

cd data/data

Ответ 12

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

su - root

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