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
etPackageInstaller
? - 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