web-dev-qa-db-fra.com

Android: Comprendre le processus d'installation de l'APK

J'essaie de comprendre le processus d'installation d'un apk sur Android, en particulier l'émulateur SDK Android via l'installation d'Adb (où je teste).

Lors de la recherche, je n'ai trouvé aucune réponse satisfaisante en dehors de "l'apk est simplement copié dans/data/app et est installé lorsque vous l'exécutez. Cela ne me satisfait pas car cela n'explique pas comment l'icône de l'apk apparaît dans le menu entre autres problèmes.

Venant d'un arrière-plan Windows, exécuter un .exe ou un programme d'installation pour installer un programme modifie les registres, les fichiers, les services, etc. J'ai besoin de comprendre si cela ou quelque chose de similaire se produit lorsqu'une apk est installée sur Android.

Donc, si quelqu'un peut m'expliquer ce qui se passe spécifiquement lorsqu'une apk est installée sur Android je l'apprécierais grandement.

Je voudrais également savoir si Dalvik VM "zygote" est impliqué dans l'installation ou se produit-il au niveau du noyau Linux inférieur?

Mon but ultime ici est d'utiliser strace pour caputer le processus d'installation d'un apk pour documenter les modifications du système, les créations de fichiers, l'activité du réseau et d'autres événements d'intérêt.

45
user1631295

Il existe principalement deux catégories d'applications Android.

  1. Applications système: installées lorsque le système est initialisé
  2. Applications utilisateur: installées à partir de Play Store, en utilisant ADB ou en copiant le fichier .apk sur la carte SD.

Voici le processus d'installation étape par étape.

  1. AndroidManifest.xml est analysé, les informations sont extraites et stockées dans /data/system/packages.xml et /data/system/packages.list
  2. Le fichier .apk est copié dans un répertoire spécifique et un répertoire de stockage des données est créé pour cette application

L'analyse XML, l'analyse des ressources et la copie de fichiers .apk sont effectuées par

PackageManageService.Java

cependant, la création du répertoire est effectuée par

installd.c

PackageManageService.Java communique avec installd.c via un socket local, situé dans/dev/socket/installed

Le package dans lequel le fichier .apk a été copié est différent pour les applications système et les applications utilisateur. pour les applications système, il est

/ system/app /

Où, comme pour l'application utilisateur, le fichier .apk copié dans le fichier .apk est copié dans

/ data/app

Le fichier .dex, qui est extrait du fichier .apk, est copié dans/data/dalvik-cache /.

Le gestionnaire de packages crée un répertoire de données/data/data // pour stocker la base de données, les préférences partagées, la bibliothèque native et les données de cache

25
sappu

Tout ce que vous voulez savoir, je pense, se trouve dans le Android http://developer.Android.com/tools/building/index.html et pour comprendre l'empaquetage de l'application elle-même, voici mieux l'image (ce n'est pas le processus d'installation de l'APK, mais cela peut vous aider à comprendre la structure et l'instalation apk). dex est la sous-construction de votre application - contient le Java et les classes compilées. Un fichier dex contient plusieurs classes par opposition à Java fichier de classe qui ne contient que celui-là) fichier .x dex est Java bytecode converti avec l'outil DX qui fait partie intégrante de Android SDK. En conséquence, il permet à chaque application de s'exécuter comme son propre processus avec sa propre instance de la machine virtuelle Dalvik. apk

10
pandabear

Cela se fait à deux niveaux 1.) PackageInstaller (UI) utilisant la commande d'envoi de PackageManagerService (service système) à la 2ème partie (Installd) 2.) Installd est un démon qui installe réellement l'apk. Installd et PackageManagerService communiquent en utilisant la communication par socket. Le socket utilisé est installé lui-même. Vous pouvez vous référer à init.rc pour la création de socket sur init.

0
Yogesh Sharma