Nutzer vermeiden es oft, Apps herunterzuladen, die ihnen zu groß erscheinen, insbesondere in Schwellenländern, in denen Geräte mit unzuverlässigen 2G- und 3G-Netzen verbunden sind oder Tarife mit Datenlimits haben. Auf dieser Seite wird Folgendes beschrieben: wie du die Downloadgröße deiner App verringerst, damit mehr Nutzer deine App herunterladen können.
App mit Android App Bundles hochladen
Lade deine App als Android App Bundle hoch, um sie sofort zu aktivieren. die App-Größe reduzieren, wenn Sie etwas bei Google Play veröffentlichen. Android App Bundle ist ein Uploadformat, das den gesamten kompilierten Code und alle Ressourcen Ihrer App enthält. Die Generierung und Signatur des APK wird jedoch an Google Play weitergeleitet.
Das App-Bereitstellungsmodell von Google Play verwendet dann dein App Bundle, um optimierte APKs zu generieren und bereitzustellen für die Gerätekonfiguration der einzelnen Nutzer, sodass diese nur den Code und die Ressourcen herunterladen, die sie die App ausführen. Sie müssen nicht mehrere APKs erstellen, signieren und verwalten, um verschiedene Geräte zu unterstützen, und Nutzer erzielen kleinere, optimierte Downloads.
Google Play erzwingt einen komprimierten Download Größenbeschränkung von 200 MB für Apps, die mit App Bundles veröffentlicht wurden. Größere Formate sind zwar mit Play Feature Delivery und Play Asset Delivery möglich, sich negativ auf den Erfolg der Installationen auswirken und die Anzahl der Deinstallationen erhöhen. Daher empfehlen wir Ihnen, die Richtlinien beschrieben, um die Downloadgröße Ihrer App so weit wie möglich zu reduzieren.
APK-Struktur
Bevor Sie die Größe Ihrer App reduzieren, sollten Sie sich mit der Struktur des APK einer App vertraut machen. Eine APK-Datei besteht aus einem ZIP-Archiv, das alle Dateien enthält, aus denen Ihre App besteht. Diese Zu den Dateien gehören Java-Klassendateien, Ressourcendateien und eine Datei, die kompilierte Ressourcen enthält.
Ein APK enthält die folgenden Verzeichnisse:
META-INF/
: enthält die SignaturCERT.SF
undCERT.RSA
-Dateien sowie die ManifestdateiMANIFEST.MF
.assets/
: Enthält die Assets der App, die die App mit einemAssetManager
-Objekt enthält.res/
: enthält Ressourcen, die nicht inresources.arsc
.lib/
: Enthält den kompilierten Code, der für die Softwareschicht eines Prozessors spezifisch ist. Dieses Verzeichnis enthält ein Unterverzeichnis für jeden Plattformtyp, z. B.armeabi
,armeabi-v7a
,arm64-v8a
,x86
,x86_64
undmips
.
Ein APK enthält auch die folgenden Dateien. Nur AndroidManifest.xml
ist obligatorisch:
resources.arsc
: enthält kompilierte Ressourcen. Diese Datei enthält den XML-Inhalt. aus allen Konfigurationen des Ordnersres/values/
. Das Tool zum Verpacken extrahiert diese XML-Inhalte, kompiliert sie in Binärform und archiviert sie. Diese Inhalte enthalten Sprache Zeichenfolgen und Stilen sowie Pfade zu Inhalten, die nicht direkt imresources.arsc
-Datei, z. B. Layoutdateien und Bilder.classes.dex
: Enthält die Klassen, die im DEX-Dateiformat kompiliert wurden und von der Dalvik- oder ART-virtuellen Maschine verstanden werden.AndroidManifest.xml
: Enthält die Hauptmanifestdatei von Android. In dieser Datei sind die Name, Version, Zugriffsrechte und referenzierte Bibliotheksdateien der App. In der Datei wird das binären XML-Format.
Anzahl und Größe der Ressourcen reduzieren
Die Größe Ihres APK wirkt sich darauf aus, wie schnell Ihre App geladen wird, wie viel Speicher sie verwendet und wie
verbraucht wird. Sie können Ihr APK verkleinern, indem Sie die Anzahl und Größe der
Ressourcen, die sie enthält. Sie können insbesondere Ressourcen entfernen, die Ihre App nicht mehr verwendet,
können skalierbare
Drawable
Objekte in
an der Stelle der Bilddateien. In diesem Abschnitt werden diese Methoden und andere Möglichkeiten zur Reduzierung der
Ressourcen in Ihrer App, um die Gesamtgröße Ihres APK zu verringern.
Nicht verwendete Ressourcen entfernen
Das Tool lint
ist ein in Android Studio enthaltener statischer Codeanalysator, der Ressourcen im Ordner res/
erkennt, auf die Ihr Code nicht verweist. Wenn das lint
-Tool eine potenziell nicht verwendete Ressource in Ihrem
wird eine Nachricht wie im folgenden Beispiel ausgegeben:
res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]
Bibliotheken, die Sie Ihrem Code hinzufügen, können ungenutzte Ressourcen enthalten. Gradle kann Ressourcen automatisch in Ihrem Namen entfernen, wenn Sie shrinkResources
in der build.gradle.kts
-Datei Ihrer App aktivieren.
android { // Other settings. buildTypes { getByName("release") { minifyEnabled = true shrinkResources = true proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro") } } }
android { // Other settings. buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Wenn Sie shrinkResources
verwenden möchten, müssen Sie die Codeverkürzung aktivieren. Während des Build-Prozesses muss R8 zuerst
wird nicht verwendetem Code entfernt. Anschließend entfernt das Android Gradle-Plug-in die nicht verwendeten Ressourcen.
Weitere Informationen über das Verkleinern von Code und Ressourcen sowie andere Möglichkeiten, APK-Größe (siehe App verkleinern, verschleiern und optimieren)
Ab Android-Gradle-Plug-in 7.0 können Sie die Konfigurationen
deklarieren, die Ihre App
unterstützt. Gradle übergibt diese Informationen mithilfe der Methode
resourceConfigurations
Flavor-Format und die Option defaultConfig
. Das Build-System verhindert dann, dass Ressourcen
anderen nicht unterstützten Konfigurationen im APK erscheinen, wodurch die Größe des APK verringert wird. Weitere Informationen
finden Sie unter
Nicht verwendete Alternative entfernen
Ressourcen
Ressourcennutzung durch Bibliotheken minimieren
Wenn Sie eine Android-App entwickeln, verwenden Sie in der Regel externe Bibliotheken, um die Nutzerfreundlichkeit und Vielseitigkeit Ihrer App zu verbessern. Sie können zum Beispiel auf AndroidX verweisen. um die User Experience auf früheren Geräten zu verbessern. Alternativ können Sie Google Play-Dienste, die abgerufen werden sollen automatische Übersetzungen von Text in Ihrer App.
Wenn eine Bibliothek für einen Server oder Computer entwickelt wurde, kann sie viele Objekte und Methoden enthalten, die Ihre App nicht benötigt. Wenn Sie nur die Teile der Bibliothek einschließen möchten, die Ihre App benötigt, können Sie der Bibliothek, wenn Sie die Lizenz ändern können. Sie können auch eine Alternative verwenden, Bibliothek, mit der Sie Ihrer App bestimmte Funktionen hinzufügen können.
Decodierung animierter Bilder
In Android 12 (API-Level 31) wurde die NDKImageDecoder
API erweitert, um alle Frames und Timing-Daten aus Bildern zu decodieren, die die Dateiformate „animiertes GIF“ und „animiertes WebP“ verwenden.
Verwenden Sie ImageDecoder
anstelle von Drittanbieterbibliotheken, um
verringere die APK-Größe und nutze zukünftige
Updates in Bezug auf Sicherheit und Leistung.
Weitere Informationen zur ImageDecoder
API findest du unter API reference
und im Beispiel auf GitHub.
Nur bestimmte Dichten unterstützen
Android unterstützt verschiedene Bildschirmdichten, darunter:
ldpi
mdpi
tvdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
Android unterstützt zwar die vorherigen Punktdichten, Sie müssen die Rasterung zu jeder Dichte.
Wenn Sie wissen, dass nur ein kleiner Prozentsatz der Nutzer Geräte mit einer bestimmten Punktdichte besitzt, Überlegen Sie, ob Sie diese Dichten in Ihrer App bündeln müssen. Wenn Sie keine Ressourcen angeben für eine bestimmte Bildschirmdichte, skaliert Android automatisch vorhandene Ressourcen, die für andere Bildschirmdichten.
Wenn für Ihre App nur skalierte Bilder erforderlich sind, können Sie noch mehr Speicherplatz sparen, indem Sie in drawable-nodpi/
nur eine Variante eines Bildes verwenden. Wir empfehlen, mindestens eine xxhdpi
-Bildvariante in Ihre App aufzunehmen.
Weitere Informationen zu Bildschirmdichten finden Sie unter Bildschirmgrößen und -dichten:
Zeichbare Objekte verwenden
Für einige Bilder ist keine statische Bildressource erforderlich. Das Framework kann das Bild dynamisch zeichnen.
zur Laufzeit ausgeführt wird. Drawable
-Objekte (<shape>
in XML) können im APK nur sehr wenig Speicherplatz belegen. Außerdem muss XML Drawable
-Objekte erzeugen monochromatische Bilder, die den Material Design-Richtlinien entsprechen.
Ressourcen wiederverwenden
Sie können eine separate Ressource für Varianten eines Bildes einfügen, etwa für gefärbte, schattierte oder gedrehten Versionen desselben Bildes. Wir empfehlen jedoch, dieselben Ressourcen wiederzuverwenden und sie bei Bedarf zur Laufzeit anzupassen.
Android bietet mehrere Dienstprogramme, mit denen Sie die Farbe eines Assets ändern können. Sie können dazu die
Die Attribute android:tint
und tintMode
.
Sie können auch Ressourcen auslassen, die nur eine gedrehte Version einer anderen Ressource sind. Die folgenden Code-Snippet zeigt ein Beispiel für eine „Mag ich nicht“ indem wir auf den in der Mitte des Bildes und drehen Sie es um 180 Grad:
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_thumb_up" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" />
Aus Code rendern
Sie können die APK-Größe auch reduzieren, indem Sie die Bilder manuell rendern. Prozedurales Rendering Dadurch wird Speicherplatz freigegeben, da Sie keine Bilddatei mehr in Ihrer APK-Datei speichern.
PNG-Dateien bearbeiten
Mit dem aapt
-Tool können die Bildressourcen optimiert werden, die in res/drawable/
platziert sind
mit einer verlustfreien Komprimierung
während des Build-Prozesses. Das aapt
-Tool kann beispielsweise
Konvertieren Sie eine farbige PNG-Datei, die nicht mehr als 256 Farben erfordert, in eine 8-Bit-PNG-Datei mit einer Farbe.
Farbpalette. Dies führt zu einem Bild von gleicher Qualität, aber mit geringerem Speicherbedarf.
Für aapt
gelten die folgenden Einschränkungen:
- Das
aapt
-Tool verkleinert keine PNG-Dateien imasset/
Ordner. - Für Bilddateien dürfen maximal 256 Farben verwendet werden, damit das
aapt
-Tool optimiert werden kann . - Das Tool
aapt
kann PNG-Dateien, die bereits komprimiert sind, vergrößern. Um dies zu verhindern, Dazu können Sie das FlagisCrunchPngs
verwenden, um diesen Vorgang für PNG-Dateien zu deaktivieren:
PNG- und JPEG-Dateien komprimieren
Mit Tools wie pngcrush, pngquant oder zopflipng können Sie die Größe von PNG-Dateien reduzieren, ohne dass die Bildqualität darunter leidet. Mit allen diesen Tools lässt sich die Größe von PNG-Dateien reduzieren, ohne die wahrgenommene Bildqualität zu beeinträchtigen.
Das pngcrush
-Tool ist besonders effektiv. Dieses Tool durchläuft PNG-Filter und
zlib (Deflate), bei dem das Bild mit jeder Kombination aus Filtern und Parametern komprimiert wird.
Dann wird die Konfiguration ausgewählt, die die kleinste komprimierte Ausgabe ergibt.
Mit Tools wie packJPG und guetzli können Sie JPEG-Dateien komprimieren.
WebP-Dateiformat verwenden
Statt PNG- oder JPEG-Dateien können Sie auch die Methode WebP-Dateiformat für Ihre Bilder verwenden. WebP bietet eine verlustbehaftete Komprimierung und Transparenz wie JPG und PNG. als JPEG oder PNG.
Mit Android Studio können Sie vorhandene BMP-, JPG-, PNG- oder statische GIF-Bilder in das WebP-Format konvertieren. Weitere Informationen finden Sie unter WebP-Images erstellen.
Vektorgrafiken verwenden
Mit Vektorgrafiken können Sie geräteunabhängige Symbole und andere skalierbare Medien erstellen.
Mit diesen Grafiken können Sie die APK-Dateigröße erheblich reduzieren. Vektorbilder werden dargestellt in
Android als
VectorDrawable
Objekte. Mit einem VectorDrawable
-Objekt kann eine 100-Byte-Datei ein scharfes Bild generieren,
die Größe des Bildschirms.
Es dauert jedoch deutlich länger, bis das System
VectorDrawable
-Objekt enthält. Bei größeren Bildern dauert es noch länger, bis sie auf dem Bildschirm erscheinen.
Verwenden Sie diese Vektorgrafiken daher nur, wenn kleine Bilder angezeigt werden.
Weitere Informationen zum Arbeiten mit VectorDrawable
-Objekten findest du unter
Drawables.
Animierte Bilder mit Vektorgrafiken versehen
Verwenden Sie AnimationDrawable
nicht, um Frame-für-Frame-Animationen zu erstellen, da Sie dazu für jeden Frame der Animation eine separate Bitmapdatei angeben müssen, was die Größe Ihrer APK drastisch erhöht.
Verwenden Sie stattdessen AnimatedVectorDrawableCompat
, um animierte Vektorgrafiken zu erstellen.
Reduzierung von nativem Code und Java-Code
Mit den folgenden Methoden können Sie die Größe von Java und nativer Codebasis in Ihrem
Unnötigen generierten Code entfernen
Es ist wichtig, dass Sie den Grundriss jedes automatisch generierten Codes verstehen. Beispiel: viele Protokollpuffer-Tools eine übermäßige Anzahl von Methoden und Klassen generieren, wodurch sich die Größe deiner App verdreifachen.
Vermeiden Sie Aufzählungen.
Ein einzelnes Enum kann die Größe der Datei classes.dex
Ihrer App um etwa 1,0 bis 1,4 KB erhöhen. Diese
Für komplexe Systeme oder gemeinsam genutzte Bibliotheken können sich schnell Ergänzungen ansammeln. Verwenden Sie nach Möglichkeit die Anmerkung @IntDef
und die Code-Minimierung, um Enumerationen zu entfernen und in Ganzzahlen umzuwandeln. Bei dieser Typkonvertierung werden alle
Sicherheitsvorteile von Enums.
Größe nativer Binärdateien reduzieren
Wenn deine App nativen Code und das Android-NDK verwendet, kannst du auch die Größe des Release verringern Version Ihrer App durch Optimieren des Codes. Zwei nützliche Techniken sind das Entfernen von Debugging-Symbolen und ohne native Bibliotheken zu extrahieren.
Symbole zum Debuggen entfernen
Die Verwendung von Symbolen zum Debuggen ist sinnvoll, wenn sich Ihre App noch in der Entwicklung befindet und noch eine Fehlerbehebung erforderlich ist. Verwenden Sie
Das arm-eabi-strip
-Tool im Android-NDK, um unnötige Fehlerbehebung zu entfernen
aus nativen Bibliotheken. Anschließend können Sie den Release-Build kompilieren.
Native Bibliotheken nicht extrahieren
Beim Erstellen der Release-Version deiner App verpacke unkomprimierte .so
-Dateien im
APK nach Einstellung
useLegacyPackaging
in der build.gradle.kts
-Datei Ihrer App auf false
. Das Deaktivieren dieses Flags verhindert,
PackageManager
von
Kopieren von .so
-Dateien vom APK in das Dateisystem während der Installation Diese Methode sorgt dafür,
App-Updates kleiner machen.
Mehrere schlanke APKs verwalten
Ihr APK kann Inhalte enthalten, die Nutzer herunterladen, aber nie verwenden, z. B. zusätzliche Sprachressourcen oder Ressourcen für unterschiedliche Bildschirmdichten. Damit der Download für Ihre Nutzer möglichst klein ist, sollten Sie Ihre App mit Android App Bundles bei Google Play hochladen. Durch das Hochladen von App Bundles kann Google Google Play generiert und stellt optimierte APKs für die Gerätekonfiguration der einzelnen Nutzer bereit, sodass sie nur herunterladen den Code und die Ressourcen, die sie zum Ausführen Ihrer App benötigen. Sie müssen nicht mehrere APKs zur Unterstützung verschiedener Geräte bieten Nutzern kleinere, optimierte Downloads.
Wenn Sie Ihre App nicht bei Google Play veröffentlichen, können Sie sie in mehrere APKs aufteilen, durch Faktoren wie Bildschirmgröße oder GPU-Texturunterstützung.
Wenn ein Nutzer Ihre App herunterlädt, erhält sein Gerät das richtige APK basierend auf der
Funktionen und Einstellungen. So erhalten Geräte keine Assets für Funktionen, die sie nicht haben.
haben. Wenn ein Nutzer beispielsweise ein hdpi
-Gerät hat, benötigt er keine xxxhdpi
-Ressourcen, die Sie für Geräte mit höherer Pixeldichte einschließen könnten.
Weitere Informationen finden Sie unter Mehrere APKs erstellen und Unterstützung für mehrere APKs.