Как Genymotion. Как вытащить базу данных из устройства. мой/data/ data / папка кажется пустой

У меня проблема с моей установкой Ubuntu genymotion. В основном я не могу отлаживать свою базу данных, так как как через СУБД в eclipse и adb в shell я не могу просматривать содержимое /data/ folder. Файлы не отображаются.

Я вхожу через adb по cd в / sdk / platform-tools и набираю./АБР оболочки Су . Я вижу, что вкладка не работает, поэтому я слепо набираю путь. В любом случае я не могу вытащить db, возможно, я делаю что-то неправильно с командами.

через СУБД пробую для подключения, но папка данных не отображает содержимое.

на эмуляторе все работает гладко, но эмулятор медленный, и я бы предпочел использовать genymotion.

любые предложения, как справиться с этой проблемой?

4 ответов


у меня нет проблемы, о которой вы говорите, пользователь оболочки по умолчанию на Genymotion-root, поэтому этого не должно произойти. Несмотря ни на что, вы можете использовать run-as команда для прямого доступа к данным.

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

  1. открыть командную строку: adb shell
  2. потом типа: 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-имя моей базы данных, которую я установил при создании БД.