web-dev-qa-db-fra.com

Réduire la taille d'une application Android (apk)

Je voudrais maintenant publier 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ésinstallera l'application, cette déclaration est-elle 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 lorsqu'il est installé dans l'appareil, tel qu'il est affiché à partir des informations de l'application, il indique:

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 est-ce que je vois une telle augmentation de la taille de mon application, peut-elle être minimisée?

Et, j'utilise 4 bibliothèques (jars) dans mon projet qui sont en Android Private Libraries, mais ces bibliothèques ont également leur copie en dehors de ce dossier.

Est-il plus sûr de les supprimer, et les supprimer 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 d'apk, réduit, optimise et obscurcit notre code en supprimant le code non utilisé et en renommant les classes, les champs et les méthodes avec des noms sémantiquement obscurs. Le résultat est un fichier .apk de plus petite taille qui est plus difficile à effectuer du reverse engineering. 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 & 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.** { *; }
-keepattributes Signature

Alors, quelles lignes dois-je ajouter dans mon proguard-properties.txt afin qu'il puisse supprimer les références, classes, etc. inutilisées, afin de réduire la taille de l'apk?

Utilisation de AndroidUnusedResources.jar disponible à l’adresse https://code.google.com/p/Android-unused-resources/ recherche 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 aussi être utilisé après l'activation de proguard?

Vous pouvez également mentionner dans votre réponse tout ce qui manque et qui, selon vous, devrait être partagé. 
Merci d'avance...

39
Vivek Warde

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 
  • vecteur dessinable
  • Apk se scinde
  • Optimiser les images png
  • Supprimer les ressources inutilisées
  • Images de 9 patchs
  • 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 support recommandés
3
Fahim

Alors, pourquoi est-ce que je vois une telle augmentation de la taille de mon application? Peut-elle être minimisée?

Le fichier .apk

Un fichier .apk n'est pas magique du tout. 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, d'où une augmentation de la taille de l'application.

Quelques détails supplémentaires concernant la compilation

Qu'advient-il des fichiers .Java?

En premier lieu, ils sont normalement compilés par une implémentation JDK installée. Une fois compilés (en fichiers .class), l'outil dx du SDK Android compile ensuite ces classes Java "normales" dans Dalvik-Bytecode.

Ce code Java "spécial" est ensuite interprété par le DVM (Dalvik Virtual Machine), basé sur Apache Harmony, une application JRE à source ouverte.

Qu'advient-il des ressources que je mets dans le répertoire/asset-directory?

Android propose le répertoire/assets pour ajouter des fichiers binaires bruts (par exemple, une base de données SQLite). Les fichiers placés dans ce répertoire ne sont ni compilés ni optimisés.

Si vous placez vos fichiers dans ce répertoire, il s’agit du comportement que vous attendez d’Android.

Qu'advient-il des ressources que je mets dans le répertoire/res/raw-?

Tout comme le répertoire/assets, vous pouvez également placer ici des fichiers bruts binaires (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 ainsi que les autres fichiers XML (Layouts, Strings, etc.) sont stockés et "compilés" dans un format XML binaire. C'est une optimisation de la vitesse.

Vous avez donc compris pourquoi la taille de l'application est augmentée après l'installation.

Now Est-il plus sûr de les supprimer (bibliothèques Android) et de les supprimer peut aider à réduire la taille de l'APK?

Vous pouvez supprimer google-play-services.jar car il est requis uniquement dans l'environnement de développement . Il n'est pas requis dans l'environnement d'exécution. Vous devez installer l'utilisateur à partir du Play Store.

Arriver à Proguard :: Il supprimera les classes Java inutilisées et obstruera le code. Il ne supprimera pas les ressources inutilisées telles que layout xmls, drawables, etc. Mon avis est donc d'exécuter l'outil pour supprimer les ressources inutilisées.

Voici quelques astuces 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(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.

Je pense que cela est suffisant pour réduire la taille de l'application dans votre cas.

3
Ashwin N Bhanushali

Pour ceux d'entre vous qui réalisent des projets beaucoup plus petits, envisagez de supprimer toutes les bibliothèques compatibles. Il peut être préférable de créer plusieurs versions de votre application pour des versions spécifiques de l'API. J'ai vu une bulle d'application 47Kbyte à 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!).

2
Scott Biggs

Essayez d'activer http://developer.Android.com/tools/help/proguard.html , même sans obscurcissement. Cela supprimera le code Java inutilisé de vos dépendances ..__ Regardez si vous avez des dépendances inutiles - JAR que vous avez ajoutés mais que vous n'utilisez pas Vérifiez vos ressources pour les grandes images ou autres fichiers Vous voudrez peut-être changer leur format ou leur résolution, ou les supprimer s'ils ne sont pas utilisés.

1
Vaishali Sutariya

En règle générale, dans ProGuard, vous pouvez utiliser les éléments suivants pour réduire votre APK (il se trouve dans le fichier build.gradle de votre module):

...

Android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }

    ...

 }
 ...

Plus précisément, regardez minifyEnabled true et shrinkResources true:

minifyEnabled est responsable de l'obscurcissement et de la réduction de vos fichiers de code (par exemple, Java). Il s’agit de la fonctionnalité principale de ProGuard, qui permet de réduire votre APK et de rendre l’ingénierie inverse difficile.

shrinkResources est utilisé pour supprimer les fichiers de ressources inutilisés (tels que les images et autres éléments). Par exemple, si vous compilez 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 existe une bonne vidéo pour les développeurs Android à ce sujet ici .

1

Si vous compressez tous vos fichiers PNG, vous pouvez vous rendre sur https://tinypng.com/ .

Après avoir supprimé les importations de bibliothèque inutiles, par exemple, il n'est pas nécessaire d'importer la bibliothèque de support technique v4 si vous avez déjà importé la v7 pour appcompat.

Et enfin, après la fin de la procédure de signature d'apk, utilisez l'outil zipalign fourni avec Android-sdk pour plus de détails, reportez-vous à http://developer.Android.com/tools/help/zipalign.html .

C'est tout ce que je sais.

1
Deep Shah

Vous pouvez maintenant utiliser le vecteur drawable dans votre application pour supprimer plusieurs tirables pour différentes tailles d'écran et réduire la taille de l'APK ..__ voir: https://stackoverflow.com/a/33984100/5305331

1
Ka Developer

Vous pouvez essayer d’autres réponses et elles sont très bonnes, mais il existe une autre astuce pour réduire l’énorme quantité d’apk.
Nous utilisons plusieurs bibliothèques dans nos projets. certains d'entre eux ont été développés en langue autochtone (c) et d'autres pour une version spécifique de l'architecture.

Nous avons une 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"
        }
    }
}
0
Arash Hatami

Recompressez APK/Zip aussi haut, cela vous fera économiser 30% de plus que la version normale apk construite par Android SDK, utile si vous avez un grand nombre de fichiers texte mais pas si vous avez un grand nombre d'images.

0
user2642486

La raison de l'augmentation de la taille du fichier est que les fichiers APK sont des fichiers compressés. L'utilisation de Proguard peut 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. De mon expérience personnelle mais aussi de regarder Google Play. Il existe des milliers d'applications avec des millions de téléchargements pour lesquelles la taille du fichier dépasse largement les 2 Mo. En fait, il y en a beaucoup qui font environ 20MB. En d'autres termes, faites ce que vous pouvez pour le garder petit, mais ne craignez pas que cela ait un impact sur l'utilisation ou les téléchargements.

0
Jim

Tout d'abord regarder dans 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 appareils. Vous photoshops "Enregistrer pour le Web et les périphériques" pour optimiser les images. Vous pouvez réduire beaucoup de kbs de cela.
  2. Ensuite, voyez si vous pouvez remplacer les images par des dessins XML. Par exemple, les boutons et l’arrière-plan peuvent être créés avec XML
0
DanKodi

ProGuard applique par défaut sa réduction, son optimisation et son obscurcissement - c'est son objectif principal. Vous devez l'activer dans votre version Android en modifiant la ligne documentée de ProGuard dans votre project.properties. Il active ProGuard (avec ou sans optimisation) pour les versions validées avec Ant et Eclipse. Avec Ant, vous verrez la sortie de ProGuard dans le journal de construction.

Consultez 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 demande sera petite.

0
Eric Lafortune

Dans la plupart des cas, la taille de l'application dépend du fichier de ressources (images et autres éléments) que vous utilisez pour créer une application. Prenez toujours en compte les éléments suivants.

  • Essayez d’utiliser un minimum d’images (dans la plupart des cas, il n’est pas nécessaire d’ajouter des images dans le dossier Ldpi).
  • Utilisez des images vectorielles au lieu de placer des images pour tous les écrans Résolutions .Une manière consiste à utiliser SVG, 9 patch
  • Essayez d’utiliser XML drawable pour créer des images génériques telles que Carré, rectangle, bordures, etc. au lieu d’images .png Essayez quelques techniques de compression d’image.
  • Essayez d’extraire de grandes images d’API plutôt que de les placer dans le dossier res (À télécharger uniquement si nécessaire).

Importation de bibliothèque

  • Essayez de supprimer les bibliothèques non désirées lors de la création d'une version pour Appstore.
  • Si vous avez besoin d’une fonctionnalité particulière dans une bibliothèque, essayez d’extraire les fichiers de classe requis et de les utiliser plutôt que d’importer le fichier jar de la bibliothèque entière
  • Nettoyez votre classe en supprimant les importations non utilisées (bien que cela n'aura pas beaucoup d'effet sur la taille, mais que cela rendra les choses plus simples et plus simples.). -> organiser les importations
0
Abx

Je peux faire remarquer par expérience deux choses.

Si vous utilisez Eclipse pour créer un fichier apk, alors les ressources sont dupliquées (du moins, dans mon cas, cela s'est passé), vous pouvez essayer d'utiliser ant et build.xml pour créer l'apk et comparer la taille.

0
Uday Kumar