Tentar puxar um único arquivo usando
adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
falha com
failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied
apesar de que a depuração USB está habilitada no dispositivo.
Podemos contornar o problema pela rota arcaica
adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt
mas isso é complicado para mais de um arquivo.
Como posso obter o diretório /data/data/com.corp.appName/files para meu MacBook?
Fazer isso diretamente ou por meio de um trânsito em `/ storage / sdcard0 / myDir (de onde posso continuar com a transferência de arquivos do Android) está bem.
Comentário adicional
Pode ser que apenas correndo
adb backup -f myFiles com.corp.appName
irá gerar os arquivos que procuro. Nesse caso, estou procurando uma maneira de descompactar / descompactar o backup resultante!
Respostas:
O backup do adb gravará um arquivo específico do Android:
Este arquivo pode ser convertido para o formato tar usando:
Referência:
http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html
Procure por "Atualizar" nesse link.
Como alternativa, use o extrator de backup do Android para extrair arquivos do arquivo de backup do Android (
.ab
).fonte
bs=24 skip=1
é muito mais rápido do quebs=1 skip=24
(no meu sistema, 38,6 MB / s vs 1,7 MB / s) :)dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
(da fonte acima)dd
comando no meu MacBook no trabalho. Em vez disso, eu usojava -jar ./abe.jar unpack data.ab data.tar
. Você pode baixar o utilitário abe em sourceforge.net/projects/adbextractor/files/?source=navbarandroid:allowBackup="false"
dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
Eu tive o mesmo problema, mas resolvi executando o seguinte:
Depois disso, você pode executar
fonte
Aqui está o que funcionou para mim:
Estou imprimindo o banco de dados diretamente no arquivo local.
fonte
adb shell
------ dentro do shell runrun-as com.example.test
------ dentro do shell runcat ...db > /mnt/sdcard/file.db
------adb pull /mnt/sdcard/file.db .
------ end (desculpe, as quebras de linha não estão funcionando)adb shell
não funcionou para mim, mas seguir esta resposta e usá-adb exec-out
la funcionou!No MacOSX, combinando as respostas de Calaf e Ollie Ford, o seguinte funcionou para mim.
Na linha de comando (certifique-se de que adb está em seu caminho, o meu estava em ~ / Library / Android / sdk / platform-tools / adb) e com seu dispositivo Android conectado e no modo de depuração USB, execute:
Seu dispositivo Android irá pedir permissão para fazer backup de seus dados. Selecione "BACKUP MEUS DADOS"
Espere um pouco.
O backup do arquivo aparecerá no diretório onde você executou o adb.
Agora execute:
Agora você tem um arquivo backup.tar que pode descompactar assim:
E veja todos os arquivos armazenados pelo seu aplicativo.
fonte
adb backup
e dedd
tar não fornecem nenhum status durante o trabalho e podem levar minutos se você tiver muitos dados. Seja paciente!As versões mais recentes do Android Studio incluem o Device File Explorer, que descobri ser um método GUI útil para baixar arquivos do meu Nexus 7 de desenvolvimento.
Você deve se certificar de que ativou a depuração USB no dispositivo
Interaja com o conteúdo do dispositivo na janela do explorador de arquivos. Clique com o botão direito em um arquivo ou diretório para criar um novo arquivo ou diretório, salve o arquivo ou diretório selecionado em sua máquina, carregue, exclua ou sincronize. Clique duas vezes em um arquivo para abri-lo no Android Studio.
O Android Studio salva os arquivos abertos dessa forma em um diretório temporário fora do seu projeto. Se você fizer modificações em um arquivo que abriu usando o Device File Explorer e gostaria de salvar suas alterações de volta no dispositivo, deverá carregar manualmente a versão modificada do arquivo para o dispositivo.
Documentação Completa
fonte
Você pode usar este script de shell abaixo. Ele também pode extrair arquivos do cache do aplicativo, ao contrário da
adb backup
ferramenta:Então você pode usá-lo assim:
fonte
rm /sdcard/
substitui, por sorte não é-rf
.Se você estiver usando uma máquina Mac e um telefone Samsung, isso é o que você deve fazer (já
run-as
que não funciona no Samsung ezlib
não funciona no Mac)Faça um backup do diretório de dados do seu aplicativo
adb backup -f /Users/username/Desktop/data.ab com.example
Será solicitada uma senha para criptografar em seu telefone, não digite nenhuma. Basta tocar em "Fazer backup dos meus dados". Veja como fazer o BackUp?
Depois de fazer o backup com sucesso, você verá o
data.ab
arquivo na sua área de trabalho. Agora precisamos converter isso para otar
formato.Use o Android Backup Extractor para isso. Baixar | Código fonte
Baixe e você verá o
abe.jar
arquivo. Adicione isso à sua variável PATH.Execute para gerar o arquivo tar :
java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar
Extraia o arquivo data.tar para acessar todos os arquivos
fonte
data.tar
apenasdata.tar.cpgz
extrações para um @henryEsta resposta é baseada na minha experiência com outras respostas e comentários nas respostas. Minha esperança é poder ajudar alguém em uma situação semelhante.
Estou fazendo isso no OSX via terminal.
Anteriormente, a resposta de Vinicius Avellar funcionou muito bem para mim. Na maioria das vezes, eu só precisava do banco de dados do dispositivo de um aplicativo de depuração.
Hoje tive um caso de uso em que precisava de vários arquivos privados . Acabei com duas soluções que funcionaram bem para este caso.
Aqui está meu script para extrair vários arquivos privados que irei compartilhar com você, o leitor, que também está investigando esta questão incrível;):
Síntese: https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4
De volta ao método 1 , descriptografando um backup usando o Android Backup Extractor
Aqui estão as etapas que executei no meu Mac e os problemas que encontrei:
Primeiro coloquei um backup na fila (e defini uma senha para criptografar meu backup, meu dispositivo exigiu):
Em segundo lugar, baixei apenas abe.jar daqui: https://sourceforge.net/projects/adbextractor/files/abe.jar/download
Em seguida, corri:
Neste ponto, recebi uma mensagem de erro. Como meu arquivo está criptografado, java me deu um erro de que eu precisava para instalar algumas bibliotecas de políticas de segurança.
Por último, acabei de executar ( depois de executar o comando anterior novamente )
Agora é importante notar que se você pode apenas correr como e gato, é muito mais rápido. Primeiro, você obtém apenas os arquivos que deseja e não o aplicativo inteiro. Dois, quanto mais arquivos (+ criptografia para mim), a transferência fica mais lenta. Portanto, saber fazer dessa maneira é importante se você não tiver o run-as no OSX, mas o script deve ser primeiro ir para um aplicativo de depuração.
Lembre-se de que escrevi hoje e testei algumas vezes, portanto, avise-me sobre quaisquer bugs!
fonte
Depois de definir as permissões corretas, adicionando o seguinte código:
adb pull
funciona como desejado.veja File.setReadable ()
fonte
A partir do script Dave Thomas, fui capaz de escrever minha própria solução para superar 2 problemas:
Este é o meu script, que copia os dados do app para o sdcard e depois puxa
fonte
Semelhante à resposta de Tamas , aqui está um one-liner para Mac OS X para buscar todos os arquivos para o aplicativo
your.app.id
do seu dispositivo e salvá-los (neste caso)~/Desktop/your.app.id
:-d
para puxar do emuladorfonte
Backup de dados do jogo com apk . Nougat Oneplus 2.
fonte
adb backup -f myapp.ab -apk com.myapp # backup on one device
adb restore myapp.ab # restore to the same or any other device
Sim, exatamente. Estranhamente, você também precisa que o arquivo tenha o
x
conjunto de bits. (pelo menos no Android 2.3)chmod 755
todo o caminho trabalhou para copiar um arquivo (mas você deve reverter as permissões depois, se você planeja continuar usando o dispositivo).fonte
você pode fazer:
fonte