W tym przewodniku opisano, jak zmniejszyć rozmiar gry. Po instalacji mniejsza gra wymaga mniej czasu na pobranie i mniej danych. Obie metody zwiększają liczbę konwersji polegających na instalacji. Badania przeprowadzone przez Google wykazały, że zwiększenie rozmiaru udostępnianego pliku APK o 6 MB skutkuje spadkiem liczby instalacji o 1%. Wielu programistów przenosi zasoby z pliku APK do sieci dystrybucji treści (CDN), ale wiąże się to z kosztami zarówno w zakresie hostowania sieci CDN, jak i tworzenia i obsługi systemu zarządzania zasobami.
Aby zmniejszyć rozmiar gry, wykonaj te czynności:
- Korzystaj ze zoptymalizowanych metod wyświetlania, takich jak pakiety aplikacji i Play Asset Delivery.
- Określ podstawowy rozmiar gry i poznaj jej strukturę.
- Wyszukaj zasoby i inne pliki, których rozmiar można zmniejszyć.
- Sprawdź tekstury grafiki i określ możliwości optymalizacji.
- Postępuj zgodnie z ogólnymi zaleceniami dotyczącymi zasobów.
używać zoptymalizowanych metod wyświetlania, takich jak pakiety Android App Bundle i Play Asset Delivery
Weź pod uwagę te metody wyświetlania:
Starsze projekty zwykle generują plik APK do opublikowania, ale gry publikowane w Google Play powinny korzystać z pakietu Android App Bundle. Pakiety aplikacji udostępniają zoptymalizowane pliki APK dostosowane do konfiguracji urządzenia każdego użytkownika. Pakiety aplikacji zmniejszają rozmiar aplikacji średnio o 20%.
Aby wyświetlać zasoby gry przez Google Play i przekraczać limit 200 MB do pobrania w przypadku pakietów aplikacji do kilku GB, użyj usługi Play Asset Delivery (PAD). Zewnętrzna sieć CDN nie jest wymagana. PAD obsługuje 3 różne metody dostarczania, z których każda może być używana w 1 grze:
- Czas instalacji: pobiera zasoby po instalacji. Zasoby są pakowane w pakiety zasobów, które zastępują pliki nieprzezroczystego pliku binarnego (OBB).
- Szybkie śledzenie: pobieranie zasobów po instalacji.
- Na żądanie: w razie potrzeby gra rozpoczyna pobieranie zasobów.
PAD wymaga, aby gry były spakowane w formacie App Bundle. PAD może też zmniejszyć ilość danych używanych przez sieć CDN dewelopera (jeśli nadal jest potrzebna).
Google Play używa pakietów Android App Bundle do generowania i udostępniania zoptymalizowanych plików APK dopasowanych do konfiguracji urządzeń każdego użytkownika. Te zoptymalizowane pliki APK zawierają pojedynczy zestaw zasobów tekstur sformatowanych z użyciem optymalnego formatu kompresji dla danego urządzenia. Skonfiguruj pakiet aplikacji pod kątem obsługi różnych formatów kompresji tekstur, co pozwoli na obsługę na największej liczbie urządzeń.
Określ podstawowy rozmiar gry i poznaj jej strukturę.
Aby zapoznać się z grą, określić ilość pracy wymaganą do optymalizacji i ustalić, czy gra pobiera dodatkowe zasoby, wykonaj te czynności:
- Użyj kompilacji produkcyjnej (bez debugowania) dostarczonej przez dewelopera lub opublikowanego pakietu APK.
- Zanotuj rozmiar pliku binarnego dostarczonego przez dewelopera lub (jeśli gra została opublikowana) na stronie gry w Sklepie Play. Jeśli chodzi o rozmiar pliku APK, najważniejszym czynnikiem jest ilość danych, które użytkownik musi pobrać, by uruchomić grę.
- Zainstaluj grę na urządzeniu i uruchom ją, używając początkowego menu gry. Na tym etapie sprawdź rozmiar instalacji gry podany przez Androida (w sekcji Ustawienia > Pamięć). W przypadku niektórych gier rozmiar po instalacji jest niewielki, ponieważ jest to kluczowa liczba do optymalizacji, ale po instalacji pobierają dodatkowe dane. Niektóre gry po instalacji pobierają wiele gigabajtów danych.
- Niektóre gry pobierają dane dopiero po rozpoczęciu gry. Powinno to trochę potrwać, aby określić, ile dodatkowych danych pobiera ona dla typowego użytkownika grającego w grę po raz pierwszy.
Szukaj zasobów i innych plików, które można zmniejszyć
W tej sekcji opisujemy, jak zmniejszyć rozmiar plików APK. Aby pobrać pliki APK dla konkretnych urządzeń, możesz użyć Eksploratora pakietów aplikacji.
Aby zmniejszyć rozmiar plików spakowanych bezpośrednio do pliku APK, wykonaj te czynności:
- Użyj Analizatora plików APK w Android Studio. W Android Studio wybierz Plik > Profil lub plik APK debugowania i wybierz swój plik APK.
- Wybierz folder Assets (Zasoby). W przypadku każdego pliku wyświetlane są informacje o rozmiarze nieprzetworzonego pliku i procentowej wartości całkowitego rozmiaru pobieranego pliku.
Przejrzyj folder Zasoby i określ, gdzie znajduje się większość danych gry. Ustal, czy jakieś zasoby nie zajmują nadmiernej ilości miejsca (czyli nie przekraczają 1% ich całości). Zwróć szczególną uwagę na te kwestie:
- Duże pliki graficzne i wideo (np. PNG, JPEG i mp4): takie pliki są zwykle używane na ekranach powitalnych, w tłach i na logo. Te pliki są rzadko używane w większości gier i można je dodatkowo skompresować, nie wpływając na wrażenia użytkownika. Bezstratne pliki PNG są szczególnie duże i doskonale nadają się do kompresji.
- Duże pliki czcionek (np. TTF): dodanie obsługi emotikonów może znacznie zwiększyć rozmiar pliku czcionek. Jeśli plik czcionki jest większy niż kilkaset kilobajtów, zastanów się nad zmniejszeniem jego rozmiaru.
- Zduplikowane formaty lub wersje plików audio, które możesz łączyć.
Jeśli plik APK zawiera wiele interfejsów binarnych aplikacji, przejdź do pakietów aplikacji lub utwórz większą liczbę plików APK.
Ustal rozmiar plików binarnego obiektu współdzielonego (.so). Aby sprawdzić pliki binarne i sprawdzić, czy są jakieś elementy, które prawdopodobnie nie powinny być uwzględniane, na przykład pliki dziennika, możesz użyć narzędzia Balaty McBloatface. Więcej informacji o optymalizowaniu plików binarnych znajdziesz w artykule na temat flag i opcji kompilacji.
Sprawdź plik manifestu Androida pod kątem obsługiwanych formatów graficznych. Sprawdź, czy w pliku APK jest wiele tagów
<supports-gl-texture>
. Jeśli gra obsługuje wiele formatów GPU w jednym pliku APK, możesz użyć usługi Binomial's Basis Universal. Ten system kompresji tekstur GPU tworzy pliki tekstur w formacie pośrednim, które można szybko transkodować na GPU.
Sprawdź tekstury grafiki i określ możliwości optymalizacji
W tej sekcji opisujemy narzędzia i metody określania, czy można zoptymalizować tekstury graficzne używane w grze.
Aby sprawdzić tekstury w grze, użyj narzędzia Android GPU Controller (AGI), RenderDoc lub (tylko w przypadku procesorów graficznych Qualcomm Snapdragon) Snapdragon Profiler.
Sprawdź, czy:
- Tekstury, które można zmniejszyć do mniejszej rozdzielczości, np. duża tekstura, która jest renderowana w grze tylko w małym rozmiarze. Pobieranie tekstur z użyciem redukcji jest kosztowne.
- Użycie wielu małych tekstur, które można połączyć w jedną mapę tekstur.
- Tekstury, które mogą wykorzystywać mniej bitów w kanałach kolorów. Dobrymi przykładami są tekstury z kilkoma jednolitymi teksturami. Gradienty i odcienie kolorów wymagają większej rozdzielczości i dlatego nie nadają się do tego.
- Poznaj lepsze algorytmy kompresji tekstur – od ETC1 do ETC2 i ASTC.
Aby oszczędzać pamięć, odrzuć górny poziom mipmappingu podczas wczytywania tekstur na urządzeniach słabiejszych. Jest to możliwe dzięki systemowi strumieniowania tekstur Unity.
W pliku manifestu Androida zapoznaj się z obsługiwanymi formatami grafiki. Sprawdź, czy w pliku APK jest wiele tagów
<supports-gl-texture>
. Jeśli gra obsługuje formaty dla wielu GPU w jednym pliku APK, możesz użyć usługi Binomial's Basis Universal. Ten system kompresji tekstur GPU tworzy pliki tekstur w formacie pośrednim, które można szybko transkodować na GPU.
Ogólne zalecenia dotyczące zasobów
Postępuj zgodnie z tymi zaleceniami dotyczącymi zasobów pliku APK:
- Zasoby graficzne, audio i wideo (ale nie tekstury GPU): określ, czy można jeszcze bardziej skompresować lub zmienić rozmiar zasobów. W przypadku gier zwykle akceptowalne są wyższe współczynniki kompresji. Bezstratne pliki PNG są szczególnie duże i dobrze nadają się do kompresji.
- Zasoby graficzne (nie tekstury GPU): rozważ użycie WEBP – formatu kompresji obrazów zapewniającego kompresję stratną i bezstratną. Stratna przeglądarka WEBP kompresuje obrazy o 25–34% bardziej niż w przypadku formatu JPG.
- Zmniejsz rozdzielczość tekstury: tekstura znacznie większa niż liczba pikseli, która ostatecznie jest renderowana na ekranie, niewydajnie wykorzystuje przestrzeń i zasoby GPU. Aby zmienić teksturę i zobaczyć, jak wygląda w klatce bez konieczności ponownego skompilowania gry, skorzystaj z AGI.
- Zmień formaty tekstur grafiki: użyj formatów tekstur, które używają mniejszej liczby bitów na kanał. Na przykład użyj 16-bitowego formatu tekstury, takiego jak RGB565, zamiast 32-bitowego formatu tekstury, takiego jak ARGB. Więcej informacji:
Dodatkowe materiały
- Najnowsze ulepszenia pakietów Android App Bundle i harmonogram tworzenia nowych aplikacji w Google Play
- Zmniejszanie rozmiaru pliku APK w grach błyskawicznych na Androida
- Dekodowane przez procesor GPU tekstury superskompresowane (praca badawcza)