Я работаю над приложением Android, которое хранит данные в базе данных SQLite. Мой вопрос: где этот файл базы данных хранится в файловой системе при использовании эмулятора?
Я видел, что он хранится в
/data/data/package_name/databases
но мне нужно знать, где на моем локальном жестком диске компьютера, который на самом деле отображается. База данных сохраняется на нескольких запусках эмулятора, даже после того, как вы выключили аппарат, поэтому он не может просто находиться в ОЗУ...
Файловая система эмулятора не отображается в каталог на вашем жестком диске. Образ диска эмулятора хранится как файл изображения, с которым вы можете управлять через Eclipse (искать иконку G1 на панели инструментов) или через сам эмулятор эмулятора (запустите "эмулятор -help" для описания параметров).
Лучше всего использовать adb из командной строки для подключения к запущенному эмулятору. Если вы можете получить конкретный каталог и имя файла, вы можете сделать "adb pull", чтобы получить файл базы данных с эмулятора и на ваш обычный жесткий диск.
Изменить. Устранено предположение, что это работает и для нерасширенных устройств - оно работает только для эмуляторов и устройств, в которых вы работаете с adb как root.
Обновление упоминается в комментариях ниже:
Вам больше не нужно быть в перспективе DDMS, просто откройте проводник из окна Eclipse > Показать представление> Прочее... Кажется, что приложение не нужно запускать даже, я могу просматривать в разных файлах приложений содержание. Я использую версию ADB 1.0.29
Или вы можете попробовать старый подход:
Откройте перспективу DDMS в вашей Eclipse IDE
(Окно> Открыть перспективу> Другое> DDMS)
и самое главное:
ВАША ЗАЯВКА ДОЛЖНА БЫТЬ РАБОТАЕТ, ЧТОБЫ ВЫ МОЖЕТЕ УВИДЕТЬ ИЕРАРХИЮ ПАПОВ И ФАЙЛОВ.
Затем на вкладке "Проводник" вы пройдете по пути:
данные> данные> имя вашего пакета> базы данных> файл вашей базы данных.
Затем выберите файл, щелкните значок дискеты в правом углу экрана, чтобы загрузить файл.db. Если вы хотите загрузить файл базы данных в эмулятор, вы можете нажать на значок телефона (рядом со значком дискеты) и выбрать файл для загрузки.
Если вы хотите увидеть содержимое файла.db, я советую вам использовать SQLite Database Browser, который вы можете скачать здесь.
PS: Если вы хотите увидеть базу данных с реального устройства, вы должны рутировать свой телефон.
Другие ответы сильно устарели. С Android Studio, это способ сделать это:
Я написал простой 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
Поскольку вопрос не ограничивается Android Studio, поэтому я даю путь для Visual Studio 2015 (работал для Xamarin).
Отдельное спасибо другим ответчикам по этому вопросу.
Базы данных хранятся в виде файлов SQLite в /data/data/PACKAGE/databases/DATABASEFILE, где:
Вы можете увидеть (скопировать из/в файловую систему) файл базы данных в эмуляторе, выбрав Перспектива DDMS на вкладке "Проводник".
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
$ 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 -