Исследователь файлов DDMS не может получить доступ к данным \ данным (HTC Desire HD) - PullRequest
17 голосов
/ 08 февраля 2011

Я работаю над кодом SQLite и хотел бы изучить базу данных.Если я запускаю код на эмуляторе, я могу извлечь файл из data \ data \ myProject \ database с помощью файлового менеджера DDMS, но если я запускаю его на реальном оборудовании, папка data \ data будет недоступна.Есть ли способ обойти это, кроме получения root-доступа к телефону?

Ответы [ 5 ]

19 голосов
/ 08 февраля 2011

База данных SQLIte - это на самом деле просто файл, сохраненный в памяти телефона, который вы можете скопировать на SD-карту вашего телефона и затем легко получить к нему доступ со своего ПК.Ниже приведена функция, которая делает именно то, что вам нужно.Просто убедитесь, что изменили имя вашего пакета и имя базы данных перед использованием функции.

public static void backupDatabase() throws IOException {
    //Open your local db as the input stream
    String inFileName = "/data/data/your.package.name/databases/database.sqlite";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);

    String outFileName = Environment.getExternalStorageDirectory()
                                                    + "/database.sqlite";
    //Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);
    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer))>0){
        output.write(buffer, 0, length);
    }
    //Close the streams
    output.flush();
    output.close();
    fis.close();
}

Как видно из кода, база данных всегда хранится в папке:

/data/data/your.package.name/databases/

Имя (в нашем примере "database.sqlite") - это то, что вы выбралипри расширении SQLiteOpenHelper.Очевидно, вам также необходимо заменить «your.package.name» на имя пакета вашего приложения.

2 голосов
/ 12 ноября 2012

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

, например

C: \ Program Files \ Android \ android-sdk \ platform-tools

тип adb root. Теперь зайдите в ваш файловый менеджер и проверьте.

2 голосов
/ 02 сентября 2011

Копировать файл в / mnt / sdcard, используя

cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 

с помощью adb, а затем скопируйте на рабочий стол с / mnt / sdcard с помощью

adb pull /mnt/sdcard/<filename> 

, а затем используйте sqlite3 для просмотра.

1 голос
/ 18 мая 2011

На самом деле единственный способ обойти это - поместить файл в такое место, где вы МОЖЕТЕ получить к нему доступ, как на SD-карте во время разработки. Затем, как только вы убедитесь, что все работает правильно, положите файл туда, куда хотите.

Я говорю это потому, что у меня есть Nexus One и разработчик Nexus One. При использовании DDMS File Explorer я заметил, что могу просматривать папку с данными на устройстве разработчика, но не могу на розничном устройстве. Я рутировал свое розничное устройство, и оно не помогло.

Так что я думаю, что нужно провести дополнительные исследования по этой проблеме. Но до тех пор, я надеюсь, это поможет.

1 голос
/ 08 февраля 2011

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

Однако ваше приложение не может изменить отсутствие разрешения на доступ к списку в каталоге / data защищенного телефона.

В результате вам придется захватить файл с помощью 'adb pull / full / path / to / file' - вы не можете просмотреть его, так как вы не можете сгенерировать список / data или, вероятно, нескольких других промежуточных родительских каталогов родителей ваш файл.

...