Как Genymotion. Как вытащить базу данных из устройства. мой/data/ data / папка кажется пустой
У меня проблема с моей установкой Ubuntu genymotion. В основном я не могу отлаживать свою базу данных, так как как через СУБД в eclipse и adb в shell я не могу просматривать содержимое /data/ folder. Файлы не отображаются.
Я вхожу через adb по cd в / sdk / platform-tools и набираю./АБР оболочки Су . Я вижу, что вкладка не работает, поэтому я слепо набираю путь. В любом случае я не могу вытащить db, возможно, я делаю что-то неправильно с командами.
через СУБД пробую для подключения, но папка данных не отображает содержимое.
на эмуляторе все работает гладко, но эмулятор медленный, и я бы предпочел использовать genymotion.
любые предложения, как справиться с этой проблемой?
4 ответов
у меня нет проблемы, о которой вы говорите, пользователь оболочки по умолчанию на Genymotion-root, поэтому этого не должно произойти. Несмотря ни на что, вы можете использовать run-as
команда для прямого доступа к данным.
чтобы сделать его коротким. Папка данных вашего приложения защищена правами пользователя вашего приложения. Пользователь оболочки по умолчанию не имеет права доступа к папке приложения. Вы можете изменить пользователя, которого использует оболочка, благодаря .
- открыть командную строку:
adb shell
- потом типа:
run-as your.package.name
эта команда изменит пользователя оболочки на пользователя вашего приложения. Таким образом, вы будете иметь право читать и писать на данных приложения. Вы также будете перенаправлены в папку данных приложения: /data/data/you.package.name
когда это будет сделано, вы можете легко просматривать ваши файлы.
обратите внимание: ваше приложение должно быть построено как debug, чтобы иметь возможность использовать эту команду. Он должен отображаться на устройстве список процессов на DDMS.
запустить эмулятор на локальном компьютере, затем
localuser:~ localhost$ adb shell
оболочка@на Android:/ $ Су
shell@android: / # cp / данные / данные/ Ваш.пакет.имя / базы данных/your_database.db/mnt / shell / эмулируется / 0 / скачать/your_database.db
shell@android: / # выход
оболочка@для Android:/ $ выход
localuser:~ localhost$ adb pull /mnt / shell / эмулируется / 0 / скачать/your_database.db ~/your_database.db
что он делает:
1. Подключается к эмулятору
2. Запрашивает разрешения суперпользователя
3. Копирует файл, доступный только суперпользователю, в общедоступный каталог (в данном случае загружает)
4. Извлекает файл из общей папки (Загрузки) в домашний каталог локального компьютера; вы также можете выполнить этот шаг из Eclipse gui.
вы должны установить разрешения для этой папки / файла, затем вы можете легко потянуть:
adb shell "Запуск от имени пакета.имя chmod 666 / data / data / package.имя / базы данных / файл"
ADB pull / data / data / package.имя / базы данных / файл .
мне удалось обойти проблему, поэтому я публикую свое решение, если кто-то найдет его полезным.
ранее я создавал VM без Google apis, приложение superUser разбивалось каждый раз, когда я хотел запустить телефон.
поэтому я создал VM, который поставляется с google play и загрузил приложение SQL Debugger. Я также использую этот код в своем наборе тестов, поэтому я получаю db на SD-карту в конце каждого теста, который я запускаю. Таким образом, мне не нужен суперпользователь разрешения.
public static void copyDbToSd(Context context) {
File dbFile = context.getDatabasePath((String) DatabaseHandler.DATABASE_NAME);
InputStream myInput;
try {
myInput = new FileInputStream(dbFile);
OutputStream myOutput = new FileOutputStream(
Environment.getExternalStorageDirectory()
+ java.io.File.separator
+ "database.db");
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
} catch (FileNotFoundException e) {
Log.e(TAG, "Exception: ", e);
} catch (IOException e) {
Log.e(TAG, "Exception: ", e);
}
}
где DatabaseHandler.DATABASE_NAME-имя моей базы данных, которую я установил при создании БД.