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

108

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

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

/data/data/package_name/databases

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

I82Much
источник

Ответы:

55

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

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

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

Эрик Милл
источник
6
Я отключил БД через ddms от Eclipse. Внес изменения, затем вернул назад. Работал как шарм.
I82Much
@ I82Much тоже сработало, измените перспективу eclipse на ddms, и тогда вы сможете получить оттуда файл данных. Спасибо.
vanzylv
Обновление 2013: на устройстве Jelly Bean вы не можете adb pull(даже с точным путем!), Если вы не являетесь пользователем root .
Bill The Ape
Это не обновление, в основном с самого начала частные файлы приложения были приватными от adb на защищенных устройствах. Но этот вопрос про эмулятор, где adb запускается от имени root.
Крис Страттон,
6
Пример извлечения базы данных из эмулятора на локальный компьютерadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Джошуа Пинтер,
123

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

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


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

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

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

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

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

Затем во вкладке проводника вы будете следовать по пути:

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

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

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

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

rogcg
источник
5
Если кому-то интересно, вы должны нажать на вкладку «Проводник».
MSpeed
Привет, киберрог, я нашел файл базы данных, но не могли бы вы сказать мне, как открыть этот файл? или как посмотреть его содержимое?
Nilesh Nikumbh
4
@NileshNikumbh Выберите файл, щелкните значок дискеты и выберите, где вы хотите его сохранить. Вам также необходимо загрузить браузер SQLite. sourceforge.net/projects/sqlitebrowser После его установки просто откройте файл .db, выберите вкладку «Обзор данных» и столбец, который вы хотите увидеть.
rogcg
Отличный пост! У меня проблемы с получением файла sqlite с эмулятора:Failed to pull selection (null)
Ян-Терье Соренсен,
@OckhamsRazor Если вы хотите видеть базу данных с реального устройства (не эмулятора), вы должны получить root-доступ на своем телефоне.
rogcg
18

Остальные ответы сильно устарели. В Android Studio это можно сделать следующим образом:

  1. Нажмите Инструменты> Android> Android Device Monitor.

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

Yuchen Zhong
источник
1
«Android Device Monitor устарел в Android Studio 3.1 и удален из Android Studio 3.2. Функции, которые вы могли использовать через Android Device Monitor, были заменены новыми функциями ...» developer.android.com/studio/profile/monitor
Пит Элвин
8

В Android Studio 3.4.1 вы можете использовать функцию поиска Android Studio, чтобы найти «Проводник файлов устройства», а затем перейти в каталог / data / data / package_name / database вашего эмулятора.

С. Миллер
источник
6

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

имя файла: android_db_move.sh использование: 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
Тадас Валайтис
источник
6

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

Инструменты-Android-Монитор устройств Android

введите описание изображения здесь

  • Найдите файл базы данных, упомянутый на изображении выше, и нажмите кнопку «Вытянуть», как показано на изображении 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папке

Мик
источник
Если вы используете 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 -
Лассе Магнуссен,
У меня не работает. Я получаюbash: adb: command not found
Маттиас
0

согласно документам Android , Monitor устарел в Android Studio 3.1 и удален из Android Studio 3.2. Для доступа к файлам в Android Studio есть вкладка под названием «Device File Explorer» в правом нижнем углу окна разработки, где вы можете получить доступ к файловой системе вашего эмулятора. Просто следуйте

/ data / data / имя_пакета / базы данных

удачи.

Проводник файлов на устройстве Android

вахид сабет
источник