Je publierais maintenant ma première application sur Google Play Store. J’ai déjà compressé les images utilisées dans mon application. Et j’ai quelques questions concernant la taille de l’application.
Si la taille de l’application est inférieure à 2 Mo, il y a moins de chances que l’utilisateur désinstalle l’application. Est-ce que cette déclaration est vraie pour les applications appartenant au domaine de l’éducation?
Cependant, lorsque je vois mon fichier apk dans Windows, il affiche 3,10 Mo, mais quand il est installé sur le périphérique, tel qu’il est vu depuis l’application, il affiche:
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
Alors, pourquoi la taille de mon application augmente-t-elle considérablement? Peut-elle être réduite?
Et, j’utilise 4 bibliothèques (jars) dans mon projet qui sont dans Android Private Libraries
, mais ces bibliothèques ont aussi leur copie en dehors de ce dossier.
Est-il plus sûr de les supprimer et leur suppression peut aider à réduire la taille de l’apk?
J’ai également visité de nombreuses pages Web décrivant ce que Proguard
fait, je comprends vraiment comment Proguard réduit la taille de l’apk, réduit, optimise et masque notre code en supprimant le code inutilisé et en renommant les classes, les champs et les noms sémantiquement obscurs. Le résultat est un fichier .apk de plus petite taille, plus difficile à désosser. Mais je ne sais pas Comment devrait être mon proguard-project.txt
devrait ressembler?
J’utilise 4 bibliothèques dans mon application à savoir easyfacebookandroidsdk_2.3.jar
, android-support-v7-appcompat.jar
, google-play-services.jar
et android-support-v4.jar
.
Actuellement, mon proguard-properties.txt
ressemble à ceci et n’utilise pas 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.** { *; } -keepatsortingbutes Signature
Alors, quelles lignes dois-je append dans mon proguard-properties.txt
pour pouvoir supprimer les références, classes, etc. inutilisées afin de réduire la taille de l’apk?
L’utilisation d’AndroidUnusedResources.jar, disponible à l’ adresse https://code.google.com/p/android-unused-resources/, détecte les ressources inutilisées dans le projet Android.
Je pense que c’est la même chose que proguard a déjà fait? Ou devrait-il également être utilisé après avoir activé proguard?
Vous pouvez également mentionner dans votre réponse tout ce qui manque et que vous estimez devoir être partagé.
Merci d’avance…
Presque uniquement à cause de vos images de dossier res! Vous devriez avoir environ 4 copies de chaque image dans les dossiers drawable-mdpi, -hdpi, xhdpi. La seule différence est que toutes les tailles sont différentes.
Il y a des chances qu’il n’y ait pas plusieurs copies de ces fichiers jar! Juste une copie avec des liens vers elle!
Oui, ce que vous avez dit était juste au sujet de Proguard. Cependant, sachez que vous parlez de fichiers texte ici. Ils sont vraiment petits. Je veux dire vraiment petite taille (en kilo-octets). Votre problème est quelque chose dans la taille de mégaoctet (Mo). C’est des images !!!!
Répéter. C’est des images !!!!
L’activation de proguard permettra d’économiser un peu en termes de taille.
Oui, elles sont toutes plus importantes dans votre cas. S’il vous plaît lire et appliquer ces. Bonne chance!
Si un utilisateur trouve votre application utile, il ne le désinstallera pas; Cependant, il y a plusieurs choses que vous pouvez faire
async
à votre application? Autoriser les utilisateurs à déplacer des données sur une carte SD .
[EDIT] Après que l’application a été dans le Play Store pendant un moment , vérifiez la console du développeur et voyez quelle taille / densité d’écran est la moins utilisée. Supprimez ce dossier pouvant être tiré de votre application! Cela pourrait réduire la taille d’une bonne quantité! Mais, vérifiez mon assembly ci-dessous pour le contre de cette approche !!
Vous voudrez peut-être montrer quelques images, car cela nous permettrait de voir ce que vous traitez
@ Ashwin N Bhanushali A une bonne réponse pour la partie de la question à laquelle je n’ai pas répondu, mais il vous a dit essentiellement que vous ne pouviez rien faire à part ce que j’ai dit, plus une idée ou 2 de plus.
J’avais une autre idée basée sur l’une de ses idées qui serait encore meilleure , car Android Studio n’inclut plus le dossier drawable-ldpi dans le projet. Donc, il ne serait utile que si vous utilisez Eclipse, le mien se développe
Cela fonctionne parce que les images prennent beaucoup plus d’octets que les fichiers texte . Et tous ces tirables ont les mêmes images ( juste des tailles différentes ). Enlever les images des seaux moins utilisés peut faire gagner beaucoup de place !!
Notez que la suppression de ces compartiments de votre application signifiera que votre application devra faire plus de travail sur les téléphones qui utilisent les compartiments supprimés . L’application peut être plus lente pour ces utilisateurs ; Cependant, la taille de l’application peut être réduite davantage.
Les fichiers texte ne prennent presque rien. Jetez un œil dans le système de fichiers de votre projet!
Dans l’image ci-dessous. Vérifiez la taille de …
Dans votre cas, vous verrez que le dossier java est probablement très petit ( 10 à quelques centaines de Ko ); Cependant, vous verrez que le dossier res est vraiment volumineux ( plusieurs Mo! ).
Cela signifie que toute compression ou réduction de votre base de code sera très petite et ne vaut pas la peine!
Par conséquent, la meilleure façon de réduire votre taille APK est de suivre mes instructions ci-dessus!
Voici un test que vous pouvez faire tout de suite et voir le maximum absolu (plus plus) que des outils comme Proguard et AndroidUnusedResources.jar réduiront la taille du fichier APK!
Ce que vous devez faire, c’est supprimer TOUS les codes de votre projet, à l’exception des déclarations de classe. Faites la même chose pour les classes abstraites, les interfaces, les enums, etc. La structure de votre projet devrait restr la même et vous ne devriez pas utiliser de bibliothèques externes du tout.
Donc, vous aurez quelque chose comme ça pour toutes vos classes …
public class CustomClass { private Ssortingng variable; // List of variables public CustomClass() { ... } // List of constructors public getVariable() { ... } // List of Assessors public setVariable(Ssortingng val) { ... } // List of Mutators private Ssortingng helperMethods() { ... } // List of helper and other methods }
Vous devriez supprimer tout le code à l’intérieur des classes, interfaces, énumérations, etc. pour ressembler à ceci: Cependant, laissez toutes vos images seules !! …
public CustomClass { // Everything is removed!! No libraries used, nothing. Unless certain classes // require some methods like Activity. Those methods should be empty though! }
Maintenant comstackz et construisez votre projet.
Vérifiez la nouvelle taille APK à votre APK actuel.
Installez l’application sur votre téléphone et vérifiez la nouvelle taille de l’application à la taille de votre application actuelle
Si vous remarquez que les deux applications ont toujours la même taille, alors passer tout votre temps avec Proguard et AndroidUnusedResources.jar n’a pas de sens à ce stade. Ceci est un test pour voir où vous dépenseriez vos ressources personnelles dans la réduction de la taille de l’application.
Alors, pourquoi la taille de mon application augmente-t-elle considérablement? Peut-elle être réduite?
Le fichier .apk
Un fichier .apk n’est pas du tout magique. C’est juste un paquet de fichiers qui représentent le contenu d’une application Android. Si vous l’ouvrez dans un outil d’archivage (comme 7Zip), vous pouvez naviguer et extraire son contenu.
Maintenant, ce fichier apk est extrait lors de l’installation, il y a donc une augmentation de la taille de l’application.
Plus de détails concernant la compilation
Qu’advient-il des fichiers .java?
Eh bien, d’abord, ils sont normalement compilés par une implémentation JDK installée. Après avoir été compilés (dans des fichiers .class), l’outil dx-Android du SDK Android comstack ensuite ces classes java “normales” en Dalvik-Bytecode.
Ce code Java “spécial” est ensuite interprété par le DVM (Dalvik Virtual Machine), basé sur l’implémentation JRE opensource Apache Harmony.
Qu’advient-il des ressources que je mets dans le répertoire / asset?
Android propose le répertoire / assets pour append des fichiers bruts binarys (par exemple, une firebase database SQLite). Les fichiers placés dans ce répertoire ne sont ni compilés ni optimisés.
Si vous mettez vos fichiers dans ce répertoire, c’est le type de comportement que vous attendez d’Android.
Qu’advient-il des ressources que je mets dans le répertoire / res / raw?
Comme le répertoire / assets, vous pouvez également y placer des fichiers bruts binarys (ou autres) (par exemple, des fichiers HTML pour la page d’aide). Ces fichiers sont compilés / optimisés (si possible).
Qu’advient-il du manifeste et des autres fichiers XML?
Le manifeste Android et les autres fichiers XML (Layouts, Ssortingngs, etc.) sont stockés et “compilés” au format XML binary. Ceci est une optimisation de la vitesse.
Vous avez donc la réponse à la question de savoir pourquoi la taille de l’application est augmentée après l’installation.
Maintenant, est-il plus sûr de les supprimer (Android Libraries), et les supprimer peut aider à réduire la taille de l’apk?
Vous pouvez supprimer google-play-services.jar
car il est requirejs uniquement dans l’ environnement de développement, il n’est pas requirejs dans l’environnement d’exécution.Prompt utilisateur pour l’installer à partir du Play Store.
Venir à Proguard :: Il va supprimer les classes Java inutilisées et fera le code obfuscation.Il ne supprimera pas les ressources inutilisées comme les XML de mise en page, tirables, etc. Donc, mon avis est d’exécuter l’outil pour supprimer les ressources inutilisées.
Vous trouverez ci-dessous quelques conseils pour réduire la taille.
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(ie .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.
Je pense que cela suffit pour réduire la taille de l’application dans votre cas.
Voici les moyens de réduire la taille de l’application. En détail est expliqué dans le lien suivant.
https://medium.com/@fahimsakri/put-your-apks-on-diet-cc3f40843c84#.m860q8s1u
Pour ceux d’entre vous qui réalisent des projets beaucoup plus petits, envisagez de supprimer toutes les bibliothèques compatibles. Vous feriez peut-être mieux de créer plusieurs versions de votre application pour des versions spécifiques de l’API. J’ai vu une application d’une capacité de 47 Ko à 3 Mo simplement en ajoutant des bibliothèques de compatibilité.
Résumé : pour économiser de l’espace, évitez les bibliothèques inutiles, même celles fournies par Google (et incluses dans la plupart des modèles!).
Essayez d’activer http://developer.android.com/tools/help/proguard.html , même sans obscurcissement. Il supprimera le code Java inutilisé de vos dépendances. Vérifiez si vous avez des dépendances inutiles – des fichiers JAR que vous avez ajoutés, mais que vous n’utilisez pas Vérifiez vos ressources pour des images volumineuses ou d’autres fichiers. Vous souhaiterez peut-être modifier leur format ou leur résolution, ou les supprimer s’ils ne sont pas utilisés.
Généralement, dans ProGuard, vous pouvez utiliser les options suivantes pour réduire votre APK (ceci est dans le fichier build.gradle
votre module):
... android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } ... } ...
En particulier, regardez minifyEnabled true
et shrinkResources true
:
minifyEnabled
est responsable de masquer et de réduire vos fichiers de code (par exemple, Java). C’est la caractéristique principale de ProGuard, qui permet de réduire votre APK et de rendre difficile l’ingénierie inverse.
shrinkResources
est utilisé pour supprimer les fichiers de ressources inutilisés (tels que les images et autres actifs). Par exemple, si vous comstackz avec une bibliothèque Android, mais que vous n’utilisez pas certaines images de cette bibliothèque Android, elles ne seront pas incluses dans la version finale. Il y a une bonne vidéo de développeurs Android à ce sujet ici .
Maintenant, vous pouvez également utiliser le dessin vectoriel dans votre application pour supprimer plusieurs tirables pour différentes tailles d’écran et réduire la taille d’APK. voir: https://stackoverflow.com/a/33984100/5305331
C’est une option que vous compressez tous vos PNG pour que vous puissiez aller sur https://tinypng.com/ .
Après cela, supprimez les importations de bibliothèque inutiles, par exemple, il n’est pas nécessaire d’importer la bibliothèque de support v4 si vous avez déjà importé v7 pour appcompat.
Et enfin, après l’achèvement de la procédure de signature de l’outil apk use zipalign qui est livré avec android-sdk pour plus de détails, consultez http://developer.android.com/tools/help/zipalign.html .
C’est tout ce que je sais.
Tout d’abord, jetez un coup d’œil à vos tirables.
ProGuard applique par défaut sa réduction, son optimisation et son obscurcissement – c’est son objective principal. Vous devez l’activer dans votre version Android en modifiant la ligne ProGuard documentée dans votre project.properties
. Il active ProGuard (avec ou sans optimisation) pour les versions avec Ant et Eclipse. Avec Ant, vous verrez la sortie ProGuard dans le journal de génération.
Voir la documentation Android> Outils> ProGuard .
Vous devriez alors vérifier votre demande traitée. Vous aurez peut-être besoin d’options de maintenance supplémentaires, par exemple éventuellement pour les services Google Play. Moins vous en garderez, plus votre application sera petite.
La raison pour laquelle vous voyez la taille de fichier accrue est que les fichiers APK sont des fichiers compressés. L’utilisation de Proguard peut vous aider – voici une bonne ressource:
http://developer.sonymobile.com/2012/01/31/tips-for-reducing-apk-file-size/
Cependant, je peux vous assurer que vous pouvez obtenir des millions de téléchargements sans être sensible à la taille du fichier. Tant de mon expérience personnelle que de regarder Google Play. Il y a des milliers d’applications avec des millions de téléchargements où la taille du fichier dépasse largement 2 Mo. En fait, il y en a beaucoup qui sont autour de 20 Mo. En d’autres termes, faites ce que vous pouvez pour le garder petit, mais ne vous inquiétez pas du fait que cela aura un impact sur l’utilisation ou les téléchargements.
Dans la plupart des cas, la taille de l’application est propice au fichier de ressources (images et autres éléments) que vous utilisez pour créer une application.
Importations de bibliothèques
Il y a deux choses que je peux souligner par expérience.
Si vous utilisez eclipse pour créer un fichier apk, les ressources sont dupliquées (au moins dans mon cas), vous pouvez essayer d’utiliser ant et build.xml pour créer l’apk et comparer la taille. Examinez également les alias des ressources.
Re-compresse APK / ZIP aussi haut, il économisera 30% de plus que la version apk normale d’Android SDK, utile si un grand nombre de fichiers texte mais pas si grand nombre d’images.
Vous pouvez essayer une autre réponse et elles sont très bonnes, mais il existe une autre petite astuce pour réduire la quantité massive d’apk.
Nous utilisons de nombreuses bibliothèques dans nos projets. certains d’entre eux ont été développés en langue maternelle (c) et d’autres ont été développés pour une version spécifique de l’architecture.
Nous avons de l’architecture:
Uncommon
Common
Common
Rare
Rare
Common
Uncommon
Vous pouvez filtrer les architectures cibles et supprimer les options inutiles. par exemple :
buildTypes { debug { ... } release { ... ndk { abiFilters "arm64-v8a", "armeabi-v7a", "x86" } } }