Почему мне отказывают в доступе к папке данных при использовании adb?

StackOverflow https://stackoverflow.com/questions/1043322

  •  20-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

<Ол>
  • Для просмотра папки с данными на телефоне Android необходим телефон с правами root. Это означает, что у вас есть устройство разработчика ( ADP1 или ION из Google I / O) или вы нашли способ «рутировать» телефон другим способом.
  • Вам нужно запустить ADB в режиме 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-доступа:

    <Ол>
  • Ваши андроид устройства должны быть рутированы.
  • В оболочке ADB введите su, и устройство Android предложит y / n? Вы выбираете разрешить.
  • производственные сборки не могут войти в / 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

    1. Добавьте ниже зависимость в файл Gradle вашего приложения (Модуль:приложение)

    'компилировать 'com.facebook.stetho:stetho:1.4.2'

    1. Добавьте ниже строки кода в метод 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

    ChromeInspact

    Ваша БД

    Your DB

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

    без рута на устройстве вы можете получить доступ к файлам с помощью следующих Скриншот 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
    

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top