Ich würde jetzt meine erste App im Google Play Store veröffentlichen. Ich habe bereits komprimierte Bilder in meiner App verwendet. Und ich habe einige Fragen zur App-Größe.
Wenn die Größe der App weniger als 2 MB beträgt, ist die Wahrscheinlichkeit geringer, dass der Benutzer die App deinstalliert. Ist diese Aussage für Apps im Bildungsbereich wahr?
Wenn ich meine apk-Datei in Windows sehe, werden jedoch 3,10 MB angezeigt. Wenn sie jedoch von App-Info aus auf dem Gerät installiert wird, wird Folgendes angezeigt:
Total............................8.68 MB
App..............................7.02 MB
USB storage app..................0.00 B
Data.............................1.66 MB (perhaps it is the size of sqlite db + ttf's)
SD card..........................0.00B
Warum sehe ich also so viel an Größe meiner App, kann sie minimiert werden?
Ich verwende in meinem Projekt 4 Bibliotheken (Gläser), die sich in Android Private Libraries
befinden, aber diese Bibliothek hat ihre Kopie auch außerhalb dieses Ordners.
Ist es sicherer, sie zu löschen, und wenn Sie sie löschen, kann dies dazu beitragen, die Größe der Apk zu verringern?
Ich habe auch viele Webseiten besucht, die beschreiben, was Proguard
tut. Ich verstehe wirklich, wie Proguard die Größe von Apk reduziert, es verkleinert, optimiert und verschleiert unseren Code, indem er nicht verwendeten Code entfernt und Klassen, Felder und Methoden mit semantisch unklaren Namen umbenennt. Das Ergebnis ist eine kleinere .apk-Datei, deren Reverse Engineering schwieriger ist. Aber ich weiß nicht, wie mein proguard-project.txt
aussehen soll?
Ich verwende 4 Bibliotheken in meiner App, nämlich easyfacebookandroidsdk_2.3.jar
, Android-support-v7-appcompat.jar
, google-play-services.jar
& Android-support-v4.jar
.
Derzeit sieht mein proguard-properties.txt
so aus und verwendet auch kein WebView
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-Android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.Android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keep class com.facebook.** { *; }
-keepattributes Signature
Welche Zeilen sollte ich also in meinen proguard-properties.txt
einfügen, damit nicht verwendete Verweise, Klassen usw. entfernt werden können, um die Größe der Apk zu verringern?
Die Verwendung von AndroidUnusedResources.jar unter https://code.google.com/p/Android-unused-resources/ findet ungenutzte Ressourcen in Android-Projekten.
Ich denke, das ist dasselbe, was Proguard bereits getan hat, oder sollte es auch verwendet werden, nachdem Proguard aktiviert wurde?
Sie können in Ihrer Antwort auch alles erwähnen, was fehlt, was Ihrer Meinung nach geteilt werden sollte.
Danke im Voraus...
Fast ausschließlich wegen Ihrer res Ordnerbilder! Sie sollten ungefähr 4 Kopien von jedem Bild in den Ordnern drawable-mdpi, -hdpi, xhdpi haben. Der einzige Unterschied ist, dass sie alle unterschiedliche Größen haben.
Möglicherweise gibt es nicht mehrere Kopien dieser JAR-Dateien! Nur eine Kopie mit Links dazu!
Ja, was Sie sagten, stimmte mit Proguard überein. Beachten Sie jedoch, dass Sie hier über Textdateien sprechen. Sie sind wirklich klein. Ich meine wirklich klein (in Kilobyte). Ihr Problem liegt in der Größe von Megabyte (MB). Das sind Bilder !!!!
Wiederholen. Das sind Bilder !!!!
Das Aktivieren von Proguard spart ein bisschen an Größe.
Ja, das ist in Ihrem Fall alles wichtiger. Bitte lesen Sie diese und wenden Sie sie an. Viel Glück!
Wenn ein Benutzer Ihre App hilfreich findet, wird sie nicht deinstalliert. jedoch es gibt mehrere Dinge, die Sie tun können
async
in Ihre App?Benutzern erlauben, Daten auf eine SD-Karte zu verschieben.
[BEARBEITEN] Nachdem die App für eine Weile im Play Store war, Überprüfen Sie in der Entwicklerkonsole, welche Bildschirmgröße/-dichte am wenigsten verwendet wird. Entferne diesen Ordner aus deiner App! Dies könnte die Größe erheblich reduzieren! Aber überprüfen Sie meine Bearbeitung unten für die Nachteile dieses Ansatzes!
Möglicherweise möchten Sie einige der Bilder anzeigen, damit wir sehen können, womit Sie es zu tun haben
@ Ashwin N Bhanushali hat eine großartige Antwort hier auf den Teil der Frage, den ich nicht beantwortet habe, aber er hat dir im Grunde gesagt, dass du nichts tun kannst, außer dem, was ich gesagt habe, plus einer Idee oder 2 Mehr.
Ich hatte eine andere Idee, die auf einer seiner Ideen basierte, die sogar noch besser wäre, weil Android Studio den Ordner drawable-ldpi nicht mehr in das Projekt einbezieht Es wäre also nur hilfreich, wenn Sie Eclipse verwenden, meins wird erweitert
Dies funktioniert, weil Bilder nehmen viel mehr Bytes als Textdateien . Und all diese Drawables haben die gleichen Bilder ( nur verschiedene Größen ). Das Entfernen der Bilder aus weniger verwendeten Eimern kann viel Platz sparen !!
Beachten Sie, dass das Entfernen dieser Eimer aus Ihrer App bedeutet, dass Ihre App mehr Arbeit auf den Telefonen leisten muss, die die entfernten Eimer verwenden . Die App ist für diese Benutzer möglicherweise langsamer ; Die Größe der App kann jedoch weiter reduziert werden.
Textdateien nehmen fast nichts ein. Schauen Sie sich das Dateisystem Ihres Projekts an!
Im Bild unten. Überprüfen Sie die Größe von ...
In Ihrem Fall werden Sie feststellen, dass der Ordner Java ist wahrscheinlich sehr klein ( 10 bis einige hundert KB ); Sie werden jedoch feststellen, dass der res-Ordner sehr groß ( mehrere MB! ) ist.
Das bedeutet, dass jede Komprimierung oder Reduzierung in Ihrer - Codebasis sehr klein und es nicht wert ist !!
Daher ist der beste Weg, um Ihre APK-Größe zu reduzieren, meine obigen Anweisungen zu befolgen!
Hier ist ein Test, den Sie sofort durchführen können, um das absolute Maximum (plus mehr) zu ermitteln, mit dem Tools wie Proguard und AndroidUnusedResources.jar die Größe der APK-Datei verringern !
Sie müssen nur DEN GESAMTEN Code aus Ihrem Projekt entfernen, mit Ausnahme der Klassendeklarationen. Machen Sie dasselbe für abstrakte Klassen, Interfaces, Enums usw. Ihre Projektstruktur sollte gleich bleiben und Sie sollten dann überhaupt keine externen Bibliotheken verwenden.
So etwas wirst du für alle deine Klassen haben ...
public class CustomClass {
private String variable; // List of variables
public CustomClass() { ... } // List of constructors
public getVariable() { ... } // List of Assessors
public setVariable(String val) { ... } // List of Mutators
private String helperMethods() { ... } // List of helper and other methods
}
Sie sollten den gesamten Code in den Klassen, Schnittstellen, Aufzählungen usw. entfernen, um wie folgt auszusehen. Lass jedoch alle deine Bilder in Ruhe !! ...
public CustomClass {
// Everything is removed!! No libraries used, nothing. Unless certain classes
// require some methods like Activity. Those methods should be empty though!
}
Kompilieren und erstellen Sie jetzt Ihr Projekt.
Überprüfen Sie die neue APK-Größe für Ihr aktuelles APK.
Installieren Sie die App auf Ihrem Telefon und überprüfen Sie die neue App-Größe auf Ihre aktuelle App-Größe
Wenn Sie feststellen, dass die beiden Apps immer noch ungefähr gleich groß sind, ist es in dieser Phase bedeutungslos, Ihre gesamte Zeit mit Proguard und AndroidUnusedResources.jar zu verbringen. Dies ist ein Test, um festzustellen, wo Sie Ihre persönlichen Ressourcen für die Reduzierung der App-Größe ausgeben würden.
Im Folgenden werden die Möglichkeiten beschrieben, die App-Größe zu reduzieren. Im Detail wird im folgenden Link erklärt.
https://medium.com/@fahimsakri/put-your-apks-on-diet-cc3f40843c84#.m860q8s1u
Also, warum sehe ich so viel an meiner App-Größe? Kann es minimiert werden?
Die .apk-Datei
Eine .apk-Datei ist überhaupt nicht magisch. Es handelt sich lediglich um ein Paket von Dateien, die den Inhalt einer Android-Anwendung darstellen. Wenn Sie es in einem Archiv-Tool (wie 7Zip) öffnen, können Sie den Inhalt durchsuchen und extrahieren.
Nun wird diese apk-Datei während der Installation extrahiert, wodurch die App größer wird.
Einige Details bezüglich der Zusammenstellung
Was passiert mit den .Java-Dateien?
Zunächst werden sie normalerweise von einer installierten JDK-Implementierung kompiliert. Nachdem sie (in .class-files) kompiliert wurden, kompiliert das dx-tool vom Android-SDK diese "normalen" Java-Klassen in Dalvik-Bytecode.
Dieser "spezielle" Java-Code wird dann von der DVM (Dalvik Virtual Machine) interpretiert, die auf der Open-Source-JRE-Implementierung Apache Harmony basiert.
Was passiert mit den Ressourcen, die ich in das/asset-Verzeichnis stecke?
Android bietet das/assets-Verzeichnis, um einige binäre Raw-Dateien (z. B. eine SQLite-Datenbank) hinzuzufügen. Dateien, die in diesem Verzeichnis abgelegt werden, werden nicht kompiliert oder optimiert.
Wenn Sie Ihre Dateien in diesem Verzeichnis ablegen, ist dies das Verhalten, das Sie von Android erwarten würden.
Was passiert mit den Ressourcen, die ich in das/res/raw-Verzeichnis stecke?
Wie das/assets-Verzeichnis können Sie hier auch binäre (oder andere) Rohdateien einfügen (z. B. HTML-Dateien für die Hilfeseite). Diese Dateien werden kompiliert/optimiert (wenn möglich).
Was passiert mit dem Manifest und den anderen XML-Dateien?
Das Android-Manifest und auch die anderen XML-Dateien (Layouts, Strings usw.) werden gespeichert und in ein binäres XML-Format "kompiliert". Dies ist eine Geschwindigkeitsoptimierung.
Sie haben also die Antwort bekommen, warum die App-Größe nach der Installation erhöht wird.
Now Ist es sicherer, sie zu löschen (Android-Bibliotheken), und durch das Löschen können Sie die Apk-Größe verringern?
Sie können google-play-services.jar
entfernen, da dies nur in der Entwicklungsumgebung erforderlich ist. In der Laufzeitumgebung ist dies nicht erforderlich. Sie können den Benutzer vom Play Store aus installieren.
Coming to Proguard :: Es wird die nicht verwendeten Java-Klassen entfernen und den Code verschleiern. Es werden nicht verwendete Ressourcen wie Layout-XMLs, Drawables usw. nicht entfernt. Meiner Meinung nach ist es, das Tool zum Entfernen nicht verwendeter Ressourcen auszuführen.
Im Folgenden finden Sie einige Tipps zum Verringern der Größe.
You can remove drawable-ldpi folder if you are using it.Since there are no more devices with ldpi screen resolution.
Reduce the use of image drawables(i.e .png or jpg files).Use xml drawables and 9-patch drawables.
Remove any debug info related code.
Avoid code duplication.Follow the principal of Don't Repeat yourself.
Ich denke, das reicht aus, um die App-Größe in Ihrem Fall zu reduzieren.
Wenn Sie viel kleinere Projekte durchführen, sollten Sie alle App-kompatiblen Bibliotheken entfernen. Möglicherweise ist es besser, mehrere Versionen Ihrer App für bestimmte Versionen der API zu erstellen. Ich habe eine 47-Kbyte-App-Sprechblase auf 3MByte gesehen, indem ich Kompatibilitätsbibliotheken hinzufügte.
Zusammenfassung : Um Speicherplatz zu sparen, vermeiden Sie unnötige Bibliotheken, auch solche, die von Google bereitgestellt werden (und in den meisten Vorlagen enthalten sind!).
Versuchen Sie, http://developer.Android.com/tools/help/proguard.html zu aktivieren, auch ohne Verschleierung. Es wird nicht verwendeten Java-Code aus Ihren Abhängigkeiten entfernen. Überprüfen Sie, ob nicht benötigte Abhängigkeiten vorhanden sind - JARs, die Sie hinzugefügt haben, jedoch nicht verwendet werden. Überprüfen Sie Ihre Ressourcen auf große Bilder oder andere Dateien. Möglicherweise möchten Sie das Format oder die Auflösung ändern oder entfernen, wenn sie nicht verwendet werden.
In ProGuard können Sie im Allgemeinen Folgendes verwenden, um Ihre APK zu verkleinern (dies befindet sich in der build.gradle
-Datei Ihres Moduls):
...
Android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
...
}
...
Schauen Sie sich insbesondere minifyEnabled true
und shrinkResources true
an:
minifyEnabled
ist für das Verschleiern und Verkleinern Ihrer Codedateien (z. B. Java) verantwortlich. Es ist die Hauptfunktion von ProGuard und hilft, Ihre APK zu verkleinern und das Reverse Engineering zu erschweren.
shrinkResources
wird verwendet, um nicht verwendete Ressourcendateien (z. B. Bilder und andere Elemente) zu entfernen. Wenn Sie beispielsweise mit einer Android-Bibliothek kompilieren, aber einige Bilder in dieser Android-Bibliothek nicht verwenden, werden diese nicht in die endgültige Erstellung einbezogen. Es gibt ein gutes Android-Entwickler-Video darüber hier .
Es ist eine Option, dass Sie alle Ihre PNGs komprimieren, um zu https://tinypng.com/ zu gelangen.
Entfernen Sie anschließend unnötige Bibliotheksimporte, beispielsweise müssen Sie die Unterstützungsbibliothek v4 nicht importieren, wenn Sie bereits v7 für appcompat importiert haben.
Und schließlich nach Abschluss des Signiervorgangs von apk verwenden Sie das mit Android-sdk gelieferte Zipalign-Tool. Weitere Informationen finden Sie unter http://developer.Android.com/tools/help/zipalign.html .
Das ist alles was ich weiß.
Jetzt können Sie in Ihrer App auch Vektoren zum Zeichnen verwenden, um mehrere Zeichen für verschiedene Bildschirmgrößen zu entfernen und die APK-Größe zu reduzieren. siehe: https://stackoverflow.com/a/33984100/5305331
Sie können andere Antworten ausprobieren und sie sind sehr gut, aber es gibt noch einen weiteren kleinen Trick, um die Menge an apk zu reduzieren.
Wir verwenden viele Bibliotheken in unseren Projekten. Einige von ihnen entwickelten sich in der Muttersprache (c) und einige entwickelten sich für eine bestimmte Version der Architektur.
Wir haben etwas Architektur:
Uncommon
Common
Common
Rare
Rare
Common
Uncommon
Sie können Zielarchitekturen filtern und unbrauchbare Optionen entfernen. zum Beispiel :
buildTypes {
debug {
...
}
release {
...
ndk {
abiFilters "arm64-v8a", "armeabi-v7a", "x86"
}
}
}
Komprimieren Sie APK/Zip erneut so hoch, dass Sie 30% mehr sparen als mit Android SDK. Dies ist nützlich, wenn eine große Anzahl von Textdateien vorhanden ist, nicht aber eine große Anzahl von Bildern.
Der Grund, warum Sie die erhöhte Dateigröße sehen, ist, dass APKs komprimierte Dateien sind. Die Verwendung von Proguard kann helfen - hier ist eine gute Ressource:
http://developer.sonymobile.com/2012/01/31/tips-for-reducing-apk-file-size/
Ich kann Ihnen jedoch versichern, dass Sie Millionen von Downloads erhalten können, ohne die Dateigröße zu berücksichtigen. Sowohl aus meiner persönlichen Erfahrung als auch aus Google Play. Es gibt Tausende von Apps mit Millionen von Downloads, bei denen die Dateigröße deutlich über 2 MB liegt. In der Tat gibt es viele, die etwa 20 MB groß sind. Mit anderen Worten, tun Sie, was Sie können, um es klein zu halten, aber machen Sie sich keine Sorgen, dass dies Auswirkungen auf die Nutzung oder den Download haben wird.
Schauen Sie sich zuerst Ihre Drawables an.
Check my blog Verschiedene Möglichkeiten, um die Apk-Größe zu reduzieren
Hauptpunkte sind:
Hinweis: Los, aktivieren Sie es! (* nur doppelt und dreifach prüfen, ob danach alles funktioniert)
ProGuard wendet standardmäßig die Verkleinerung, Optimierung und Verschleierung an - das ist der Hauptzweck. Sie müssen es in Ihrem Android-Build aktivieren, indem Sie die dokumentierte ProGuard-Zeile in Ihrem project.properties
bearbeiten. Es ermöglicht ProGuard (mit oder ohne Optimierung), Release-Builds mit Ant und Eclipse zu erstellen. Mit Ant sehen Sie die ProGuard-Ausgabe im Build-Protokoll.
Siehe die Android-Dokumentation> Tools> ProGuard .
Sie sollten dann Ihre bearbeitete Bewerbung überprüfen. Möglicherweise benötigen Sie zusätzliche Optionen für die Wartung, z. möglicherweise für Google Play Services. Je weniger Sie behalten können, desto kleiner wird Ihre Bewerbung sein.
In den meisten Fällen ist die Größe der App proportional zu der Ressourcendatei (Bilder und andere Elemente), die Sie zum Erstellen einer Anwendung verwenden. Berücksichtigen Sie dabei immer Folgendes.
Bibliotheksimporte
Es gibt zwei Dinge, auf die ich aus Erfahrung hinweisen kann.
Wenn Sie Eclipse verwenden, um eine apk-Datei zu erstellen, dann werden die Ressourcen dupliziert (zumindest in meinem Fall). Sie können versuchen, die apk mit ant und build.xml zu erstellen und die Größe zu vergleichen. Vergleichen Sie auch das Aliasing der Ressourcen.