Dlaczego Android przechowuje pliki APK zainstalowanych aplikacji?


31

Android przechowuje pliki APK zainstalowanych aplikacji użytkownika w /data/appkatalogu, a aplikacje systemowe w /system/appkatalogu.

Czy to znaczy, że Android wyodrębnia pliki dex z plików APK przy każdym uruchomieniu aplikacji? Jeśli nie, czy mogę bezpiecznie usunąć pliki APK i nadal uruchomić aplikację?

Odpowiedzi:


43

APK na Androida zazwyczaj zawiera te rzeczy.

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

Po instalacji plik APK jest kopiowany /data/appi classes.dexjest wyodrębniany i „optymalizowany” przez uruchomienie dex2oatna nim (na Androidzie 5+ lib/jest również wyodrębniany). Wynik optymalizacji jest zapisywany, /data/dalvik-cache/więc aplikacja musi zostać zoptymalizowana tylko raz na instalację lub aktualizację . Cała reszta jest przechowywana w APK. Tak więc pierwsza odpowiedź jest bardzo jasne: Takie rzeczy assetsi resże jest to wymagane przez aplikację musi być zapewnione, a są one wewnątrz APK. Plik APK jest przechowywany w celach pomocniczych. Jeśli usuniesz APK, aplikacja na pewno się nie uruchomi. (Aplikacja: gdzie są moje aktywa?)

Po drugie, Google Play bardzo dawno dodał obsługę „Aktualizacji Delta” . W procedurze aktualizacji delta obliczana jest różnica między starym pakietem a nowym pakietem. Następnie GP pobiera „Delta” i wprowadza zmiany w oryginalnym pliku APK, aby uzyskać zaktualizowany plik APK, zmniejszając w ten sposób rozmiar pliku do pobrania.

APK jest zawsze podpisany. Może to zapobiec złośliwej modyfikacji pakietu. Na pewno nie chcesz instalować modowanej aplikacji bez wiedzy o tym, co się zmieniło lub czy wstrzyknięto wirusa. W META-INF/tym celu działa APK. Nieoficjalne zmiany spowodują niezgodny podpis, a system Android odmówi zainstalowania zmodyfikowanej aplikacji.

Ponadto, gdy aktualizujesz system operacyjny Android, wszystkie pliki dex są ponownie „optymalizowane”, abyś nie musiał ponownie instalować ich jeden po drugim. Jak wspomniano powyżej, optymalizacja wymaga classes.dexpliku z oryginalnego pakietu.


5
Pamiętaj, że możliwości aktualizacji delta w Google Play Store zależą od tego, czy APK będzie obliczał różnicę między wersją zainstalowaną i zaktualizowaną, a następnie łatanie. Dodatkowo, APK jest skompresowany, więc oszczędza miejsce (ktoś pamięta, stary ZipAlign?)
Tamoghna Chowdhury

@Tamoghna Space nie jest tak naprawdę problemem, inaczej Android 5+ nie wyodrębniłby się lib/z APK, iOS nie wyodrębniłby wszystkiego z IPA. To tylko dla podstawowej kontroli integralności.
iBug

Pliki wykonywalne rzadko dobrze się kompresują - oszczędność miejsca jest bardziej związana ze skompresowanymi zasobami, takimi jak pliki binarne XML, które nie są wyodrębniane. Również o tym ZipAlign - dostęp do zasobów może być nieco szybszy w zoptymalizowanych (odczytywanych z wyrównaniem słów) plikach skompresowanych.
Tamoghna Chowdhury

1
Czy pliki zasobów, takie jak pliki HTML i JS, nie są kopiowane z apk do określonej lokalizacji w systemie plików Android?
user1788736

1
@ user1788736 Tak. Zostały w APK.
iBug
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.