Nutzer laden oft keine Apps herunter, die zu groß erscheinen. Das gilt vor allem in Schwellenländern, in denen Geräte eine Verbindung zu 2G- und 3G-Netzen herstellen oder bei Tarifen mit Datenlimits arbeiten. 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 die kompilierten Ressourcen Ihrer App abrufen, die APK-Erstellung und -Anmeldung bei Google Play jedoch verschieben.
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.
<ph type="x-smartling-placeholder">APK-Struktur verstehen
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 einer Instanz spezifisch ist. Prozessor. 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 Paketerstellungstool extrahiert diese XML-Inhalte, kompiliert sie in Binärform und archiviert sie. Diese Inhalte enthalten Sprache Zeichenfolgen und Stilen sowie Pfaden zu Inhalten, die nicht direkt imresources.arsc
-Datei, z. B. Layoutdateien und Bilder. <ph type="x-smartling-placeholder">classes.dex
: enthält die Klassen, die im DEX-Dateiformat kompiliert wurden und von die virtuelle Dalvik- oder ART-Maschine.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 von 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 lint
-Tool – ein Tool zur Analyse von statischem Code
in Android Studio enthalten – erkennt Ressourcen im Ordner res/
, die Ihr Code
nicht auf ihn 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 automatisch
in Ihrem Namen Ressourcen entfernen, wenn Sie
shrinkResources
in Ihrem
build.gradle.kts
-Datei der App.
Kotlin
android { // Other settings. buildTypes { getByName("release") { minifyEnabled = true shrinkResources = true proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro") } } }
Cool
android { // Other settings. buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Aktivieren Sie die Codekomprimierung, um shrinkResources
zu verwenden. 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 (weitere Informationen unter 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
Bei der Entwicklung einer Android-App verwendest du normalerweise externe Bibliotheken, um die Nutzungsfreundlichkeit und Vielseitigkeit. 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 Desktop entwickelt wurde, kann sie viele Objekte und Methoden enthalten, die 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.
<ph type="x-smartling-placeholder">Decodierung animierter Bilder
In Android 12 (API-Level 31) hat das NDK
ImageDecoder
API wurde zum Decodieren erweitert
Alle Frames und Timing-Daten von Bildern, die das animierte GIF- und das animierte WebP-Dateiformat verwenden.
Verwenden Sie ImageDecoder
anstelle von Drittanbieterbibliotheken, um
verringere die APK-Größe und profitiere von zukünftigen
Updates in Bezug auf Sicherheit und Leistung.
Weitere Informationen zur ImageDecoder
API finden Sie in der
API reference
und die
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 ursprünglich für andere Bildschirmdichten.
Wenn Ihre App nur skalierte Bilder benötigt, können Sie noch mehr Platz sparen, indem Sie eine einzige Variante von
ein Bild in drawable-nodpi/
. Wir empfehlen, mindestens xxhdpi
anzugeben
Bildvariante in Ihrer App verwenden.
Weitere Informationen zu Bildschirmdichten finden Sie unter Bildschirmgrößen und -dichten:
Drawable-Objekte verwenden
Einige Images benötigen keine statische Image-Ressource. Das Framework kann das Bild dynamisch zeichnen.
zur Laufzeit ausgeführt wird. Drawable
Objekte – oder <shape>
in
XML – kann sehr viel Speicherplatz in Ihrer APK-Datei 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 Bilds einfügen, wie gefärbte, schattierte oder gedrehten Versionen desselben Bildes. Wir empfehlen jedoch, dieselben Ressourcen wiederzuverwenden, und zur Laufzeit nach Bedarf anpassen.
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, bei denen es sich lediglich um ein rotiertes Äquivalent einer anderen Ressource handelt. 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
aapt
-Tool kann PNG-Dateien, die bereits komprimiert sind, möglicherweise in die Höhe treiben. Um dies zu verhindern, Dazu können Sie das FlagisCrunchPngs
verwenden, um diesen Vorgang für PNG-Dateien zu deaktivieren:
Kotlin
buildTypes.all { isCrunchPngs = false }
Cool
buildTypes.all { isCrunchPngs = false }
PNG- und JPEG-Dateien komprimieren
Mit Tools wie pngcrush pngquant oder zopflipng. Alle diese Tools kann die Größe der PNG-Datei verringern und gleichzeitig die Wahrnehmung der Bildqualität beibehalten.
Das pngcrush
-Tool ist besonders effektiv. Dieses Tool durchläuft PNG-Filter und
zlib-Parameter (Deflate), bei dem das Bild mithilfe 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 den 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
Sie können Vektorgrafiken verwenden, um auflösungsunabhängige Symbole und andere skalierbare Medien zu erstellen.
Sie können diese Grafiken nutzen, um den Platzbedarf Ihres APK deutlich zu verringern. 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 die einzelnen Elemente
VectorDrawable
-Objekt enthält. Bei größeren Bildern dauert es noch länger, bis sie auf dem Bildschirm erscheinen.
Daher sollten Sie diese Vektorgrafiken nur für die Darstellung kleiner Bilder verwenden.
Weitere Informationen zum Arbeiten mit VectorDrawable
-Objekten findest du unter
Drawables:
Animierte Bilder mit Vektorgrafiken versehen
Nicht verwenden
AnimationDrawable
um Frame-für-Frame-Animationen zu erstellen, da Sie hierfür eine separate Bitmap
für jeden Frame der Animation, was die Größe Ihres APK drastisch erhöht.
Verwenden Sie stattdessen
<ph type="x-smartling-placeholder"></ph>
AnimatedVectorDrawableCompat
zum Erstellen
animierter Vektor
Drawables.
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.
Aufzählungen vermeiden
Eine einzelne Aufzählung kann der classes.dex
-Datei Ihrer App etwa 1,0 bis 1,4 KB hinzufügen. Diese
Für komplexe Systeme oder gemeinsam genutzte Bibliotheken können sich schnell Ergänzungen ansammeln. Wenn möglich, sollten Sie
mit der Annotation @IntDef
und der Code-Verkleinerung
um Aufzählungen zu entfernen und in Ganzzahlen umzuwandeln. Bei dieser Typkonvertierung werden alle
von enums aus.
Größe nativer Binärprogramme 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 aus dem Android-NDK, um unnötige Fehlerbehebungen zu entfernen
aus nativen Bibliotheken. Anschließend können Sie Ihren 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 enthält möglicherweise Inhalte, die Nutzer herunterladen, aber nie verwenden, z. B. zusätzliche Sprache oder pro Bildschirmdichte. Damit Ihre Nutzer möglichst wenig herunterladen können, laden Sie Ihre App hier hoch: Google Play mit Android App Bundles 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 xxxhdpi
nicht
Ressourcen, die Sie für Geräte mit Bildschirmdichten verwenden können.
Weitere Informationen finden Sie unter Erstellen mehrerer APKs und Unterstützung mehrerer APKs