Как получить доступ к папке данных/данных на устройстве Android?

Я разрабатываю приложение, и я знаю, что моя база данных *.db появится в data/data/com.****.***

Я могу получить доступ к этому файлу из AVD в Eclipse с помощью SQL-менеджера

Но я не могу получить доступ к этому файлу на своем Android-телефоне.
Я google, и он говорит, что мне нужно настроить свой телефон, чтобы сделать это, но я не хочу этого делать. (Новый телефон, вопросы гарантии и проблемы с безопасностью)

Итак, вот мой вопрос: как я могу получить доступ к моему каталогу data/data/..... на своем Android-телефоне " без его укоренения"?

Можно ли изменить права пользователя для каталога data/data..... без его укорачивания?

Ответ 1

Доступ к файлам прямо на вашем телефоне затруднен, но вы можете скопировать их на свой компьютер, где вы можете делать с ним все, что хотите. Без укоренения у вас есть 2 варианта:

  • Если приложение отлаживается, вы можете использовать команду run-as в оболочке adb

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  • В качестве альтернативы вы можете использовать функцию резервного копирования Android.

    adb backup -noapk com.your.packagename
    

    Теперь вам будет предложено "разблокировать устройство и подтвердить операцию резервного копирования". Лучше НЕ указывать пароль, в противном случае становится труднее читать данные. Просто нажмите "резервное копирование моих данных". Результирующий файл backup.ab на вашем компьютере содержит все данные приложения в формате резервного копирования android. В основном это сжатый файл tar. Эта страница объясняет, как вы можете использовать команду OpenSSL zlib, чтобы распаковать ее. Вы можете использовать команду adb restore backup.db для восстановления резервной копии.

Ответ 2

Если вы используете Android Studio 3.0 или более позднюю версию, выполните следующие действия.

  • Нажмите Показать > Инструмент Windows > Проводник > .
  • Разверните узлы /data/data/[package-name].

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

Шаги в Android Studio 3.0

Ответ 3

Вы также можете попробовать выборку db с помощью приложения root explorer. И если это не сработает, вы можете попробовать следующее:

  1. Открыть cmd
  2. Измените свой каталог и перейдите в "Инструменты платформы"
  3. Введите ' adb shell '
  4. su
  5. Нажмите "Разрешить" на устройстве
  6. chmod 777/data/data/data/data/data/com.application.package/data/data/com.application.package/*
  7. Откройте представление DDMS в Eclipse и оттуда откройте "FileExplorer", чтобы получить нужный файл

После этого вы сможете просматривать файлы на корневом устройстве.

Ответ 4

Чтобы сделать любой из вышеперечисленных (то есть доступ к защищенным папкам из самого телефона), вам все равно нужен root. (Это включает изменение разрешений монтирования в папке /data и доступ к ней)

Без root доступ к /data напрямую для чтения , кроме как из вашего приложения через код, невозможен. Поэтому вы можете попробовать скопировать этот файл на SD-карту или где-нибудь доступную, а затем вы сможете получить доступ к ней в обычном режиме.

Rooting не аннулирует вашу гарантию, если у вас есть устройство разработчика. Простите, нет никакого другого способа AFAIK.

Ответ 5

  • Откройте командную строку
  • Сменить каталог на E:\Android\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
  • Введите ниже команды
  • adb -d shell
  • run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  • Измените каталог на cd /sdcard, чтобы убедиться, что там есть database.db.
  • adb pull /sdcard/database.db или просто вы можете скопировать database.db с устройства.

Ответ 6

Самый простой способ (всего один простой шаг) вытащить файл из вашей отлаживаемой папки приложения (пусть /data/data/package.name/databases/file) на неуправляемое устройство Android 5.0+ с помощью этой команды:

adb exec-out run-as package.name cat databases/file > file

Ответ 7

Использовать проводник в eclipse. Выберите Windows = > Показать вид = > Другое... = > Проводник.

Другой способ - вытащить файл через adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

Ответ 8

На корневом устройстве правильное решение таково:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

Исходное решение сработало, но chmod вернет неизвестный каталог. Изменение команды chmod на /data/data/ * дало доступ ко всем подпапкам в каталоге данных из DDMS в Intellij. Я предполагаю, что одно и то же решение справедливо для Eclipse DDMS.

UPDATE Итак, то, что я нашел, странно. Я использую Nexus 6, используя DDMS в IntelliJ (Android Device Monitor). Я создал небольшое приложение для начинающих. Указанное приложение сохраняет данные в CSV файл в data/data/com.example.myapp/files

Когда я впервые начал пытаться получить доступ к этому файлу на моем Nexus 6, я обнаружил, что мне нужно перезагрузить устройство. Я мог видеть папку с данными, но попытка открыть ее не сработает. Как упоминалось в Интернете в других местах, расширение + исчезнет, ​​а затем снова появится снова (заметьте, в Интернете есть решения, которые утверждают, что разрешают доступ к этим папкам без укоренения, я не нашел их слишком поздно, и я не уверен, что я предпочитаю не корни в любом случае ((я бы скорее смог сделать это вручную, чем полагаться на приложение или командную строку, чтобы дать мне свои решения))). Я укрепил свои 6 и снова попробовал DDMS.

В этот момент он показал мне папку с данными, и я мог бы расширить папку и посмотреть com. каталогов, но я не мог открыть ни одного из них. То есть, когда я обнаружил вышеупомянутое решение. Исходные инструкции не будут работать в этой части:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

Вот когда я попробовал решение, которое я разместил:

chmod 777 /data /data/data /data/data/*

Это решение, похоже, работает, но только в определенных папках. Теперь я могу расширить мою папку myapp, но не мог расширять каталог файлов.

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

chmod 777 /data /data/data /data/data/com.example.myapp/*

Далее следуют:

chmod 777 /data /data/data /data/data/com.example.myapp/files

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

Надеюсь, это поможет кому-то. Я боролся с этим часами!

(чтобы добавить к этому еще немного, как ни странно, разрешения не перешли к файлу .csv, который был передан в каталог файлов. Разрешения для файлов в файлах читают drwxrwxrwx и мои права доступа к log.csv read -rw-rw ----.. только fyi)

Ответ 9

У меня была одна и та же проблема. Невозможно напрямую получить доступ к файлу в устройствах Android, кроме оболочки adb или устройства rooting.

Здесь приведены альтернативы:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2) Попробуйте следующее: https://github.com/sanathp/DatabaseManager_For_Android

Ответ 10

Для резервного копирования с Android на рабочий стол

Откройте командную строку cmd и запустите это: adb backup -f C:\Intel\xxx.ab -noapk your.app.package. Не вводите пароль и нажмите "Резервное копирование моих данных". Обязательно не сохранять на диске C root. Вам может быть отказано. Вот почему я сохранил на C:\Intel.

Чтобы извлечь файл *.ab

  • Перейдите сюда и скачайте: https://sourceforge.net/projects/adbextractor/
  • Извлеките загруженный файл и перейдите в папку, в которую вы извлекли.
  • запустите это с вашими собственными именами файлов: java -jar abe.jar распаковать c:\Intel\xxx.ab c:\Intel\xxx.tar

Ответ 11

Один из простых способов - создать свою базу данных на SD-карте. Поскольку вы не можете получить доступ к папке с данными о телефоне во внутренней памяти, если вы не подключили свой телефон. Так почему бы просто не создать свою базу данных на SD-карте.

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

Ответ 12

adb backup не работал для меня, поэтому вот что я сделал (Xiaomi Redmi Note 4X, Android 6.0):
1. Выберите " Настройки"> "Дополнительные настройки"> "Резервное копирование и сброс"> "Локальные резервные копии".
2. Нажмите "Резервное копирование" в нижней части экрана.
3. Снимите флажки с надписью "Система" и "Приложения".
4. Нажмите кнопку раскрытия подробных сведений, расположенную справа от ячейки "Приложения", чтобы перейти к экрану выбора приложения.
5. Выберите нужное приложение и коснитесь OK.
6. После завершения резервного копирования фактический файл должен быть каким-то образом найден. Мою можно найти в /MIUI/backup/AllBackup/_FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_.
7. Затем я выполнил шаги из этого ответа RonTLV, чтобы фактически преобразовать файл резервной копии (.bak в моем случае) в tar (дублируя исходный ответ):
"
a) Перейдите сюда и загрузите: https://sourceforge.net/projects/adbextractor/
b) Извлеките загруженный файл и перейдите в папку, в которую вы извлекли.
c) запустите это с вашими собственными именами файлов: java -jar abe.jar распаковать c:\Intel\xxx.ab c:\Intel\xxx.tar
"

Ответ 13

вы можете скопировать этот файл db куда-нибудь в eclipse explorer (например, sdcard или ПК), и вы можете использовать sqlite для доступа и обновления этого файла db.

Ответ 14

может быть доступ к этой папке, вам необходимы права администратора.

поэтому у вас есть два варианта: -

  • откорректируйте свое устройство и попытайтесь получить доступ к этой папке
  • использовать эмулятор

p.s.: если вы используете любой из двух вышеуказанных параметров, вы можете получить доступ к этой папке, выполнив следующие шаги.

открыть перспективу DDMS → ваше устройство → (выберите File Explorer из правое окно) выберите пакет → данные → данные → имя пакета → Файлы

и оттуда вы можете подтянуть свой файл

Ответ 15

Вопрос: как получить доступ к данным-data-folder-in-android-device?


Если Android-устройство - Bluestacks * Root Browser APK показывает данные/данные/..


Попробуйте загрузить Root Browser из https://apkpure.com/root-browser/com.jrummy.root.browserfree


Если файл является текстовым файлом вам нужно нажать "Открыть как", "Текстовый файл", "Открыть как", "Текстовый редактор RB"

Ответ 16

Вы также можете попробовать скопировать файл в папку SD Card, которая является общей папкой, затем вы можете скопировать файл на свой компьютер, где вы можете использовать sqlite для доступа к нему.

Вот какой код вы можете использовать для копирования файла из данных/данных в папку общего хранилища:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

Ответ 17

Вы можете загрузить файл sigle следующим образом:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Перед загрузкой вы можете посмотреть структуру файлов в своем App-Directory. Для этого выполните следующие шаги: Извещение выше:

adb shell
run-as com.your.packagename 
cd files
ls -als .

Ссылка на Android-Studio Shahidul (fooobar.com/info/31463/...) также работает. Для тех, кто не видит DeviceFile Explorer в меню: обязательно, чтобы открыть /android-Directory в Android Studio. Например, у реагирующих пользователей есть это внутри их Project-Folder прямо на том же уровне, что и каталог /ios-Directory.