Renaud Mathieu

Some random thoughts about development.

Android PackageManager et PackageInstaller

28 May, 2015

Comme nous installons et désinstallons des applications APK chaque jour, il peut être intéressant de se poser les questions suivantes :

  • Quels sont les rôles de PackageManager et PackageInstaller ?
  • Où sont stockés les APK dans un système Android ?
  • Quel est le processus d’installation d’APK dans Android ?
  • Comment le PackageManager sauvegarde-t-il ses données ?

Quels sont les rôles de PackageManager et PackageInstaller ?

PackageInstaller est l’application par défaut dans Android pour installer un package de manière interactive. Une simple activité dans PackageInstaller va demander au service PackageManager d’installer le package via installd .

PackageManager est une API qui gère l’installation, la désinstallation et la mise à jour d’application dans le système Android. Lorsqu’on installe un APK, le PackageManager va parcourir l’APK et afficher des messages de confirmation d’installation. Le service tourne dans le processus system_service et est démarré au boot.

Où sont stockés les APK dans un système Android ?

Les applications pré-installées se trouvent dans /system/app. Les applications provenant d’une installation par l’utilisateur sont stockées dans /data/app. Le PackageManager créé un répertoire de données dans /data/data/<nom_du_package> pour stocker les bases de données, les SharedPreferences, les libraries natives et les données de cache.

Quel est le processus d’installation d’APK dans Android ?

  • Ajouter un package dans la file du process d’installation
  • Déterminer le chemin d’installation de l’application
  • Vérifier s’il s’agit d’une installation ou d’une mise à jour
  • Copier l’application dans le répertoire
  • Récupérer l’UID de l’application
  • Envoyer une réquête d’installation au démon installd
  • Créer le répertoire de l’application et donner les permissions adéquates
  • Extraire le code dex et le placer dans le répertoire du cache
  • Mettre à jour package.list et package.xml
  • Envoyer un broadcast de notifications

Comment le PackageManager sauvegarde ses données ?

Le PackageManager stocke les informations des applications dans 3 fichiers situées dans /data/system :

  • packages.xml contient la liste des packages et des permissions
  • packages.list version simplifiée du fichier packages.xml contenant le nom du package, l’user id, les flags et le chemin vers le répertoire de données des packages
  • packages-stopped.xml contient la liste des packages dans l’état stoppedd. Les applications dans cet état ne peux pas recevoir de broacast