Réduire la taille de l’application Android (apk)

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…

Alors, pourquoi la taille de mon application augmente-t-elle considérablement? Peut-elle être réduite?

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.

Est-il plus sûr de les supprimer et leur suppression peut aider à réduire la taille de l’apk?

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!

Proguard

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.

Vous pouvez également mentionner dans votre réponse tout ce qui manque qui, selon vous, devrait être partagé?

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

  • Pouvez-vous déplacer des images sur le Web et les async à votre application?
  • Assurez-vous que vos fichiers sont complètement compressés autant que possible. Utilisez pngquant ou tinypng .
  • Vérifiez toute répétition dans les images . Vous pourrez peut-être utiliser 9-patch pour cela.
  • Vous pourriez être en mesure de créer vos propres tirables pour certaines images.
  • 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 !!

  • [EDIT 2] Dans l’Explorateur Windows , vérifiez la taille du dossier de votre dossier Res et de tout le dossier java . Si la taille de votre dossier Java est petite, tous vos efforts pour réduire la taille de l’APK devraient être ceux que je déclare ci-dessus.

Vous voudrez peut-être montrer quelques images, car cela nous permettrait de voir ce que vous traitez

MODIFIER

@ 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

  1. Libérez l’APK dans le Google Play Store après avoir apporté les correctifs recommandés
  2. Après un certain temps – une semaine, un mois, etc. – vous pouvez consulter les statistiques de votre application dans la console développeur Google Play .
  3. Recherchez les compartiments de taille d’écran ( drawable-mdpi, -hdpi, -xhdpi, -xxhdpi ) les moins utilisés! Vous pouvez supprimer ces seaux de votre application!

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.

EDIT 2

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 …

  • le dossier java
  • le dossier res

entrer la description de l'image ici

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!

Modifier 3

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.

  1. 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 } 
  2. 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! } 
  3. Maintenant comstackz et construisez votre projet.

  4. Vérifiez la nouvelle taille APK à votre APK actuel.

    • Ce sera le plus petit fichier de taille compressé possible avec votre code. Oui, votre programme ne fera rien, mais cela ne fait aucun doute. Vous vous souciez de la taille ici, et ce n’est qu’un test.
  5. Installez l’application sur votre téléphone et vérifiez la nouvelle taille de l’application à la taille de votre application actuelle

    • Ce sera le plus petit fichier de taille non compressé que vous pouvez obtenir avec votre code. Oui, votre programme ne fera rien, ce n’est qu’un test.

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

  • Proguard
  • dessin vectoriel
  • Apk se divise
  • Optimiser les images png
  • Supprimer les ressources inutilisées
  • 9 images patch
  • Compresser les images JPEG
  • Supprimer les informations de débogage
  • Éviter les duplications
  • Utilisez abondamment les peluches
  • Réutiliser les ressources chaque fois que possible
  • Formats de média recommandés

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.

  1. Si vous utilisez un fichier PSD pour obtenir les images de l’application, ces images risquent de ne pas être optimisées pour le Web et les périphériques. Vous faites des boutiques photos “Enregistrer pour le Web et les périphériques” pour optimiser les images. Vous pouvez réduire beaucoup de kbs de ceci.
  2. Ensuite, voyez si vous pouvez remplacer les images par des tableaux XML. Par exemple, les boutons et l’arrière-plan peuvent être réalisés à l’aide de XML

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.

  • Essayez d’utiliser des images minimales (dans la plupart des cas, il n’est pas nécessaire d’append des images dans le dossier Ldpi).
  • Utilisez des images vectorielles au lieu de placer des images pour toutes les résolutions d’écran. L’une des méthodes consiste à utiliser le patch SVG, 9
  • Essayez d’utiliser xml drawable pour créer des images génériques telles que des carrés, des cercles rectangulars, des bordures, etc. au lieu de .png images Essayez certaines techniques de compression d’images.
  • Essayez de récupérer des images volumineuses depuis Api plutôt que de les placer dans le dossier res. (Téléchargez-les uniquement si nécessaire).

Importations de bibliothèques

  • Essayez de supprimer les bibliothèques indésirables tout en créant une version pour appstore.
  • Si vous avez besoin d’une fonctionnalité particulière dans une bibliothèque, essayez d’extraire les fichiers de classe requirejs et utilisez-les plutôt que d’importer la bibliothèque entière.
  • Nettoyez votre classe en supprimant les importations inutilisées (bien que cela n’aura pas beaucoup d’effet sur la taille mais cela rendra les choses plus simples et plus simples). Dans eclipe, sélectionnez le dossier src-> rightclick-> source-> organiser les importations

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:

  • armeabi: Uncommon
  • armeabi-v7a: Common
  • arm64-v8a: Common
  • Mips: Rare
  • mips64: Rare
  • x86: Common
  • x86_64: Uncommon

Vous pouvez filtrer les architectures cibles et supprimer les options inutiles. par exemple :

 buildTypes { debug { ... } release { ... ndk { abiFilters "arm64-v8a", "armeabi-v7a", "x86" } } }