Warum speichert Android APK-Dateien von installierten Apps?

31

Android speichert APK-Dateien installierter Benutzer-Apps im /data/appVerzeichnis und System-Apps im /system/appVerzeichnis.

Bedeutet dies, dass Android die Dex-Dateien bei jedem Start der App aus den APK-Dateien extrahiert? Wenn nicht, kann ich die APK-Dateien sicher löschen und die App trotzdem ausführen?

PrashanD
quelle

Antworten:

43

Ein Android APK enthält normalerweise diese Dinge.

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

Bei der Installation wird die APK-Datei kopiert /data/appund classes.dexdurch Ausführen extrahiert und "optimiert" dex2oat(auch auf Android 5+ lib/wird extrahiert). Das Ergebnis der Optimierung wird in gespeichert, /data/dalvik-cache/sodass eine App nur einmal pro Installation oder Update optimiert werden muss . Alles andere wird in der APK aufbewahrt. Die erste Antwort ist also sehr klar: Dinge wie assetsund resdie, die von der App benötigt werden, müssen bereitgestellt werden und sie befinden sich in der APK. Die APK-Datei wird zu Unterstützungszwecken aufbewahrt. Wenn Sie eine APK löschen, wird die App auf keinen Fall gestartet. (App: Wo ist mein Vermögen?)

Zweitens Google Play Unterstützung für „Delta Update“ sehr lange her . Bei der Delta-Aktualisierung wird die Differenz zwischen dem alten und dem neuen Paket berechnet. Dann lädt GP das "Delta" herunter und wendet Änderungen an der ursprünglichen APK an, um die aktualisierte APK zu erhalten, wodurch die Downloadgröße verringert wird.

Eine APK ist immer signiert. Dies kann böswillige Änderungen am Paket verhindern. Sie möchten auf keinen Fall eine modifizierte App installieren, ohne zu wissen, was geändert wurde oder ob ein Virus eingeschleust wurde. Das META-INF/Innere der APK funktioniert zu diesem Zweck. Inoffizielle Änderungen führen dazu, dass die Signatur nicht übereinstimmt, und das Android-System lehnt die Installation der modifizierten App ab.

Wenn Sie Ihr Android-Betriebssystem aktualisieren, werden alle Dex-Dateien erneut "optimiert", sodass Sie sie nicht einzeln neu installieren müssen. Wie oben erwähnt, erfordert die Optimierung eine classes.dexDatei aus dem Originalpaket.

iBug
quelle
5
Beachten Sie, dass die Delta-Update-Funktionen des Google Play Store davon abhängen, ob das APK das Delta zwischen der installierten und der aktualisierten Version und dem anschließenden Patching berechnet. Außerdem ist die APK so komprimiert, dass sie etwas Platz spart (wer erinnert sich noch an die alte ZipAlign?)
Tamoghna Chowdhury
@Tamoghna Space ist eigentlich kein Problem, sonst hätte Android 5+ nicht lib/aus APK extrahiert , iOS hätte nicht alles aus IPA extrahiert. Es ist nur für die grundlegende Integritätsprüfung.
iBug
Ausführbare Dateien werden selten gut komprimiert - die Platzersparnis hängt eher mit komprimierten Ressourcen wie den binärisierten XML-Dateien zusammen, die nicht extrahiert werden. Darüber hinaus kann der Zugriff auf ZipAlign-Ressourcen bei optimierten (wortausgerichteten) komprimierten Dateien etwas schneller erfolgen.
Tamoghna Chowdhury
1
Also die Asset-Dateien wie HTML- und JS-Dateien werden nicht von apk an einen bestimmten Speicherort im Android-Dateisystem kopiert?
user1788736
1
@ user1788736 Ja. Sie bleiben in der APK.
iBug