Onde o emulador do Android armazena o banco de dados SQLite?

108

Estou trabalhando em um aplicativo Android que armazena dados em um banco de dados SQLite. Minha pergunta é: onde esse arquivo de banco de dados é armazenado no sistema de arquivos quando você está usando um emulador?

Eu vi que está armazenado em

/data/data/package_name/databases

mas preciso saber para onde no disco rígido da minha máquina local isso realmente mapeia. O banco de dados persiste em múltiplas execuções do emulador, mesmo depois de desligar a máquina, então não pode ficar apenas na RAM ...

I82Much
fonte

Respostas:

55

O sistema de arquivos do emulador não mapeia para um diretório em seu disco rígido. A imagem de disco do emulador é armazenada como um arquivo de imagem, que você pode gerenciar por meio do Eclipse (procure o ícone de aparência G1 na barra de ferramentas) ou do próprio binário do emulador (execute "emulator -help" para obter uma descrição das opções) .

É melhor usar o adb na linha de comando para entrar em um emulador em execução. Se você puder obter o diretório e o nome de arquivo específicos, poderá fazer um "adb pull" para retirar o arquivo de banco de dados do emulador e colocá-lo em seu disco rígido normal.

Edit : Removida a sugestão de que isso funciona para dispositivos não rooteados também - funciona apenas para emuladores e dispositivos onde você está operando adb como root.

Eric Mill
fonte
6
Tirei o banco de dados via ddms do Eclipse. Fiz minhas alterações, depois recuei. Funcionou como um encanto.
I82Much,
@ I82Muito funcionou para mim também, mude a perspectiva do eclipse para ddms e então você pode obter o arquivo de dados de lá. Obrigado.
vanzylv
Atualização de 2013: Em um dispositivo Jelly Bean, você não pode adb pull(mesmo com o caminho exato !), Se você não for root .
Bill The Ape
Isso não é uma atualização, basicamente, desde o início, os arquivos privados do aplicativo foram privados do adb em dispositivos protegidos. Mas esta questão é sobre o emulador, onde adb é executado como root.
Chris Stratton
6
Um exemplo para puxar o banco de dados de um emulador para sua máquina local éadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter
123

Uma atualização mencionada nos comentários abaixo:

Você não precisa mais estar na perspectiva DDMS, apenas abra o File Explorer na janela do Eclipse > Mostrar Visualização> Outro ... Parece que o aplicativo não precisa estar em execução, posso navegar em diferentes arquivos de aplicativos conteúdo. Estou executando o ADB versão 1.0.29


Ou você pode tentar a abordagem antiga:

Abra a perspectiva DDMS em seu Eclipse IDE

( Janela> Abrir Perspectiva> Outro> DDMS )

e o mais importante:

SEU APLICATIVO DEVE ESTAR EXECUTANDO PARA QUE VOCÊ POSSA VER A HIERARQUIA DE PASTAS E ARQUIVOS .

Em seguida, na guia File Explorer, você seguirá o caminho:

dados> dados> seu-nome-do-pacote> bancos de dados> seu-arquivo-de-banco de dados .

Em seguida, selecione o arquivo, clique no ícone do disquete no canto direito da tela para baixar o arquivo .db . Se você deseja fazer upload de um arquivo de banco de dados para o emulador, pode clicar no ícone do telefone (ao lado do ícone do disquete) e escolher o arquivo a ser carregado.

Se você deseja ver o conteúdo do arquivo .db , aconselho a usar o SQLite Database Browser, que pode ser baixado aqui .

PS: Se você quiser ver o banco de dados de um dispositivo real, você deve fazer o root em seu telefone.

rogcg
fonte
5
Se alguém estiver se perguntando, você deve clicar na guia 'File Explorer'.
MSpeed
Oi cyberrog, encontrei o arquivo de banco de dados, mas você pode me dizer como abrir este arquivo? ou como visualizar seu conteúdo?
Nilesh Nikumbh
4
@NileshNikumbh Selecione o arquivo, clique no ícone do disquete e selecione onde deseja armazená-lo. Você também precisa baixar o navegador SQLite. sourceforge.net/projects/sqlitebrowser Depois de instalá-lo, basta abrir o arquivo .db, selecionar a guia Browse Data e a coluna que deseja ver.
rogcg de
Ótimo post! Estou tendo problemas para obter o arquivo sqlite do dispositivo emulador:Failed to pull selection (null)
Jan-Terje Sørensen
@OckhamsRazor Se você quiser ver o banco de dados de um dispositivo real (não emulador), você deve fazer o root em seu telefone.
rogcg
18

As outras respostas estão seriamente desatualizadas. Com o Android Studio , esta é a maneira de fazer isso:

  1. Clique em Ferramentas> Android> Monitor de dispositivo Android

insira a descrição da imagem aqui

  1. Clique no Explorador de Arquivos

insira a descrição da imagem aqui

  1. Navegue até o seu arquivo db e clique no botão Salvar .

insira a descrição da imagem aqui

Yuchen Zhong
fonte
1
"O Android Device Monitor foi descontinuado no Android Studio 3.1 e removido do Android Studio 3.2. Os recursos que você poderia usar por meio do Android Device Monitor foram substituídos por novos recursos ..." developer.android.com/studio/profile/monitor
Pete Alvin
8

No Android Studio 3.4.1, você pode usar o recurso de pesquisa do Android Studio para encontrar o "Device File Explorer" e ir para o diretório / data / data / package_name / database do seu emulador.

S. Miller
fonte
6

Eu escrevi um script bash simples, que puxa o banco de dados do dispositivo Android para o seu computador (usuários de Linux, Mac)

nome do arquivo: android_db_move.sh uso: 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
Tadas Valaitis
fonte
6

Já que a questão não se restringe ao Android Studio, estou dando o caminho para o Visual Studio 2015 (funcionou para o Xamarin).

Ferramentas-Android-Monitor de dispositivo Android

insira a descrição da imagem aqui

  • Localize o arquivo de banco de dados mencionado na imagem acima e clique no botão Pull conforme mostrado na imagem 2.
  • Salve o arquivo no local desejado.
  • Você pode abrir esse arquivo usando SQLite Studio ou DB Browser for SQLite.

Agradecimentos especiais a outras pessoas que responderam a esta pergunta.

Foyzul Karim
fonte
4

Os bancos de dados são armazenados como arquivos SQLite em / data / data / PACKAGE / databases / DATABASEFILE onde:

Você pode ver (copiar de / para o sistema de arquivos) o arquivo de banco de dados no emulador selecionando a perspectiva DDMS , na guia Explorador de Arquivos.

Caligari
fonte
3

Solução simples - funciona tanto para emulador quanto para dispositivos conectados

1 Veja a lista de dispositivos / emuladores disponíveis atualmente.

$ adb devices

Lista de dispositivos anexa

G7NZCJ015313309 dispositivo emulador de dispositivo-5554

Dispositivo 9885b6454e46383744

2 Execute o backup em seu dispositivo / emulador

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

3 Extraia data.ab

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

Você encontrará o banco de dados na /dbpasta

Mick
fonte
Se você estiver no OS X, provavelmente não encontrará a parte zlib do openssl. Você pode usar esta $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
solução alternativa
Nao funciona para mim. Estou recebendobash: adb: command not found
Matthias
0

de acordo com os documentos do Android , o Monitor foi descontinuado no Android Studio 3.1 e removido do Android Studio 3.2. Para acessar os arquivos, há uma guia no Android Studio chamada "Device File Explorer", no lado inferior direito da janela de desenvolvimento, na qual você pode acessar o sistema de arquivos do emulador. Apenas siga

/ data / data / package_name / databases

boa sorte.

Explorador de arquivos do dispositivo Android

vahid sabet
fonte