Я работаю над некоторым кодом SQLite и хотел бы изучить базу данных. Если я запустил код в эмуляторе, я могу вытащить файл из data\data\myProject\databases с помощью диспетчера файлов DDMS, но если я запустил его на самом аппаратном обеспечении, папка data\data недоступна. Есть ли способ обойти это, кроме как получить доступ root к телефону?
Проводник DDMS файлов не может получить доступ к данным \data (HTC Desire HD)
Ответ 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 я заметил, что могу просматривать папку с данными на устройстве разработчика, но не мог на розничном устройстве. Я укрепил свой розничный магазин, и это не помогло.
Поэтому я предполагаю, что над этой проблемой должно быть сделано больше исследований. Но до тех пор я надеюсь, что это поможет.