Co oznacza zipalign i jak wpasowuje się w sposób, w jaki korzystamy z naszych urządzeń z Androidem?

19

Co oznacza „zipalign” i jakie jest jego znaczenie?

Kiedy ROM twierdzi, że jest „skompresowany”, co to znaczy i jaka jest różnica w stosunku do ROM, który nie jest „skompresowany”?

Matt
źródło

Odpowiedzi:

21

Ten mechanizm jest opisany na stronie programistów Androida w następujący sposób:

zipalign to narzędzie do wyrównywania archiwów, które zapewnia ważną optymalizację plików aplikacji na Androida (.apk). Ma to na celu zapewnienie, że wszystkie nieskompresowane dane zaczynają się od określonego wyrównania względem początku pliku. W szczególności powoduje to wyrównanie wszystkich nieskompresowanych danych w pliku .apk, takich jak obrazy lub nieprzetworzone pliki, do granic 4-bajtowych. Umożliwia to bezpośredni dostęp do wszystkich części za pomocą mmap (), nawet jeśli zawierają dane binarne z ograniczeniami wyrównania. Korzyścią jest zmniejszenie ilości pamięci RAM zużywanej podczas uruchamiania aplikacji.

W skrócie: .apkzawartość może być łatwiejsza / szybsza / bardziej optymalnie dostępna dzięki kolejności danych w spakowanym pliku.

Aby uzyskać głębsze informacje, w AddictiveTips dostępny jest „kompletny przewodnik”: Co to jest Zipalign w Androidzie i jak tworzyć aplikacje Zipalign , który odpowiada na drugą część pytania:

Zrozumiałe jest, że sytuacja byłaby zarezerwowana dla nieprzystosowanych pakietów aplikacji. Odczytywanie zasobów byłoby powolne, a użycie pamięci na wyższym końcu spektrum. Zależy to również od liczby niezapasowanych aplikacji. Na przykład, jeśli mniejsza liczba aplikacji z niewyrównaną aplikacją domową, zobaczysz wolniejsze czasy uruchamiania aplikacji. To najlepszy scenariusz. W najgorszym przypadku posiadanie szeregu nieprzystosowanych aplikacji spowoduje, że system będzie wielokrotnie uruchamiał i zabijał procesy, zmagając się z opóźnieniami i ogromnym zużyciem baterii.

Izzy
źródło
Dla programistów jest mniej więcej podobny do wyrównania strukturalnego w C. Nie rób, struct x { uint16_t id; uint32_t data[100]; };jeśli chcesz, aby był wyrównany 32-bit; użyciestruct x { uint16_t id; uint16_t padding; uint32_t data[100]; };
Matthew Read
Wygląda na to, że nie ma wady, dlaczego wszystkie aplikacje nie są dostosowane do formatu zip? Czy to naprawdę niepokoi użytkowników końcowych, czy dotyczy tylko programistów?
Matt
1
Powiedziałbym, że to dodatkowy krok dla twórcy. I oczywiście wydajność jest problemem dla użytkowników końcowych;)
Izzy
1

Aby dodać powyżej, jak dokładnie działa zipalign -

W środowisku operacyjnym Android dostęp do plików danych przechowywanych w każdym pakiecie aplikacji jest uzyskiwany przez wiele procesów, na przykład instalator odczyta manifest danych w celu ustalenia powiązanych uprawnień; serwer systemowy może odczytać te zasoby z wielu powodów, takich jak wyświetlanie powiadomień; na przykład aplikacja domowa odczyta zasoby, aby uzyskać nazwę i ikonę aplikacji. Ponieważ Android opiera się na prawdziwej wielozadaniowej infrastrukturze operacyjnej, pliki te są stale i wielokrotnie dostępne. Wreszcie, sama aplikacja odczytuje dane manifestu.

Ponieważ Android jest oparty na systemie Linux, mapowanie pamięci odgrywa kluczową rolę w wydajnej obsłudze procesów. Zasadniczo optymalne dopasowanie kodu obsługi zasobów w systemie operacyjnym Android wynosi 4-bajtowe granice. Oznacza to, że jeśli pliki APK zostaną zmapowane do 4-bajtowych granic i odpowiednio dostosowane, system operacyjny nie będzie musiał „czytać” całego pakietu aplikacji, aby uzyskać żądany manifest danych. Każdy proces systemowy z góry będzie wiedział, gdzie szukać pożądanych zasobów, a zatem będzie działał znacznie płynniej i szybciej.

Podsumowując, zipaligning APK skutkuje wyrównaniem wszystkich nieskompresowanych danych w pakiecie na 4-bajtowych granicach, umożliwiając bezpośredni dostęp do wszystkich części z mapą pamięci. Zużycie pamięci RAM jest zmniejszone podczas wykonywania, ponieważ kod zapytania nie musi czytać całego pakietu aplikacji.

Źródło

Aniket Thakur
źródło
Dlaczego nie czyta całego pakietu aplikacji? Czy gwarantowane są manifesty z określonym przesunięciem?
Kenneth Worden