Почему при использовании 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 ответов
есть две вещи, чтобы помнить, если вы хотите просмотреть все на вашем устройстве.
- вам нужно иметь телефон с корневым доступом для того, чтобы просматривать папку данных на телефоне Android. Это означает, что у вас есть устройство разработчика (ADP1 или Иона из Google I / O) или вы нашли способ "укоренить" свой телефон каким-то другим способом.
- вам нужно запустить 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. :)
Ниже приведены два шага для получения корневого доступа:
- ваши android устройства должны быть укоренены.
- в оболочке 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
- добавить ниже dependeccy в файле gradle вашего приложения (Module: app)
'compile' com.фейсбук.stetho:stetho:1.4.2'
- добавить ниже строки кода в вашей деятельности 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
ваш DB
надеюсь, это поможет всем! :)
без проблем устройство вы можете получить доступ к файлам следующим образом
УМК скриншот:
-
запустите adb с помощью cmd из папки platform-tools в соответствии с вашим пользователем
cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
он может быть в другой папке зависит от того, где вы установили его.
-
отображение рабочих устройств.
adb devices
для ответа команды операционной системы is
List of devices attached 0123456789ABCDEF device
-
написать команду
adb -s 0123456789ABCDEF shell "su"
он откроется в
root@theDeviceName:/ #
4.Доступ к файлам, список всех файлов
ls
и так далее каталог Чанг в любом месте, как папка данных
cd data/data
когда вы находитесь в каталоге корпус для устройства. Просто запустите
su - root
тогда вы должны иметь доступ к данным / папке.