Réduire la taille de son
APK
Jacques Giraudel (freelance)
jacquesgiraudel.com
Sommaire
▣ APK Analyzer
▣ Pas de magie
▣ Réduire
□ le code
□ les ressources
□ les images
□ les bibliothèques natives
▣ Sci...
APK Analyzer
Visualiser le contenu d’un APK
□ taille des différents éléments
□ visualisation du contenu des différents fic...
Pas de magie
▣ 1 APK
□ des classes transformées en dex
□ des xmls
□ des images
□ des bibliothèques natives
□ (des fichiers...
Réduire le code
▣ Classes compilées dans un fichier dex (projet et libs)
▣ Proguard
□ Optimisation
□ Shrinking (suppressio...
Réduire le code
▣ Redex (gratuit)
□ Complémentaire à proguard
□ Optimisations additionnelles (code du dex)
▣ Dexguard (pay...
Réduire les ressources
▣ Répertoire res et fichier arsc
▣ Shrinking Proguard : suppression ressources inutilisées
□ optimi...
Réduire les images
▣ Répertoires drawable et mipmap
▣ Compression
□ pngcruncher (outil par défaut)
□ ImageOptim/FileOptimi...
Réduction des bibliothèques natives
▣ Répertoire lib
▣ Optimisation code
□ code généré inutile
□ énumérations
□ symbole de...
Scinder l’APK par configuration
▣ Types séparables
□ taille et densité
□ architecture CPU
□ version SDK
□ jeu de feature
□...
Conclusion
▣ Gain possible de dizaines de Mo
▣ Outillage de base performant mais perfectible
▣ Amélioration récente au pac...
Merci!
Des questions?
Template CC
Prochain SlideShare
Chargement dans…5
×

Réduire la taille de son apk

40 vues

Publié le

Des conseils pour réduire la taille de son APK

Version annotée sur
https://docs.google.com/presentation/d/1C2PK_uVD2LIHcIksVa-dHS2iBob0K5H-xYcFr8cSeCk/edit?usp=sharing

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
40
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Téléchargement : première étape à passer pour l’utilisation de l’application

    Limite Store de 100 Mo (malgré tout extensible)
    Gros apk rédhibitoire (coût forfait données, durée de téléchargement, etc.)
  • APK Analyzer sorti avec Android Studio 2.2
  • Android Studio 2.2

    Build > Analyze APK

    Taille décompressée (disque) et taille compressée

    Limite 64k : force le passage en multidex (long à builder, autres problèmes)

    APK Analyzer
  • Fichiers additionnels : Assets (texture, videos), fichiers properties, textes, signatures

    Nettoyer et Mieux compresser

    Ne pas réutiliser de compresseur par dessus l’APK (risque de ralentir les algos de MAJ du Play Store)

    Non recommandé APK lui-même
  • Proguard : Outil de sécurité

    Optimisation : dont suppression paramètres inutilisées

    Shrinking

    Proguard
  • Redex outil facebook / complémentaire à proguard (ordre 25%)

    Dexguard : version avancée et payante de proguard, meilleure performance (léger)

    Redex

    Dexguard (voir également Présentation Eric Lafortune DroidCon NYC 2016 ou antérieure comme celle-ci)
  • arsc : fichiers res/values

    Shrinking des ressources
  • pngcruncher : outil par défaut de aapt, analyse filtre png et paramètres de déflation pour trouver la meilleure configuration
    ImageOptim/FileOptimizer : temps / multiple passe pour trouver une meilleure configuration / résultat aléatoire (peut-être même supérieur à la taille de départ) -> difficile à automatiser

    Format webp : compression sans perte plus forte que PNG (30%), non utilisable < 15, avec perte jusqu’à la 16, ok >= 17, plus long à charger
    Format vectoriel : SVG/PSD (support limité), 1 image toute densité, plus long à charger à l’exécution (-> petites tailles <200x200)
    Difficile à utiliser / bien se poser la question

    Rendu depuis le code : drawable (shape), réutilisation tint/rotation/shadow, 9-patch, images dessinées dynamiquement

    Références optimisations images (Webp, etc.) :
    leaner apks with custom asset minification
    official advices (old version)
  • Conseils Google

    Article Realm sur l’optimisation de la compilation
  • Splits d’APK

    Configurer les Splits d’APK

    Plugin Jenkins pour automatiser le delivery sur le Store (support des splits d’apk)
  • Améliorations récentes

    Références en vrac :
    Série d’article d’un Googler sur la réduction d’APK
    Utiliser proguard pour supprimer des classes inutiles d’une lib
    Outil appt
  • Images APK Analyzer tirés de la doc Android (CC 2.5)
    Image XML de graphiqastock
    Image paysage et ciseaux CC Attribution 3.0 unported
  • Réduire la taille de son apk

    1. 1. Réduire la taille de son APK Jacques Giraudel (freelance) jacquesgiraudel.com
    2. 2. Sommaire ▣ APK Analyzer ▣ Pas de magie ▣ Réduire □ le code □ les ressources □ les images □ les bibliothèques natives ▣ Scinder l’APK par configuration (APK Split)
    3. 3. APK Analyzer Visualiser le contenu d’un APK □ taille des différents éléments □ visualisation du contenu des différents fichiers compilés (dex, ressources) □ comptage de méthodes
    4. 4. Pas de magie ▣ 1 APK □ des classes transformées en dex □ des xmls □ des images □ des bibliothèques natives □ (des fichiers additionnels) ▣ Jouer sur chaque ensemble □ non recommandé sur l’APK lui-même
    5. 5. Réduire le code ▣ Classes compilées dans un fichier dex (projet et libs) ▣ Proguard □ Optimisation □ Shrinking (suppression code mort) □ Minification android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.pro' } } }
    6. 6. Réduire le code ▣ Redex (gratuit) □ Complémentaire à proguard □ Optimisations additionnelles (code du dex) ▣ Dexguard (payant) □ Version avancée de proguard ▣ Amélioration de la vitesse d’exécution
    7. 7. Réduire les ressources ▣ Répertoire res et fichier arsc ▣ Shrinking Proguard : suppression ressources inutilisées □ optimisation avec Dexguard ▣ Suppression des langues inutilisées android { defaultConfig { ... resConfigs "en", "fr" } }
    8. 8. Réduire les images ▣ Répertoires drawable et mipmap ▣ Compression □ pngcruncher (outil par défaut) □ ImageOptim/FileOptimizer (désactiver pngcruncher) ▣ Format d’image □ Webp □ Vectoriel (SVG via VectorDrawable) ▣ Rendu depuis le code
    9. 9. Réduction des bibliothèques natives ▣ Répertoire lib ▣ Optimisation code □ code généré inutile □ énumérations □ symbole de debug ▣ Optimisation compilation □ optimisation groupée (vs par unité de compilation) □ suppression code mort
    10. 10. Scinder l’APK par configuration ▣ Types séparables □ taille et densité □ architecture CPU □ version SDK □ jeu de feature □ version OpenGL android { ... splits { abi { // Split par ABI (architcture CPU) enable true // Active le split reset() // Permet le Split de l’APK include "x86", "armeabi-v7a", "mips" // Liste les ABI à splitter } } }
    11. 11. Conclusion ▣ Gain possible de dizaines de Mo ▣ Outillage de base performant mais perfectible ▣ Amélioration récente au packaging (AS 2.2) □ taille apk □ delta de MAJ □ temps d’installation (v2 de la signature)
    12. 12. Merci! Des questions? Template CC

    ×