Почему мне отказывают в доступе к папке данных при использовании 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-доступ на телефоне?
Решение
Есть две вещи, которые нужно запомнить, если вы хотите просмотреть все на своем устройстве.
<Ол>adb root
Другие советы
Начиная с уровня API 8 (Android 2.2), для отлаживаемого приложения (того, которое постоянно создается Android Studio, если только не была запрошена сборка выпуска), вы можете использовать оболочку run-as
команда для запуска команды или исполняемого файла от имени конкретного пользователя/приложения или просто переключиться на UID вашего приложения, чтобы вы могли получить доступ к его данные каталог.
Список содержимого каталога вашего приложения:
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:Eсть известная проблема с некоторыми телефонами HTC Desire.Из-за нестандартного владельца/разрешений /data/data
каталог, run-as
команда не запускается на этих телефонах.
Заметка 2:Как указано в комментариях @Avio:run-as
также есть проблемы с телефонами Samsung Galaxy S, работающими под управлением Cyanogenmod любой версии (от 7 до 10.1), потому что на этой платформе /data/data
является символической ссылкой на /datadata
.Один из способов решения проблемы — заменить символическую ссылку на реальный каталог (к сожалению, обычно для этого требуется root-доступ).
Прежде чем мы начнем, у вас есть укорененный телефон?если нет, то я настоятельно рекомендую вам совершить прыжок.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 и посмотрите, что произойдет. Если вы получите сообщение об ошибке, значит, ваш телефон не рутирован.Если это не так, сначала рутируйте его, а затем продолжайте следовать инструкциям.
оттуда вы можете ввести ls
и вы увидите все каталоги, включая базы данных:
shell@android:/data/data/com.domain.yourapp $ ls
cache
databases
lib
shared_prefs
после этого вы можете использовать sqlite3 для просмотра базы данных.если он у вас не установлен (вы можете узнать это, набрав sqlite3
, если ты получишь command not found
тогда вам придется его установить.Чтобы установить sqlite, следуйте инструкциям здесь.
о рутировании: Если вы никогда раньше не рутировали свой телефон и беспокоитесь о том, что он испортит ваш телефон, я могу сказать вам с полной уверенностью, что беспокоиться не о чем.существует множество быстрых и простых руководств по рутированию телефона практически для всех новых и старых моделей, и вы можете рутировать свой телефон, даже если у вас Mac (Я рутировал свой s3 с помощью Mac).
$ оболочка adb
$ компакт-диск /данные
$ лс
opendir не удалось, разрешение отклонено
Вам следует сделать это:
$ adb shell
$ cd /data
shell@android:/data $ run-as com.your.package
shell@android:/data/data/com.your.package $ ls
ХОРОШО!
У меня была похожая проблема, когда я пытался работать на root-устройстве Samsung Galaxy S. При вводе команды из оболочки компьютера
> adb root
завершается с ошибкой " не может работать как root в производственных сборках " ;. Вот простой метод, который позволяет стать пользователем root.
Вместо предыдущего введите следующие две команды одну за другой
> adb shell
$ su
После первой команды, если приглашение изменилось с '>' значение '$', как показано выше, означает, что вы вошли в среду оболочки adb. Если впоследствии после выполнения второй команды приглашение изменилось на «#», это означает, что вы теперь root. Теперь от имени пользователя root вы можете делать с устройством все, что захотите.
Чтобы вернуться в «безопасную» оболочку, введите
# exit
Вы увидите, что снова появляется приглашение «$», что означает, что вы находитесь в оболочке adb как пользователь, а не как пользователь root. Р>
У меня тоже было много проблем с этим. Я до сих пор не полностью понимаю разрешение и запуск root, но у меня это сработало (частично один из предыдущих ответов), чтобы скопировать файл базы данных из / data / data / [имя пакета] /databases/my_db.db. Запуск оболочки root или 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. :)
Ниже приведены два шага для получения root-доступа:
<Ол>производственные сборки не могут войти в / 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
может потребоваться изменить правообладателя, чтобы управлять им.
Проблема может заключаться в том, что нам нужно специально предоставить root доступ adb в опциях developmentnent в последних 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..
если вы знаете пакет приложения, вы можете cd
прямо в эту папку.
например, cd data/data/com.yourapp
это приведет вас в каталог read/writable
, чтобы вы могли изменять файлы по мере необходимости. Поскольку папка на emulator
такая же, вы можете использовать ее для получения пути к папке.
Если вы просто хотите увидеть свой БД и таблицы тогда самый простой способ - использовать Stetho
.Довольно крутой инструмент для каждого разработчика Android, который использует SQLite
куплено Facobook developed
.
Steps to use the tool
- Добавьте ниже зависимость в файл Gradle вашего приложения (Модуль:приложение)
'компилировать 'com.facebook.stetho:stetho:1.4.2'
- Добавьте ниже строки кода в метод 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
Ваша БД
Надеюсь, это поможет всем!:)
без рута на устройстве вы можете получить доступ к файлам с помощью следующих Скриншот cmd:
<Ол>запустите adb с помощью cmd из папки platform-tools в соответствии с вашим пользователем
cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
он может находиться в другой папке, в зависимости от того, где вы его установили.
отображает работающие устройства.
adb devices
например, ответьте на команду
List of devices attached
0123456789ABCDEF device
напишите команду
adb -s 0123456789ABCDEF shell "su"
откроется в
root@theDeviceName:/ #
4. Доступ к файлам, список всех файлов
ls
и т. д. изменили каталог в любое другое место, например, в папку данных
cd data/data
Когда вы находитесь в каталоге оболочки для устройства. Просто беги
su - root
Тогда вы сможете получить доступ к данным / папке.