Em um dispositivo Android sem acesso root, posso navegar até a pasta de dados que contém o banco de dados usando o run-as
comando com meu nome de pacote. A maioria dos tipos de arquivos fico contente apenas com a visualização, mas com o banco de dados que gostaria de extrair do dispositivo Android.
Existe um comando download
copy
ou move
desta parte do shell adb? Eu gostaria de baixar o arquivo de banco de dados e visualizar seu conteúdo usando um navegador de banco de dados.
Uma resposta aqui envolve transformar o pacote de aplicativo inteiro em um arquivo compactado, mas não há mais nenhuma resposta sobre como extrair esse arquivo uma vez que isso seja feito e movido para a máquina, deixando-me muito desviado quando pode haver uma solução mais direta para começar
Respostas:
Por design, a
user
construção do Android (isso é o que você tem em seu telefone até desbloquear o bootloader e atualizar o telefone comuserdebug
oueng
software) restringe o acesso ao armazenamento interno - cada aplicativo pode acessar apenas seus próprios arquivos. Felizmente para os desenvolvedores de software que não desejam fazer o root em seus telefones, o Google oferece uma maneira de acessar o armazenamento interno de versões depuráveis de seus pacotes usandorun-as
comando.Para fazer o download
/data/data/debuggable.app.package.name/databases/file
de um dispositivo Android 5.1+, execute o seguinte comando:Para baixar vários arquivos em uma pasta
/data/data/debuggable.app.package.name/
no de uma vez - usetar
:fonte
run-as
para copiar o arquivo para um local no armazenamento externo e extrair o arquivo de banco de dados de lá, em vez de mexer nas permissões do arquivo.A resposta aceita não funciona mais para mim (bloqueado pelo Android?)
Então, em vez disso, fiz isso:
fonte
su
para fazer orun-as
comando funcionar.Se alguém estiver procurando puxar banco de dados do aplicativo de depuração, pode usar o procedimento abaixo:
fonte
Publiquei um script de shell simples para despejar bancos de dados:
Ele executa dois métodos distintos descritos aqui:
\r
caracteres que alguns dispositivos geram no shell.A partir daqui, você pode usar uma variedade de aplicativos CLI ou GUI SQLite, como
sqlite3
ousqlitebrowser
, para navegar pelo conteúdo do banco de dados.fonte
Não consegui que mais nada funcionasse para mim, exceto isso:
A primeira saída é sair do run-as, a segunda saída é sair do shell adb para fazer o pull.
fonte
Para a versão de depuração do aplicativo, é muito conveniente usar o comando
adb exec-out run-as xxx.yyy.zzz cat somefile > somefile
para extrair um único arquivo. Mas você tem que fazer várias vezes para vários arquivos. Aqui está um script simples que uso para extrair o diretório.Espero que seja útil. Este script também está disponível em gist .
O uso típico é
em seguida, ele extrairá todos os arquivos do diretório de bancos de dados do seu aplicativo, ou seja
/data/data/com.example.myapplication/databases
, para o diretório atual.fonte
Abordagem muito mais simples para baixar o arquivo em seu computador local:
No shell do seu PC, execute:
fonte
Você pode usar este script para obter o banco de dados Realm.
fonte
Se alguém está procurando uma outra resposta que pode ser usado para recuperar
Database
, bem comoShared Preferences
, em seguida, siga esta etapa:No
build.gradle
arquivo do seu aplicativo adicione a linhaagora, quando você executar seu aplicativo no
non-release
modo, então seu aplicativo abrirá automaticamente a porta 8080 do seu dispositivo,IP address
certifique-se de que seu dispositivo está conectado viawifi
elaptop
está compartilhando a mesma rede. Agora basta visitar o urlpara ver todos os dados do banco de dados junto com as preferências compartilhadas.
fonte
Esta é uma solução que funciona em um dispositivo com Android 5.1. O exemplo a seguir é para Windows.
Voce precisa sed (ou sed.exe no Windows, por exemplo, do cygwin.) (No Unix, ele estará lá;)). Para remover caracteres '\ r' ruins, pelo menos no Windows.
Agora basta executar o seguinte comando:
O comando sed remove os caracteres / r finais.
Obviamente, você deve substituir "com.yourcompany.yourapp" pelo nome do pacote do aplicativo e "YourDatabaseName" pelo nome do banco de dados no aplicativo.
fonte
O arquivo de banco de dados fica vazio ao usar
adb run-as
. Isso pode ser resolvido chamando close () na instância RoomDatabase. Chame close () para permitir que o SQLite grave seu diário no disco. Criei este botão que fecha a conexão do banco de dados a pedido:via GIPHY
Aqui está como chamar close na instância RoomDatabase.
fonte