7

Ich weiß, wie Sie eine Anwendung auf einem Android Gerät z. B. von Play-Store oder über eine .apk Datei installieren. Aber ich würde gerne den tatsächlichen Installationsprozess verstehen."Wie werden" Android-Anwendungen (Facebook usw.) auf einem Android-Telefon installiert?

z. unter Windows:

  • Seriencodes usw. werden in der Registrierung platziert
  • Dateien wichtig für den Betrieb von Software innerhalb der Program Files Ordner (die Haupt .exe usw.)
platziert

Bisher was ich weiß über die Android Anwendung Installation ist:

  • Nach einer Android-Anwendung ausgeführt wurde (nach der Installation), Daten frisch in Orten wie platziert heruntergeladen: Android/data oder Android/OBB usw.

  • Wenn speziell von einem Android-Entwickler ausgedrückt Dateien können auch anderswo abgelegt werden, z auf Sekundärspeicher (Speicherkarten, Cloud-Speicher usw.)

Aber anders als das, mein Wissen, um die Android Installation über ist ziemlich schlank zB:

  • Ich weiß nicht, wo wichtige Dateien in Bezug auf die Ausführung eines Android-Programms platziert werden (im Fall von Windows, die . Exe, verwandte Medien, Bibliotheken usw.)

  • ich ähnliche Ich weiß nicht, wie diese Dateien auf einem Android-Gerät strukturiert sind (nach der Installation), z., res, Menü, Layout etc., wie während der Entwicklung in Umgebungen wie Android Studio java: Diese Dateien werden wie in Ordnern strukturiert?

  • Ich weiß auch nicht, wie Anwendung Dateitypen auf einem Gerät des Benutzers nach der Installation (nach dem Entpacken aus der Android-Installationsdatei oder apk) gespeichert werden z. sie als .java- gespeichert sind und oder .xml Dateien, wie während der Entwicklung usw.

Hoffentlich jemand in die Lücken füllen, danke.

+1

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

+0

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

+1

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 –

Antwort

12

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?

  1. Pre-Install (dh die Kamera, Kalender, Browser, etc.) APK in/system/app gespeichert/
  2. Benutzer installieren (ApiDemo, Any.do, etc.) APK
  3. in /data/app/ gespeichert
  4. 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.

enter image description here

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.

+0

Wie extrahiert das Android OS .dex-Dateien und wo extrahiert es, für jede installierte Anwendung? –

+0

OS holen Paket von apk, also speichern es es in '/ data/system'. Bitte beachten Sie die Titel meiner Antwort * Was ist APK Installation im Detail * und * Wie Package Manager Daten speichern *. Dort ist alles ausführlich beschrieben. – Yurets

+0

Ich meinte, wie extrahiert der Android O. "dex code zum cachen von Verzeichnissen" und wo befinden sich diese Cache-Verzeichnisse für jede Anwendung? –