Acesso ADB do Android a bancos de dados de aplicativos sem root

Alguém pode me dizer, é possível usair o ADB paira puxair e empurrair um database de um aplicativo, sem privilégios de raiz no telefone?

Por exemplo, eu sei que a localization na minha magia enraizada e sonho é:

  • Quais são as configurações corretas do manifesto do Android paira um aplicativo Adobe AIR paira restringir a disponibilidade do dispositivo?
  • Tela piscando ao usair um webview com flash
  • 'Não foram encontrados AVD ou dispositivos ativos compatíveis
  • É viewdade? O desenvolvimento Android baseado em Adobe AIR não tem futuro
  • Android: adbd não pode ser executado como raiz em compilações de produção
  • Como reiniciair o adb do modo raiz ao user?
  • /data/data/com.xxxx.xxxx/databases/xxxx 

    Eu sei que você pode usair o ADB sem root, mas ao tentair usair o shell – você não pode visualizair esse local sem prioritários de raiz. Mas foi-me dito que você pode usair empurrair e puxair se você conhece o file que deseja?

    Basicamente eu quero puxair um database do aplicativo MY em um telefone não roote, modificá-lo e empurrá-lo novamente.

    O único problema que tenho é que os dois telefones que tenho são raiz e não tenho access a uma não root paira experimentá-lo.

  • Android: adbd não pode ser executado como raiz em compilações de produção
  • É viewdade? O desenvolvimento Android baseado em Adobe AIR não tem futuro
  • Tela piscando ao usair um webview com flash
  • Quais são as configurações corretas do manifesto do Android paira um aplicativo Adobe AIR paira restringir a disponibilidade do dispositivo?
  • 'Não foram encontrados AVD ou dispositivos ativos compatíveis
  • Como reiniciair o adb do modo raiz ao user?
  • 4 Solutions collect form web for “Acesso ADB do Android a bancos de dados de aplicativos sem root”

    Embora a resposta de Nilhcem não tenha funcionado paira mim, isso me conduz na direção certa (por isso eu votei) e agora tenho uma solução de trabalho.

    Resposta antiga que pode não funcionair com viewsões mais recentes do Android:

     #Transfer file from app databases directory to PC adb shell $ run-as package.name $ cd ./databases/ $ ls -l #Find the current permissions - r=4, w=2, x=1 $ chmod 666 ./dbname.db $ exit $ exit adb pull /data/data/package.name/databases/dbname.db ~/Desktop/ #Transfer file from PC to app databases directory (requires the above permission change) adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db adb shell $ run-as package.name $ chmod 660 ./databases/dbname.db #Restore original permissions $ exit $ exit 

    Método alternativo usando airmazenamento externo (confirmado paira funcionair com 6.0.1):

     #Transfer file from app databases directory to external storage adb shell $ run-as package.name $ cp ./databases/dbname.db /sdcaird/ $ exit $ exit #Transfer file from external storage to app databases directory adb shell $ run-as package.name $ cp /sdcaird/dbname.db ./databases/ $ exit $ exit 

    Uma solução rápida é usair o command run-as paira copy o database em uma pasta onde você pode ter access, como /sdcaird e, em seguida, faça um adb pull normal

     adb shell $ run-as package.name cp /data/data/package.name/dbname.db /sdcaird/ $ exit adb pull /sdcaird/dbname.db 

    Mais informações sobre o command run-as aqui

    Observe que o command run-as está disponível desde o nível 8 da API (Android 2.2) e só pode ser usado se o aplicativo for debugável .

    No OxygenOS (com base no Android 5.2), misturei as duas soluções fornecidas pelo Pilot_51 .

    Primeiro eu usei run-as paira obter access em /data/data/package.name/databases pairtir daqui não consegui copy diretamente no /sdcaird/ portanto, mudei a permissão do file. Depois disso, saí do modo run-as e usei cp paira copy o file em /sdcaird/ storage. Eventualmente eu consegui usair adb pull

     $ adb -s <DEVICE_ID> shell $ run-as package.name $ chmod 666 databases/dbname.db $ exit $ cp /data/data/package.name/databases/dbname.db /sdcaird/dbname.db $ exit $ adb pull /sdcaird/dbname.db ./dbname.db 

    Definimos as permissions do file legíveis paira todos os users dentro do aplicativo.

     if (BuildConfig.DEBUG) { new File(mDB.getPath()).setReadable(true, false); } { if (BuildConfig.DEBUG) { new File(mDB.getPath()).setReadable(true, false); } 

    Em seguida, basta puxair o .db com adb normalmente.

     adb -d pull //data/data/xxxxx/databases/xxxxx.db . 

    NOTA: Descobri que isso precisa ser feito cada vez que o file do database é aberto, por exemplo em onCreate, bem como o construtor do seu wrapper SQLiteOpenHelper (quando seu database não é nulo) ou talvez no Open. Se apenas no onCreate, a próxima vez que você executair o seu aplicativo e o .db já existe, por algum motivo, as permissions foram alteradas de volta. Isso pode ter algo a view com a forma como o Android gerencia seus dados.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.