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...
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
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.
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!).
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.
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 .
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.
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
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:
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"
}
}
}
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.
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.
Tout d'abord regarder dans vos tirables.
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.
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.
Importation de bibliothèque
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.