Подтвердить что ты не робот

Проводник DDMS файлов не может получить доступ к данным \data (HTC Desire HD)

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

4b9b3361

Ответ 1

SQLIte Database - это фактически файл, хранящийся в памяти телефона, который вы можете скопировать на 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

Скопировать файл в /mnt/sdcard с помощью

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

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

adb pull /mnt/sdcard/<filename> 

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

Ответ 3

Вам нужно укоренить свое устройство. Перейдите в командную строку и перейдите в папку, в которой находится ваш adb.

например.

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

введите adb root. теперь перейдите в свой проводник и проверьте файл.

Ответ 4

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

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

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

Ответ 5

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

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

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