Niższe koszty danych dla miliardów użytkowników
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
W niektórych krajach pakiety danych mogą kosztować ponad 10% miesięcznych dochodów typowego użytkownika. Oznacza to, że zmniejszenie rozmiaru pobierania aplikacji i umożliwienie użytkownikowi kontrolowania sposobu, w jaki aplikacja korzysta z danych, może przynieść wielu użytkownikom duże, wymierne korzyści. Minimalizowanie rozmiaru pobierania pomaga też oszczędzać miejsce w pamięci wewnętrznej, która na niektórych urządzeniach jest ograniczona.
Znajdziesz tu strategie, które pomogą Ci zoptymalizować ilość danych wykorzystywanych przez aplikację zarówno w sieci, jak i w pamięci wewnętrznej.
Zmniejszanie rozmiaru aplikacji
Zmniejszenie rozmiaru aplikacji to jeden z podstawowych sposobów na ograniczenie zużycia danych przez użytkownika, zarówno w przypadku danych sieciowych, jak i pamięci wewnętrznej. W tej sekcji opisujemy kilka sposobów na zmniejszenie rozmiaru aplikacji.
Zmniejszanie rozmiaru komponentów graficznych w pliku APK
- Zasoby graficzne często mają największy wpływ na rozmiar pliku APK. Optymalizacja tych elementów może zmniejszyć rozmiar pobieranych plików, a tym samym skrócić czas instalacji dla użytkowników.
- W przypadku zasobów graficznych, takich jak ikony, używaj formatu SVG. Obrazy SVG są niewielkie w porównaniu z grafiką bitmapową i mogą być renderowane w dowolnej rozdzielczości w czasie działania. Biblioteka pomocy Androida zapewnia wstecznie zgodną implementację zasobów wektorowych dla Androida 2.1 (poziom API 7).
Pierwsze kroki z wektorami znajdziesz w
tym artykule na Medium.
- W przypadku obrazów innych niż wektorowe, np. zdjęć, używaj formatu WebP, aby skrócić czas wczytywania obrazów i zaoszczędzić przepustowość sieci. Udowodniono, że format WebP zapewnia mniejsze rozmiary plików niż PNG i JPG przy co najmniej takiej samej jakości obrazu. Nawet przy ustawieniach stratnych format WebP może generować obraz niemal identyczny z oryginałem. Android obsługuje stratną kompresję WebP od wersji 4.0 (API na poziomie 14: Ice Cream Sandwich), a bezstratną i przezroczystą kompresję WebP od wersji 4.2 (API na poziomie 17: Jelly Bean).
- Jeśli masz wiele dużych obrazów o różnej gęstości, rozważ użycie obsługi wielu pakietów APK, aby podzielić pakiet APK według gęstości. Dzięki temu powstają wersje przeznaczone dla konkretnych gęstości, co oznacza, że użytkownicy urządzeń o niskiej gęstości nie będą musieli pobierać nieużywanych zasobów o wysokiej gęstości.
- Więcej informacji o zmniejszaniu rozmiaru pliku APK znajdziesz w artykułach Zmniejszanie rozmiaru pliku APK i Zmniejszanie rozmiaru kodu i zasobów. Szczegółowy przewodnik po zmniejszaniu rozmiaru pliku APK znajdziesz w tej
serii postów na platformie Medium.
Zmniejszanie rozmiaru kodu
- Każda biblioteka w projekcie na Androida dodaje do pliku APK potencjalnie nieużywany kod. Zachowaj szczególną ostrożność podczas korzystania z bibliotek zewnętrznych, ponieważ nie wszystkie biblioteki są przeznaczone do używania w aplikacjach mobilnych. Upewnij się, że biblioteki używane przez aplikację są zoptymalizowane pod kątem urządzeń mobilnych.
- Rozważ optymalizację skompilowanego kodu za pomocą narzędzia takiego jak ProGuard. ProGuard identyfikuje nieużywany kod i usuwa go z pliku APK. Podczas kompilacji
włącz też zmniejszanie zasobów, ustawiając
minifyEnabled=true
, shrinkResources=true
w build.gradle
. Spowoduje to automatyczne usunięcie nieużywanych zasobów z pliku APK.
- Podczas korzystania z Usług Google Play
wybieraj tylko niezbędne interfejsy API do uwzględnienia w pliku APK.
- Więcej informacji o zmniejszaniu rozmiaru kodu w pliku APK znajdziesz w szkoleniu na temat Androida, w którym wyjaśniamy, jak unikać frameworków wstrzykiwania zależności.
Zezwalaj na przenoszenie aplikacji do pamięci zewnętrznej (karty SD)
- Tanie urządzenia często mają mało pamięci. Użytkownicy mogą rozszerzyć tę pamięć za pomocą kart SD, ale zanim będą mogli przenieść aplikacje, muszą one wyraźnie zadeklarować, że obsługują instalację na pamięci zewnętrznej.
- Zezwól na instalowanie aplikacji w pamięci zewnętrznej za pomocą flagi
android:installLocation
w pliku AndroidManifest.xml. Więcej informacji o tym, jak umożliwić przenoszenie aplikacji na pamięć zewnętrzną, znajdziesz w przewodniku po Androidzie w sekcji Lokalizacja instalacji aplikacji.
Zmniejszanie wykorzystania dysku przez aplikację po instalacji
- Niewielkie zużycie miejsca na dysku przez aplikację oznacza, że użytkownicy rzadziej będą ją odinstalowywać, gdy na urządzeniu zabraknie wolnego miejsca. Ważne jest, aby ograniczyć rozmiar pamięci podręcznych, co zapobiega nieograniczonemu wzrostowi wykorzystania dysku przez aplikację. Pamiętaj, aby umieścić dane w pamięci podręcznej w folderze
getCacheDir()
– system może w razie potrzeby usuwać stamtąd pliki, więc nie będą one widoczne jako miejsce na dane przypisane do aplikacji.
Oferowanie konfigurowalnego korzystania z sieci
Platforma Android udostępnia kilka sposobów, dzięki którym możesz dać użytkownikowi kontrolę nad wykorzystaniem sieci przez aplikację i zoptymalizować ją pod kątem jego potrzeb. Na przykład podczas pierwszego użycia aplikacja może przeprowadzić użytkownika przez różne ustawienia związane z siecią.
Możesz też udostępnić ekran ustawień sieci spoza aplikacji.
Udostępnianie użytkownikom informacji o wyborach dotyczących sieci
- Aplikacje, które pozwalają użytkownikom zmniejszyć zużycie danych, są dobrze odbierane, nawet jeśli mają duże wymagania dotyczące danych. Jeśli Twoja aplikacja zużywa znaczną ilość przepustowości (np. aplikacje do strumieniowego przesyłania wideo), możesz zapewnić użytkownikom wprowadzenie, które pozwoli im skonfigurować wykorzystanie sieci. Możesz na przykład zezwolić użytkownikowi na wymuszanie strumieni wideo o niższej przepływności w sieciach komórkowych.
- Dodatkowe ustawienia, które pozwalają użytkownikom kontrolować synchronizację danych, wstępne pobieranie i zachowanie związane z korzystaniem z sieci (np. wstępne pobieranie wszystkich oznaczonych gwiazdką kategorii wiadomości tylko w sieci Wi-Fi), pomagają też dostosować działanie aplikacji do ich potrzeb.
- Więcej informacji o zarządzaniu wykorzystaniem sieci znajdziesz w szkoleniu na temat Androida Zarządzanie wykorzystaniem sieci.
Wyświetlanie ekranu ustawień sieci
- Ustawienia sieci aplikacji możesz otworzyć z poziomu ekranu ustawień sieci poza aplikacją. Ten ekran możesz otworzyć w ustawieniach systemu lub na ekranie wykorzystania danych systemowych.
- Aby udostępnić ekran ustawień sieci, do którego użytkownicy mogą uzyskać dostęp z poziomu aplikacji oraz ustawień systemu, w aplikacji umieść aktywność obsługującą działanie
ACTION_MANAGE_NETWORK_USAGE
.
- Więcej informacji o dodawaniu ekranu ustawień sieci znajdziesz w szkoleniu na temat Androida
Wdrażanie aktywności związanej z ustawieniami.
Dodatkowe materiały
Więcej informacji na ten temat znajdziesz w tych materiałach:
Posty na blogu
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[null,null,["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Reduced data cost for billions\n\n\u003cbr /\u003e\n\n\nData plans in some countries can cost upwards of 10% of a typical user's monthly income. This\nmeans that minimizing your app's download size and letting the user control how your app uses\ndata can have a large, tangible benefit to many users. Minimizing download size also helps\nconserve space in internal storage, which is a scarce resource in some devices.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nHere you can find some strategies to help optimize the amount of data your app uses, both over\nthe network and in internal storage.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nReduce app size\n---------------\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\nReducing app size is one of the fundamental ways you can help your user consume less data, in\nterms of both network data and internal storage. This section describes several approaches to\nreducing app size.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n### Reduce APK graphical asset size\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n- Graphical assets are often the largest contributor to the size of the APK. Optimizing these can result in smaller downloads and thus faster installation times for users.\n- For graphical assets such as icons, use the Scalable Vector Graphics (SVG) format. SVG images are tiny in size compared to bitmap graphics and can be rendered at runtime to any resolution. The [Android Support Library](/tools/support-library) provides a backward-compatible implementation for vector resources to Android 2.1 (API level 7). Get started with vectors with [this Medium post](https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88).\n- For non-vector images, such as photos, use [WebP](https://developers.google.com/speed/webp/) to reduce image load times and save network bandwidth. WebP is proven to result in smaller file sizes than its PNG and JPG counterparts, with at least the same image quality. Even at lossy settings, WebP can produce a nearly identical image to the original. Android has included lossy WebP support since Android 4.0 (API level 14: Ice Cream Sandwich) and support for lossless, transparent WebP since Android 4.2 (API level 17: Jelly Bean).\n- If you have many large images across multiple densities, consider using [Multiple\n APK support](/google/play/publishing/multiple-apks) to split your APK by density. This results in builds targeted for specific densities, meaning users with low-density devices won't have to incur the penalty of downloading unused high-density assets.\n- For more information about reducing APK size, see [Reduce APK Size](/topic/performance/reduce-apk-size) and [Shrink Your Code and Resources](/studio/build/shrink-code). In addition, you can find a detailed guide on reducing APK size in this [series of Medium posts](https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006).\n\n### Reduce code size\n\n- Every library in your Android project is adding potentially unused code to the APK. Be particularly careful about using external libraries because not all libraries are designed for use in mobile apps. Ensure that the libraries your app is using are optimized for mobile use.\n- Consider optimizing your compiled code using a tool such as [ProGuard](/tools/help/proguard). ProGuard identifies code that isn't being used and removes it from your APK. Also [enable resource shrinking](http://tools.android.com/tech-docs/new-build-system/resource-shrinking) at build time by setting `minifyEnabled=true`, `shrinkResources=true` in `build.gradle`---this automatically removes unused resources from your APK.\n- When using Google Play services, you should [selectively include](/google/play-services/setup#add_google_play_services_to_your_project) only the necessary APIs into your APK.\n- For more information on reducing code size in your APK, see the Android training on how to [Avoid\n dependency injection frameworks](/training/articles/memory#DependencyInjection).\n\n### Allow app to be moved to external (SD) storage\n\n- Low-cost devices often come with little on-device storage. Users can extend this with SD cards; however, apps need to explicitly declare that they support being installed to external storage before users can move them.\n- Allow your app to be installed to external storage using the [`\n android:installLocation`](/guide/topics/manifest/manifest-element#install) flag in your AndroidManifest.xml. For more information on enabling your app to be moved to external storage, see the Android guide on [App Install\n Location](/guide/topics/data/install-location).\n\n\u003cbr /\u003e\n\n### Reduce post-install app disk use\n\n\u003cbr /\u003e\n\n- Keeping your app's disk use low means that users are less likely to uninstall your app when the device is low on free space. It's important to apply bounds around your caches---this prevents your app's disk use from growing indefinitely. Be sure you put your cached data in [getCacheDir()](/reference/android/content/Context#getCacheDir())---the system can delete files placed here as needed, so they won't show up as storage committed to the app.\n\n\u003cbr /\u003e\n\nOffer configurable network use\n------------------------------\n\n\nThe Android platform includes a number of ways you can give the user control\nover your app's network use, optimizing it for their own needs. For example,\non first use, your app can walk the user through a variety of network-related settings.\nYou can also provide a network preferences screen from outside the app.\n\n### Provide onboarding experiences for users' network\nchoices\n\n\u003cbr /\u003e\n\n- Apps that allow users to reduce data use are well received, even if they have heavy data requirements. If your app uses a considerable amount of bandwidth (for example, video streaming apps), you can provide an onboarding experience for users to configure network use. For example, you could allow the user to force lower-bitrate video streams on cellular networks.\n- Additional settings for users to control data syncing, prefetching, and network use behavior (for example, prefetch all starred news categories on Wi-Fi only), also help users tailor your app's behavior to their needs.\n- For more information on managing network use, see the Android training on [Managing\n Network Usage](/training/basics/network-ops/managing).\n\n### Provide a network preferences\nscreen\n\n- You can navigate to the app's network settings from outside the app by means of a network preferences screen. You can invoke this screen from either the system settings screen or the system data usage screen.\n- To provide a network preferences screen that users can access from within your app as well as from the system settings, in your app include an activity that supports the [ACTION_MANAGE_NETWORK_USAGE](/reference/android/content/Intent#ACTION_MANAGE_NETWORK_USAGE) action.\n- For further information on adding a network preferences screen, see the Android training on [Implementing a Preferences Activity](/training/basics/network-ops/managing#prefs).\n\n\u003cbr /\u003e\n\nAdditional resources\n--------------------\n\nTo learn more about this topic, view the following additional resources:\n\n### Blog posts\n\n- [Nurture trust through cost transparency](https://medium.com/google-design/nurture-trust-through-cost-transparency-b61a5947d2fc)"]]