Je vais me répéter depuis une autre réponse :
À partir du niveau 8 de l'API (Android 2.2), si vous construisez l'application comme débuggeable, vous pouvez utiliser le shell run-as
pour exécuter une commande ou un exécutable en tant qu'utilisateur/application spécifique ou simplement passer à la commande UID
de votre application afin de pouvoir accéder à son répertoire de données.
Ainsi, si vous souhaitez extraire la base de données de votre application du périphérique, vous devez exécuter la version de débogage de l'application, vous connecter à l'aide de la commande adb shell
et exécutez la commande suivante :
run-as com.yourpackage sh -c "cat ~/databases/db-file" > /sdcard/db-file.sqlite
Cela copiera votre db-file
à la racine de votre carte SD / stockage externe. Maintenant, vous pouvez facilement l'obtenir à partir de là en utilisant le gestionnaire de fichiers, adb pull
ou tout ce que vous voulez. Notez qu'avec cette approche, il n'est PAS nécessaire que votre application dispose de WRITE_EXTERNAL_STORAGE
car la copie est effectuée par l'utilisateur du shell qui peut toujours écrire sur le stockage externe.
Sur les systèmes Linux/Mac il y a une possibilité de copier une base de données directement sur votre ordinateur avec la commande suivante que l'on peut utiliser sans entrer dans le shell adb :
adb shell 'run-as com.yourpackage sh -c "cat ~/databases/db-file"' > db-file.sqlite
Toutefois, cela ne fonctionnera pas correctement sous Windows en raison de la conversion des symboles CR/LF. Utilisez l'ancienne méthode dans ce cas.