Где эмулятор Android хранит базу данных SQLite?

108

Я работаю над приложением Android, которое хранит данные в базе данных SQLite. Мой вопрос: где этот файл базы данных хранится в файловой системе при использовании эмулятора?

Я видел, что он хранится в

/data/data/package_name/databases

но мне нужно знать, где на моем локальном жестком диске компьютера, который на самом деле отображается. База данных сохраняется на нескольких запусках эмулятора, даже после того, как вы выключили аппарат, поэтому он не может просто находиться в ОЗУ...

Теги:

7 ответов

57
Лучший ответ

Файловая система эмулятора не отображается в каталог на вашем жестком диске. Образ диска эмулятора хранится как файл изображения, с которым вы можете управлять через Eclipse (искать иконку G1 на панели инструментов) или через сам эмулятор эмулятора (запустите "эмулятор -help" для описания параметров).

Лучше всего использовать adb из командной строки для подключения к запущенному эмулятору. Если вы можете получить конкретный каталог и имя файла, вы можете сделать "adb pull", чтобы получить файл базы данных с эмулятора и на ваш обычный жесткий диск.

Изменить. Устранено предположение, что это работает и для нерасширенных устройств - оно работает только для эмуляторов и устройств, в которых вы работаете с adb как root.

  • 6
    Я получил DB от DDM от Eclipse. Сделал мои изменения, затем отодвинул. Работал как шарм.
  • 0
    @ I82Многие сработали и у меня, измените перспективу затмения на ddms, и тогда вы сможете получить там файл данных. Спасибо.
Показать ещё 4 комментария
115

Обновление упоминается в комментариях ниже:

Вам больше не нужно быть в перспективе DDMS, просто откройте проводник из окна Eclipse > Показать представление> Прочее... Кажется, что приложение не нужно запускать даже, я могу просматривать в разных файлах приложений содержание. Я использую версию ADB 1.0.29


Или вы можете попробовать старый подход:

Откройте перспективу DDMS в вашей Eclipse IDE

(Окно> Открыть перспективу> Другое> DDMS)

и самое главное:

ВАША ЗАЯВКА ДОЛЖНА БЫТЬ РАБОТАЕТ, ЧТОБЫ ВЫ МОЖЕТЕ УВИДЕТЬ ИЕРАРХИЮ ПАПОВ И ФАЙЛОВ.

Затем на вкладке "Проводник" вы пройдете по пути:

данные> данные> имя вашего пакета> базы данных> файл вашей базы данных.

Затем выберите файл, щелкните значок дискеты в правом углу экрана, чтобы загрузить файл.db. Если вы хотите загрузить файл базы данных в эмулятор, вы можете нажать на значок телефона (рядом со значком дискеты) и выбрать файл для загрузки.

Если вы хотите увидеть содержимое файла.db, я советую вам использовать SQLite Database Browser, который вы можете скачать здесь.

PS: Если вы хотите увидеть базу данных с реального устройства, вы должны рутировать свой телефон.

  • 5
    Если кому-то интересно, вы должны нажать на вкладку «Проводник».
  • 0
    Привет cyberrog, я нашел файл базы данных, но вы можете сказать мне, как открыть этот файл? или как посмотреть его содержимое?
Показать ещё 10 комментариев
16

Другие ответы сильно устарели. С Android Studio, это способ сделать это:

  • Нажмите Инструменты > Android > Монитор устройств Android

Изображение 1126

  1. Нажмите Проводник

Изображение 1127

  1. Перейдите в свой файл db и нажмите кнопку Сохранить.

Изображение 1128

6

Я написал простой bash script, который вытаскивает базу данных с устройства Android на ваш компьютер (Linux, пользователи Mac)

имя_файла: android_db_move.sh use: android_db_move.sh com.example.app db_name.db

#!/bin/bash

REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"

if [ $# -ne $REQUIRED_ARGS ]
    then
        echo ""
        echo "Usage:"
        echo "android_db_move.sh [package_name] [db_name]"
        echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
        echo ""
    exit 1
fi;


echo""

cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"

echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

echo $cmd2
eval $cmd2

if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

exit 0
5

Поскольку вопрос не ограничивается Android Studio, поэтому я даю путь для Visual Studio 2015 (работал для Xamarin).

Изображение 1129

Изображение 1130

  • Найдите файл базы данных, упомянутый на изображении выше, и нажмите кнопку Pull, как показано на рисунке 2.
  • Сохраните файл в нужном месте.
  • Вы можете открыть этот файл, используя SQLite Studio или DB Browser для SQLite.

Отдельное спасибо другим ответчикам по этому вопросу.

4

Базы данных хранятся в виде файлов SQLite в /data/data/PACKAGE/databases/DATABASEFILE, где:

  • ПАКЕТ - это пакет, объявленный в AndroidManifest.xml(тег "manifest", атрибут "package" )
  • DATABASEFILE - это имя, переданное при вызове конструктора SQLiteOpenHelper, как описано здесь: http://developer.android.com/guide/topics/data/data-storage.html#db

Вы можете увидеть (скопировать из/в файловую систему) файл базы данных в эмуляторе, выбрав Перспектива DDMS на вкладке "Проводник".

3

Простое решение - работает как для эмулятора, так и для подключенных устройств

1 См. список доступных устройств/эмуляторов.

$ adb devices

Список подключенных устройств

G7NZCJ015313309 устройство эмулятора устройства-5554

9885b6454e46383744 устройство

2 Запустите резервное копирование на своем устройстве/эмуляторе

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 Извлечь data.ab

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

Вы найдете базу данных в папке /db

  • 0
    Если вы работаете в OS X, вы, вероятно, пропустите zlib-часть openssl. Вы можете использовать этот $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf - : $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

Ещё вопросы

Сообщество Overcoder
Наверх
Меню