Android: comprendre le processus D'installation D'APK

j'essaie de comprendre le processus d'installation d'un apk sur Android, en particulier L'émulateur SDK Android via l'installation adb (où je suis en train de tester).

en cherchant, je n'ai trouvé aucune réponse satisfaisante en dehors de " l'apk est simplement copié sur /data / app et est installé lorsque vous l'exécutez. Ce n'est pas satisfaisant pour moi, car cela n'explique pas comment l'icône de l'apk apparaît sur le menu entre autres questions.

venant d'un fond Windows, exécutant un .EXE ou installer pour installer un programme modifie les registres, les fichiers, les services, etc.... Je dois comprendre si ceci ou quelque chose de similaire se produit quand un apk est installé sur Android.

donc si quelqu'un peut m'expliquer ce qui se passe spécifiquement quand un apk est installé sur Android je l'apprécierais grandement.

sur une note de côté je voudrais aussi savoir si le Dalvik VM "zygote" est impliqué dans l'installation ou à la baisse du noyau linux?

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.

39
demandé sur lifetimes 2012-09-16 02:30:52

3 réponses

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 .fichier apk sur la carte SD.

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

  1. AndroidManifest.xml est analysé, l'information est extraite et stockée dans /data/system/packages.xml et/data/system / packages.liste
  2. .fichier apk est copié dans un répertoire spécifique et un répertoire pour le stockage des données est créé pour cette application

analyse XML, analyse des ressources, et .les copies de fichiers apk sont faites par

PackageManageService.java

cependant, la création du répertoire est faite par

installd.c

PackageManageService.java communique avec installd.c via une prise locale, située à /dev/socket/installé

emballer où .le fichier apk copié est différent pour les applications système et les applications utilisateur. pour le système, les applications, c'est

/ system / app/

Où, comme pour l'utilisateur de l'app .apk fichier copié .le fichier apk est copié sur

/data / app

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

le Gestionnaire de paquets crée le répertoire de DONNÉES / DONNÉES / DONNÉES// pour stocker la base de données, la préférence partagée, la bibliothèque native et les données de cache

20
répondu sappu 2017-08-07 12:59:34

Everything that you want to know, I think, is in the Android develeper website http://developer.android.com/tools/building/index.html et pour comprendre l'empaquetage de l'application elle-même, voici l'image la meilleure (ce n'est pas le processus D'installation D'APK, mais il peut vous aider à comprendre la structure et l'installation d'apk). Vous pouvez également google à propos de l'outil aapt et .dex doit comprendre plus parce que les cours.dex est la substruction de votre application contient le java et les classes compiler. Un fichier dex contient plusieurs classes par opposition au fichier java class qui ne contient qu'une seule classe. le fichier dex est java bytecode converti avec l'outil DX qui fait partie intégrante du SDK Android. En conséquence, il permet à chaque application de fonctionner comme son propre processus avec sa propre instance de la machine virtuelle Dalvik. apk

10
répondu pandabear 2018-09-06 08:47:03

C'est fait à deux niveaux 1.) PackageInstaller(UI) en utilisant PackageManagerService(Système de service) envoi de la commande à la 2e partie(Installd) 2.) Installd est un démon qui installe l'apk. Installd et PackageManagerService communiquent en utilisant la communication socket . La Socket utilisée est installée elle-même. Vous pouvez vous référer à init.rc Pour la création de socket à init.

0
répondu Yogesh Sharma 2016-06-23 11:35:25