Procurei em todos os lugares e não consigo encontrar uma resposta precisa ou um tutorial sobre como, se possível, fazer isso.
é possível extrair de alguma forma um banco de dados de um dispositivo Android sem ter que fazer o root? Eu só preciso extrair esses dados de alguma forma para coletá-los no meu pc, então como posso fazer isso? Preciso reprogramar o aplicativo ou qualquer método que vocês conheçam, mas lembre-se sem fazer o root no dispositivo. obrigado
Respostas:
Uma maneira comum de conseguir o que deseja é usar o comando pull do ADB.
Outra maneira que prefiro na maioria dos casos é copiar o banco de dados por código para o cartão SD:
Não se esqueça de definir a permissão para escrever em SD em seu manifesto, como abaixo.
fonte
getPath
método.Se o seu dispositivo estiver executando o Android v4 ou superior, você pode extrair dados do aplicativo, incluindo o banco de dados, sem root usando o
adb backup
comando, em seguida, extrair o arquivo de backup e acessar o banco de dados sqlite.Primeiro faça backup dos dados do aplicativo para o seu PC via cabo USB com o seguinte comando, substitua
app.package.name
pelo nome do pacote real do aplicativo.Isso solicitará que você "desbloqueie o dispositivo e confirme a operação de backup". Não forneça uma senha para criptografia de backup , para que você possa extraí-la mais tarde. Clique no botão "Fazer backup dos meus dados" no seu dispositivo. A tela exibirá o nome do pacote do qual você está fazendo backup e, em seguida, fechará sozinha após a conclusão com êxito.
O
data.ab
arquivo resultante em sua pasta de início contém dados do aplicativo no formato de backup do Android. Para extraí-lo, use o seguinte comando:Se o acima terminar com
openssl:Error: 'zlib' is an invalid command.
erro, tente o seguinte.O resultado é a
apps/app.package.name/
pasta que contém os dados do aplicativo, incluindo o banco de dados sqlite.Para mais detalhes, você pode verificar a postagem original do blog .
fonte
openssl:Error: 'zlib' is an invalid command.
, à qual respondi comdd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
NO ENTANTO, depois de mostrar que17+0 records in17+0 records out17 bytes transferred in 0.000064 secs
não há evidência de que algo tenha sido feito na pasta. Como são apenas 17 bytes, presumo que o comando também falhou. Eu acho que é ruim como eu não consigo acessaradb pull
o banco de dados de um aplicativo de depuração !!android:allowBackup="false"
openssl
on Mac OS X não suportamzlib
comando ou, então, eu reinstalei o único com cerveja:brew reinstall openssl
. Isso não substituirá o openssl do seu sistema. Portanto, modifiquei o comando PATH apenas para a sessão atual:export PATH=/usr/local/opt/openssl/bin:$PATH
após o que pude executar com êxito os comandos desta resposta.Para aplicativos depuráveis 1 em dispositivos não enraizados , você pode usar o seguinte comando:
Exemplo:
Defina PATH adb para variáveis de ambiente ou use o comando cd para ferramentas de plataforma de pasta android sdk.
Exemplo:
então use o comando acima
1 Observe que a maioria dos aplicativos na Play Store não são depuráveis, pois requer a configuração do sinalizador depurável no manifesto.
fonte
package.name
pelo pacote do aplicativo, o erro é retornado:run-as: Package 'com.my.app' is unknown
A maioria das respostas aqui é muito mais complicada do que deveria ser. Se você deseja apenas copiar o banco de dados do seu aplicativo do telefone para o computador, você só precisa deste comando:
Tudo o que você precisa preencher no comando acima é o nome do pacote do seu aplicativo, como o banco de dados é chamado e, opcionalmente, para qual / onde você deseja que o banco de dados seja copiado.
Observe que este comando específico só funcionará se você tiver apenas um dispositivo conectado ao computador. O
-d
parâmetro significa que o único dispositivo conectado será o alvo. Mas existem outros parâmetros que você pode usar em seu lugar:-e
terá como alvo o único emulador em execução-s <serialnumber>
terá como alvo um dispositivo com um número de série específico.fonte
adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db"
inicie oSSHDroid
FileZilla e conecte-se ao telefone via protocolo SFTP. Defina / mnt / sdcard como diretório remoto padrão.adb -d shell "run-as your.package.name ls databases"
) e 2) você pode querer obter quaisquer outros arquivos associados junto com o banco de dados, em meu caso extraindo os arquivos -smh e -wal era a única maneira de fazer o DB Browser for SQLite abrir o banco de dadosUsando o Android Studio 3.0 ou versão posterior, é possível extrair o banco de dados (também preferência compartilhada, diretório de cache e outros) se o aplicativo for executado no modo de depuração em um dispositivo sem root.
Para obter o banco de dados usando o Android Studio, siga estas etapas.
fonte
fonte
Para Ubuntu (não só?):
veja a resposta de Sergeis, mas em vez de openssl use zlib-flate:
Caso contrário, o openssl provavelmente irá lançar:
porque o openssl não é compilado com suporte zlib no Ubuntu
fonte
Desde então, nada realmente funciona para mim. Eu crio um pequeno script BATCH do Windows baseado em outras respostas combinadas. Espero que ajude alguém. Simplesmente use: backupDatabase <PackageName> <ApplicationName> [TargetDirectory]. Ele usa o método de backup de Sergei e o Android Backup Extractor .
fonte
você pode facilmente extrair o arquivo sqlite do seu dispositivo (root não é necessário)
iniciar adb
cd / sdk / platform-tools ./adb shell
Em seguida, digite o seguinte comando no terminal
./adb -d shell "run-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
Por exemplo
./adb -d shell "run-as com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
fonte
Se você está tentando fazê-lo no android 6, solicite a permissão e use o código de resposta desta pergunta
Assim que for concedido
fonte
Alternativamente, você pode usar minha biblioteca Ultra Debugger . Permite baixar o banco de dados como arquivo ou editar valores diretamente no navegador. Sem necessidade de root, muito fácil de usar.
fonte
No Mac (sem necessidade de root)
Ele copiará o arquivo sqlite na pasta platform-tools.
fonte
sim, se seu aplicativo Android criar uma cópia de arquivo do banco de dados que pode ser acessada por todos.
O Android protege os dados privados dos aplicativos para que não sejam visíveis / acessíveis por outros aplicativos. um banco de dados são dados privados. seu aplicativo pode, é claro, ler o arquivo de banco de dados para que possa fazer uma cópia de arquivo para algum arquivo público visível.
fonte
Em um dispositivo com acesso root, você pode:
fonte
Com base na resposta dada por Lam Vinh, aqui está um arquivo de lote simples que funciona para mim em minha primeira geração Nexus 7. Ele solicita que o usuário insira o nome do pacote e, em seguida, o nome do banco de dados (sem a extensão .sqlite) e o coloca em c: \ temp. Isso pressupõe que você tenha o SDK do Android definido nas variáveis de ambiente.
fonte
Se você estiver no Android 4.0 ou superior e em um mac , aqui está um script ruby que salvará o conteúdo do aplicativo na área de trabalho. Eu imagino que isso também funcione no Ubuntu, embora eu não tenha testado.
para executar -> ruby your_ruby_file_name.rb
Este script é apenas "happy path", portanto, certifique-se de que seu dispositivo esteja conectado e que o adb tenha sido adicionado ao seu perfil.
fonte
Eu dou a solução completa para "salvar" e "restaurar" o banco de dados do aplicativo de / para o armazenamento interno (não para o PC com adb).
Eu fiz dois métodos, um para salvar e outro para restaurar o banco de dados. Use estes métodos no final de onCreate () em MainActivity (um ou outro se você quiser salvar ou restaurar o banco de dados).
salvar banco de dados no armazenamento interno:
restaurar banco de dados do armazenamento interno:
fonte
É sempre melhor se as coisas forem automatizadas. É por isso que escrevi um script python simples para copiar o arquivo db do dispositivo usando ADB. Isso economiza muito tempo de desenvolvimento se você fizer isso com frequência.
Funciona apenas com aplicativos depuráveis se o dispositivo não tiver acesso root.
Aqui está o link para a essência.
Execute-o como:
python copyandroiddbfile.py
fonte
Se você quiser que seu arquivo de banco de dados
Veja o DDMS> Explorar Arquivos
encontre seu arquivo db a partir do nome do seu pacote
em seguida, clique em extrair um arquivo do dispositivo (apenas dispositivo enraizado)
fonte