Де зберігається емулятор Android на базі даних SQLite?


108

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

Я бачив, що це зберігається в

/data/data/package_name/databases

але мені потрібно знати, де на жорсткому диску моєї локальної машини насправді відображається карта. База даних зберігається в декількох запусках емулятора, навіть після вимкнення машини, тому вона не може просто проживати в ОЗУ ...

Відповіді:


55

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

Вам найкраще використовувати adb з командного рядка для підключення до працюючого емулятора. Якщо ви можете отримати конкретну директорію та ім'я файлу, ви можете зробити "adb pull", щоб вийняти файл емулятора бази даних з емулятора і на звичайний жорсткий диск.

Редагувати : Видалено припущення, що це працює і для не вкорінених пристроїв - він працює лише для емуляторів та пристроїв, де ви керуєте adb як root.


6
Я отримав БД від DDMS від Eclipse. Внесла свої зміни, потім відсунула назад. Працював як шарм.
I82Муч

@ I82Much працював і для мене, змініть перспективу затемнення на ddms, і тоді ви можете отримати файл даних там.
vanzylv

Оновлення 2013 року: На пристрої Jelly Bean ви не можете adb pull(навіть із точним шляхом!), Якщо ви не користуєтеся корінням .
Білл Мавпа

Це не оновлення, в основному з запуску програми приватні файли були приватними від adb на захищених пристроях. Але це питання стосується емулятора, де adb працює як root.
Кріс Страттон

6
Приклад для перетягування бази даних з емулятора на локальну машинуadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Джошуа Пінтер

123

Оновлення, згадане в коментарях нижче:

Вам більше не потрібно бути в перспективі DDMS, просто відкрийте Провідник файлів у вікні Eclipse > Show View> Other ... Здається, що додаток не потрібно запускати, я можу переглядати файли в різних додатках зміст. Я використовую ADB версії 1.0.29


Або ви можете спробувати старий підхід:

Відкрийте перспективу DDMS на вашому IDE Eclipse

( Вікно> Відкрита перспектива> Інше> DDMS )

і найголовніше:

ВАШЕ ЗАЯВЛЕННЯ МОЖЕ ПРАВИЛИ, ТАКОМ ВИ МОЖЕТЕ ДАВАТИ ІЕРАРХІЮ СТОРІН І ФАЙЛІВ .

Потім на вкладці Провідник файлів ви будете слідувати шляху:

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

Потім виберіть файл, натисніть на значок дискета в правому куті екрана, щоб завантажити .db файл. Якщо ви хочете завантажити файл бази даних в емулятор, ви можете натиснути на значок телефону (поруч із піктограмою дискети) та вибрати файл для завантаження.

Якщо ви хочете побачити вміст файлу .db , радимо скористатися браузером баз даних SQLite, який ви можете завантажити тут .

PS: Якщо ви хочете побачити базу даних з реального пристрою, ви повинні викорінити свій телефон.


5
Якщо хтось цікавиться, вам потрібно натиснути на вкладку «Провідник файлів».
MSpeed

Привіт cyberrog, я знайшов файл бази даних, але ви можете мені сказати, як відкрити цей файл? або як переглянути його вміст?
Нілеш Нікумб

4
@NileshNikumbh Виберіть файл і натисніть на значок дискета та виберіть, де ви хочете його зберігати. Вам також потрібно завантажити браузер SQLite. sourceforge.net/projects/sqlitebrowser Після встановлення просто відкрийте .db файл, виберіть вкладку «Огляд даних» та стовпець, який ви хочете побачити.
rogcg

Чудовий пост! У мене виникають проблеми з отриманням файлу sqlite з пристрою емулятора:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor Якщо ви хочете побачити базу даних із справжнього пристрою (а не емулятора), ви маєте викорінити свій телефон.
rogcg

18

Інші відповіді сильно застаріли. У студії Android це так:

  1. Клацніть Інструменти> Android> Монітор пристроїв Android

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

  1. Клацніть на Провідник файлів

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

  1. Перейдіть до вашого db-файлу та натисніть кнопку Зберегти .

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


1
"Монітор пристроїв Android був знятий у 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 your emulator.


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 для SQLite.

Особлива подяка іншим відповідачам цього питання.


4

Бази даних зберігаються у вигляді файлів SQLite в / data / data / PACKAGE / databases / DATABASEFILE, де:

  • ПАКЕТ - це пакет, оголошений в AndroidManifest.xml (тег "маніфест", атрибут "пакет")
  • 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 Витяг даних.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 -
Lasse Magnussen

Не працює для мене. Я отримуюbash: adb: command not found
Маттіас

0

згідно з документами Android , Монітор застаріли в Android Studio 3.1 та видалено з Android Studio 3.2. Для доступу до файлів, в андроїд-студії є вкладка "Провідник файлів пристроїв", що знаходиться в нижній правій частині вікна розробки, до якого можна отримати доступ до файлової системи емулятора. Просто слідкуйте

/ дані / дані / ім'я пакета / бази даних

Щасти.

Android пристрою Провідник файлів


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.