Je me suis connecté à mon périphérique en direct à l'aide de l'adb et des commandes suivantes:
C:\>adb -s HT829GZ52000 Shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied
J'ai été surpris de voir que j'ai un accès refusé. Pourquoi je ne peux pas parcourir les répertoires en utilisant la ligne de commande comme ceci?
Comment obtenir un accès root sur mon téléphone?
Si vous souhaitez tout parcourir sur votre appareil, vous devez vous rappeler deux choses.
adb root
À partir de l’API niveau 8 (Android 2.2), pour l’application débogable (celle construite par Android Studio toutes les fois sauf si la version de construction a été demandée), vous pouvez utiliser la commande Shell run-as
pour lancez une commande ou un exécutable en tant qu’utilisateur/application spécifique ou passez simplement au UID de votre application pour pouvoir accéder à ses données répertoire.
Liste le contenu du répertoire de votre application:
run-as com.yourapp ls -l /data/data/com.yourapp
Basculez vers l'UID de com.yourapp et exécutez toutes les commandes ultérieures à l'aide de cet uid (jusqu'à ce que vous appeliez exit
):
run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit
Remarque 1 : il existe un problème conn avec certains téléphones HTC Desire. En raison d'un propriétaire/autorisations non standard du répertoire /data/data
, la commande run-as
ne s'exécute pas sur ces téléphones.
Note 2 : Comme indiqué dans les commentaires de @Avio: run-as
a également des problèmes avec les téléphones Samsung Galaxy S exécutant CyanogenMod, quelle que soit leur version (à partir de 7 à 10.1) car sur cette plate-forme, /data/data
est un lien symbolique vers /datadata
. Un moyen de résoudre le problème consiste à remplacer le lien symbolique par le répertoire réel (malheureusement, cela nécessite généralement un accès root).
avant de commencer, avez-vous un téléphone enraciné ? sinon, je suggère fortement qu'il soit temps de faire le saut. 99% des tutoriels qui vous aident à faire cela nécessitent que vous ayez un téléphone enraciné (je sais, car j'ai passé environ une heure à chercher un moyen de le faire sans avoir un téléphone enraciné. Je n'en ai trouvé aucun. ) également si vous y réfléchissez, votre iPhone doit également être enraciné pour effectuer la même tâche. Donc c'est totalement raisonnable. En savoir plus sur l'enracinement à la fin de la réponse.
à partir de votre ligne de commande, tapez:
adb Shell
ceci vous amène à votre Android ligne de commande Shell (vous devriez voir quelque chose comme ceci: Shell@Android:/ $
maintenant, tapez:
Shell@Android:/ $run-as com.domain.yourapp
ceci devrait vous mener directement au répertoire de données de com.domain.yourapp
:
Shell@Android:/data/data/com.domain.yourapp $
si ce n'est pas le cas (c'est-à-dire si vous obtenez une erreur), vous n'avez probablement pas de téléphone rooté, ou vous n'avez pas utilisé vos privilèges d'utilisateur root. Pour utiliser vos privilèges d’utilisateur root, tapez su
sur la ligne de commande adb et voyez ce qui se passe. Si vous obtenez une erreur, votre téléphone n’est pas enraciné. Si ce n'est pas le cas, lancez-le d'abord puis poursuivez ces instructions.
à partir de là, vous pouvez taper ls
et vous verrez tous les répertoires, y compris les dbs:
Shell@Android:/data/data/com.domain.yourapp $ ls
cache
databases
lib
shared_prefs
après cela, vous pouvez utiliser sqlite3 pour parcourir la base de données .. si vous ne l’avez pas installé (vous pouvez le trouver en tapant sqlite3
, si vous obtenez command not found
, vous devrez l’installer ensuite. . Pour installer sqlite, suivez les instructions ici .
sur l'enracinement: Si vous n'avez jamais installé votre téléphone auparavant et que vous craignez de le visser, je peux vous dire en toute confiance qu'il n'y a rien à craindre. il existe des tonnes de didacticiels d’enracinement rapide et facile pour pratiquement tous les modèles, anciens et nouveaux, et vous pouvez rooter votre téléphone même si vous avez un mac (j'ai enraciné mon s3 avec mon mac).
$ adb Shell
$ cd/data
$ ls
opendir a échoué, autorisation refusée
Vous devriez faire ceci:
$ adb Shell
$ cd /data
Shell@Android:/data $ run-as com.your.package
Shell@Android:/data/data/com.your.package $ ls
D'ACCORD!
J'ai eu un problème similaire lorsque j'essayais de faire fonctionner un Samsung Galaxy S enraciné. Émission d'une commande à partir de l'ordinateur Shell
> adb root
échoue avec le message "ne peut pas être exécuté en tant que root dans les versions de production". Voici une méthode simple qui permet de devenir root.
Au lieu de la précédente, lancez les deux commandes suivantes l'une après l'autre
> adb Shell
$ su
Après la première commande, si l’invite est passée de '>' à '$' comme indiqué ci-dessus, cela signifie que vous avez entré l’environnement Shell adb. Si, par la suite, l'invite a changé en '#' après avoir émis la deuxième commande, cela signifie que vous êtes maintenant root. Maintenant, en tant que root, vous pouvez faire tout ce que vous voulez avec votre appareil.
Pour revenir au shell "sécurisé", lancez
# exit
Vous verrez que l'invite '$' réapparaît, ce qui signifie que vous êtes dans le shell adb en tant qu'utilisateur et non en tant que root.
J'ai eu beaucoup de problèmes avec cela aussi. Je ne comprends toujours pas bien les permissions et la racine, mais cela a fonctionné pour moi (une des réponses précédentes en partie) pour copier le fichier de base de données à partir de/data/data/[nom du paquet] /databases/my_db.db. Fonctionnement Shell root, ou su dans Shell pour une raison quelconque ne fonctionnait pas, ni la copie du fichier db (je pouvais naviguer dans le répertoire), ni sqlite3.
Donc, cela a fonctionné! Dans l'invite de commande DOS:
C:\Program Files\Android\android-sdk\platform-tools>adb Shell
1|Shell@Android:/ $ run-as de.vogella.Android.locationapi.maps
run-as de.vogella.Android.locationapi.maps
1|Shell@Android:/data/data/de.vogella.Android.locationapi.maps $ cd /data
cd /data
Shell@Android:/data $ cd data
cd data
Shell@Android:/data/data $ cd de.vogella.Android.locationapi.maps
cd de.vogella.Android.locationapi.maps
Shell@Android:/data/data/de.vogella.Android.locationapi.maps $ cd databases
cd databases
Shell@Android:/data/data/de.vogella.Android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
Shell@Android:/data/data/de.vogella.Android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
bus_timetable_lines.db > /sdcard/db_copy.db <
Shell@Android:/data/data/de.vogella.Android.locationapi.maps/databases $exit ^
exit
Shell@Android:/ $ exit
exit
C:\Program Files\Android\android-sdk\platform-tools>
Allez maintenant dans le répertoire SDCARD et récupérez votre fichier db_copy.db. Même cela était caché, mais j'ai réussi à l'envoyer par courrier électronique. De retour dans Windows, j'ai pu ouvrir le fichier db avec SQLite Database Browser. :)
Voici les deux étapes pour obtenir un accès root:
les versions de production ne peuvent pas entrer/data/app
drwxrwx--- system cache 1970-01-01 08:00 cache
drwxrwxr-x root system 1970-01-01 08:00 mnt
drwxrwx--x system system 1970-01-01 08:15 data
peut avoir besoin de changer de propriétaire pour le faire fonctionner.
Le problème pourrait être que nous devions donner spécifiquement un accès root à adb dans les options de développement des derniers MC. Voici ce que j’ai fait.
abc @ abc-L655: ~ $ Sudo adb kill-server
abc @ abc-L655: Le démon ~ $ Sudo adb root start-server * n'est pas en cours d'exécution. en le démarrant maintenant sur le port 5037 * * le démon a été lancé avec succès * l'accès root est désactivé par les paramètres système - activé dans les paramètres -> options de développement
après avoir modifié les options de développement ...
abc@abc-L655:~$ Sudo adb kill-server
abc@abc-L655:~$ Sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb Shell
root@Android:/ # ls /data/ .... good to go..
si vous connaissez le package d'application, vous pouvez cd
directement dans ce dossier.
par exemple cd data/data/com.yourapp
cela vous déposera dans un répertoire qui est read/writable
afin que vous puissiez modifier les fichiers si nécessaire. Comme le dossier est le même sur le emulator
, vous pouvez l’utiliser pour obtenir le chemin du dossier.
Si vous voulez juste voir votre base de données et vos tables , alors la façon la plus simple est d'utiliser Stetho
. Outil plutôt cool pour chaque développeur Android qui utilise SQLite
buit par Facobook developed
.
Steps to use the tool
'compiler' com.facebook.stetho: stetho: 1.4.2 '
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); }
Maintenant, construisez votre application et lorsque l'application est en cours d'exécution, vous pouvez parcourir votre base de données d'applications en ouvrant chrome dans l'URL:
chrome://inspect/#devices
Les images de la même chose sont comme ci-dessous_
ChromeInspact
Votre DB
J'espère que cela aidera à tous! :)