Почему мне отказано в доступе к папке данных при использовании 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. Один из способов решить эту проблему-заменить символическую ссылку на фактический каталог (к сожалению, это обычно требует корневого доступа).
прежде чем мы начнем, у вас есть 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. :)
следующие два шага, чтобы получить корневой доступ:
- ваши android устройства должны быть укоренены.
- в оболочке 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, который используетSQLitebuit byFacobook developed.
Steps to use the tool
- добавить ниже dependeccy в файле gradle вашего приложения (модуль: 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скриншоты же, как ниже_
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


