Я работаю над некоторым кодом SQLite и хотел бы изучить базу данных. Если я запустил код в эмуляторе, я могу вытащить файл из data \ data \ myProject \ databases с помощью диспетчера файлов DDMS, но если я запустил его на самом аппаратном обеспечении, папка data \ data недоступна. Есть ли способ обойти это, кроме как получить root-доступ к телефону?DDMS-файл Explorer не может получить доступ к данным data (HTC Desire HD)
ответ
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» на имя вашего пакета приложений.
Это хорошая техника для тех из нас, у кого нет корневых телефонов. Просто убедитесь, что вы добавили разрешение WRITE_EXTERNAL_STORAGE, иначе это не сработает. Это было поймано в моих обработчиках исключений, поэтому я пропустил это. –
привет, я попробовал, но я действительно не вижу, где находится файл данных. Я использую окна, и мои файлы андроида хранятся в рабочей области, но файл данных под моим пакетом –
Я считаю, что ваше приложение может изменять разрешения unix своих локальных файлов данных хранения, чтобы они стали доступными для других приложений и для adb.
Однако ваше приложение не может изменить отсутствие разрешения на список в каталоге/данных защищенного телефона.
В результате вам нужно будет захватить файл с помощью «adb pull/full/path/to/file» - вы не можете его просматривать, так как вы не можете создать список/данные или, возможно, несколько других промежуточных родителей каталога вашего файла.
Действительно, единственный способ обойти это - разместить свой файл в каком-то месте, где вы можете получить доступ к нему, как на SD-карте во время разработки. Затем, как только вы будете удовлетворены, работа правильно поместит файл там, где вы хотите.
Я говорю это, потому что у меня есть розничная Nexus One и разработчик Nexus One. При использовании DDMS File Explorer я заметил, что могу просматривать папку с данными на устройстве разработчика, но не мог на розничном устройстве. Я укрепил свой розничный магазин, и это не помогло.
Поэтому я предполагаю, что над этой проблемой должно быть сделано больше исследований. Но до тех пор я надеюсь, что это поможет.
Копирование файла в/мнт/SDCard с помощью
cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard
с помощью ADB, а затем скопировать на рабочий стол из/шоссе/SDCard с помощью
adb pull /mnt/sdcard/<filename>
, а затем использовать sqlite3 для его просмотра.
просто не интересуется, как cp без root .. :) – yoshi
Необходимо укоренить свое устройство. Перейдите в командную строку и перейдите в место, где находится ваш adb.
например.
C: \ Program Files \ Android \ Android-SDK \ платформенных инструментов
типа adb root
. теперь перейдите в свой файл-проводник и проверьте.
oh my .. такой простой способ сделать это .. вы спасатель жизни .. большое вам спасибо .. –
Для этого вам необходимо укоренить свой телефон. –
Вы должны быть root, чтобы делать это, просматривая, но программа может изменить разрешение файла, сделав его доступным через его полное имя пути. –