beginnning
PackageInstaller ruft InstallAppProgress Aktivität eine Anweisung von dem Benutzer empfängt. InstallAppProgress wird PackageManager
Service fragen, um Paket über Installd zu installieren.Der Quellcode ist unter <Android Source>/packages/apps/PackageInstaller
verfügbar.
Wenn wir APK
Datei installieren, Package Manager das Paket (APK
-Datei) und Anzeigebestätigung analysieren, wenn Benutzer drücken Sie OK-Taste, Verfahren Package Manager Aufruf installPackage
mit diesen vier Parametern uri
, installFlags
, Beobachter nämlich genannt, installPackageName
. Der Paket-Manager startet einen Dienst mit dem Namen "Paket", jetzt passieren alle unscharfen Dinge in diesem Dienst. Sie können PackageInstallerActivity.java
und InstallAppProgress.java
im PackageInstaller-Quellcode überprüfen. Der Paket-Manager-Dienst, der im Prozess system_service ausgeführt wird und den Dämon installiert (installd), der als systemeigener Prozess ausgeführt wird, startet beide zum Zeitpunkt des Systemstarts.
Wo sind APK
Dateien gespeichert in Android
?
- Pre-Install (dh die Kamera, Kalender, Browser, etc.)
APK
in/system/app gespeichert/
- Benutzer installieren (ApiDemo, Any.do, etc.) APK
in
/data/app/
gespeichert
- Package Manager-Datenverzeichnis
/data/data/<package name>/
zu speichern Datenbank, gemeinsame Vorlieben, native Bibliothek und Cache-Daten erstellen
Sie könnten apk
Datei und *.odex
Datei für gleichesehen, ODEX
Datei ist eine völlig andere Diskussion und Zweck.
Was ist der APK-Installationsprozess im Detail?
Folgenden Prozess in Package Manager Service
ausführen.
- Warten
- ein Paket in die Warteschlange hinzufügen für den Installationsprozess
- Bestimmen Sie die entsprechende Stelle der Paketinstallation
- Bestimmen Installation Installieren/Aktualisieren neue
- Eine Kopie der apk-Datei ein gegebenes Verzeichnis
- Ermitteln Sie die UID der App
- Anfrage an Installd Daemon Prozess
- Erstellen Sie das Anwendungsverzeichnis und Berechtigungen
- Extraktion von dex-Code zu dem Cache-Verzeichnis
/system/data/packages.xml
zu reflektieren und packages.list den neuesten Stand
- Übertragung an das System zusammen mit dem Namen des Effekts der Anlage ist das komplette Paket
Intent.ACTION_PACKAGE_ADDED
: Wenn das neue (Intent.ACTION_PACKAGE_REPLACED
): der Fall eines Updates.
Wie Package Manager Daten speichern?
Paketmanager speichern Anwendungsinformationen in drei Dateien, in /data/system
. Das folgende Beispiel wird aus dem Emulatorimage Android 4 ICS
extrahiert.
packages.xml
: Diese Datei enthält die Liste der Berechtigungen und die Pakete/Anwendungen. Diese xml
Datei speichert zwei Dinge 1. Berechtigungen 2. Paket (Anwendung), Erlaubnis sind unter <permissions>
Tag speichern. Jede Berechtigung hat drei Attribute, nämlich Name, Paket und Schutz. Das Namensattribut hat einen Berechtigungsnamen, den wir in AndroidManifest.xml
verwenden. Das Paketattribut zeigt die Berechtigung zum Paket an. In den meisten Fällen ist "android" ein Wert, da <permission>
Tags die Standardberechtigungen und den Schutz das Sicherheitsniveau enthalten.
packages.list
: Es ist einfach Textdatei Paketnamen, die Benutzer-ID, Flagge und Datenverzeichnis enthält, kann ich keine perfekte Beschreibung finden, aber ich nehme an, dass packages.list
Datei schnellen Lookup des installierten Pakets zur Verfügung stellen kann, weil es Datei Halten Sie nur wichtige Informationen bereit.
com.android.launcher 10013 0 /data/data/com.android.launcher
com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
com.android.contacts 10001 0 /data/data/com.android.contacts
com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin
packages-stoped.xml
: Diese Datei Paketliste enthält, den Zustand angehalten hat, erklärt Stope Anwendungen können keine Sendung empfangen.
Wo finde ich den Quellcode von Package Manager und Package Installer?
Package Manager
frameworks/base/services/java/com/android/server/pm/Settings.java
frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
frameworks/services/java/com/android/server/PreferredComponent.java
frameworks/core/java/android/content/IntentFilter.java
frameworks/base/core/java/android/content/pm/PackageParser.java
frameworks/base/services/java/com/android/server/pm/Installer.java
frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
Package Installer
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java.
Verbindungen vorgelegt: link 1 und link 2.
Eines können Sie sicher sein: Es gibt keine allgemeine Antwort. Besonders jetzt nach dem Wechsel von Dalvik zu ART. Haben Sie jemals darüber nachgedacht, ein Gerät zu rooten und nur zu schauen, was Sie finden werden? –
Sie müssen kein Gerät rooten, um sich umzusehen. Stecken Sie ein Telefon in Ihren Computer und führen Sie 'adb shell' aus. Die Befehle ähneln einer Unix-Shell - z. Sie können 'cd' und' ls' eingeben. Sieh dir Verzeichnisse wie '/ data/app' an. http://blog.shvetsov.com/2013/02/access-android-app-data-without-root.html – craig65535
Jenseits der Suche nach einer Beschreibung des APK-Formats in Ihrem Lieblings-Wiki - die neueren Sachen über ART wurden in der Letzte Google IO: https://youtu.be/EBlTzQsUoOw –