Android ADB l'accès aux bases de données d'application sans racine
Quelqu'un peut me dire, est-il possible d'utiliser la BAD pour tirer et pousser une base de données à partir d'une application, sans les privilèges root sur le téléphone?
Par exemple, je sais que l'emplacement sur mon enraciné la magie et le rêve est:
/data/data/com.xxxx.xxxx/databases/xxxx
Je sais que vous pouvez utiliser ADB sans racine, mais lorsque j'essaie d'utiliser le shell - vous ne pouvez pas voir que l'emplacement, sans racine privaliges. Mais j'ai été dit, vous pouvez utiliser le pousser et le tirer si vous connaissez le fichier que vous voulez?
Fondamentalement, je veux tirer une base de données à partir de MON appli sur un autre téléphone enracinée de le modifier et de le pousser à revenir sur.
Seul problème que j'ai est, les deux téléphones que j'ai sont à la fois racine et je n'ai pas accès à un non racine de l'essayer.
- envisagez de changer votre accepter de Pilot_51 de réponse.
- stackoverflow.com/a/18472135/1778421
Vous devez vous connecter pour publier un commentaire.
Tout Nilhcem la réponse n'a pas fonctionné pour moi, il me conduire dans la bonne direction (pour que je upvoted) et j'ai maintenant une solution de travail.
Vieille réponse qui peut ne pas fonctionner avec des versions plus récentes d'Android:
Autre méthode utilisant de stockage externe (confirmée à travailler avec 6.0.1):
chmod 666
appliquée,adb pull
dit que l'objet distant n'existe pas. Semble que vous avez encore besoin d'un peu plus d'autorisations pour ce faire?run-as
que m'accorde l'accès en lecture au fichier?Une première solution rapide est l'utilisation de la
run-as
commande pour copier la base de données dans un dossier où vous pouvez avoir accès, comme/sdcard
et puis, faire une activité normaleadb pull
Plus d'informations sur l'exécution de commande ici
Noter que le
run-as
commande est disponible depuis l'API de niveau 8 (Android 2.2) et ne peut être utilisée que si la demande est debbugable.cp
de /sdcard lors de l'utilisation derun-as
. J'ai besoin d'utiliser lachmod
solution de @Pilot_51Sur
OxygenOS
(basé sur Android 5.2), j'ai mélangé les deux solutions fournies parPilot_51
.Première fois que j'ai utilisé
run-as
pour accéder à/data/data/package.name/databases
à partir d'ici je n'étais pas en mesure de copier directement sur/sdcard/
donc j'ai changé les droits du fichier. Après que j'ai quittérun-as
mode et utilisécp
pour copier le fichier dans/sdcard/
de stockage. Finalement, j'ai été en mesure d'utiliseradb pull
Nous avons défini les autorisations de fichier lisible pour tous les utilisateurs de l'app.
Ensuite il suffit de tirer le .db off bad normalement.
REMARQUE: j'ai découvert que ce qui doit être fait chaque fois que le fichier de base de données est ouverte, par exemple dans onCreate ainsi que le constructeur de votre SQLiteOpenHelper wrapper (si votre base de données n'est pas nulle) ou peut-être onOpen. Si seulement dans onCreate, alors la prochaine fois que vous exécutez votre application et la .db existe déjà, pour une raison quelconque, les autorisations ont été modifiées. Cela pourrait avoir quelque chose à voir avec la façon dont Android gère ses données.
si vous voulez pousser le fichier db dans l'application
tout d'abord, la place de fichiers".db" dans "/storage/emulated/0/" en raison de problème d'autorisation. alors vous devriez faire semblant que l'application à accéder aux données du dossier.
il copie le fichier.db dans le dossier principal de bases de données.