web-dev-qa-db-fra.com

"minifyEnabled" vs "shrinkResources" - quelle est la différence? et comment obtenir l'espace économisé?

Contexte

Selon la page Web "Documentation sur les ressources" d'Andriod ( here ), vous pouvez réduire la taille de l'application via le fichier build.gradle, à l'aide des lignes suivantes:

Android {
    ...

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

Et, ils disent que lors de son utilisation, cela vous indiquera également le montant économisé au cours du processus:

Lorsque vous activez shrinkResources, la génération de votre application doit afficher les résultats suivants:

... Ressources inutilisées supprimées: données de ressources binaires réduites de 2570 Ko à 1711 Ko: Suppression de 33%

Questions

Je n'arrive pas à trouver les réponses à ces questions:

  1. Lors de l'utilisation d'Android-Studio pour créer l'application signée, où puis-je trouver les informations sur la quantité enregistrée et les fichiers supprimés/modifiés?
  2. Qu'est-ce que "shrinkResources" fait exactement avec "minifyEnabled"? Et pourquoi "shrinkResources" dépend-il de "minifyEnabled"?
  3. Est-ce que l'une de ces options affecte la taille et/ou la qualité des fichiers image?
  4. Proguard n'est-il pas responsable de la réduction du code source? Je demande ceci parce qu'il dit "vous devez activer minifyEnabled afin d'activer la réduction de code"
59
android developer

Voyons voir

Lors de l'utilisation d'Android-Studio pour créer l'application signée, où puis-je trouver les informations sur la quantité enregistrée et les fichiers supprimés/modifiés?

Celles-ci seront dans le journal de bord. À l'intérieur Android studio, je crois, ils sont affichés dans la fenêtre Messages (à côté d'Android, Exécuter, Fenêtres TODO).

Qu'est-ce que "shrinkResources" fait exactement avec "minifyEnabled"? Et pourquoi "shrinkResources" dépend-il de "minifyEnabled"?

minify exécute ProGuard. shrink supprime les ressources que ProGuard a marquées comme étant inutilisées.

Est-ce que l'une de ces options affecte la taille et/ou la qualité des fichiers image?

Non!

Proguard n'est-il pas responsable de la réduction du code source? Je demande ceci parce qu'il dit "vous devez activer minifyEnabled afin d'activer la réduction de code"

ProGuard réduit CODE UNIQUEMENT ; shrinkResources c'est juste le contenu du dossier /res/. shrinkResources dépend de la sortie du journal de ProGuard à exécuter. ProGuard est celui qui analyse le code pour savoir ce qui n’est pas utilisé.

modifier:

Je viens de trouver un très beau billet de blog. CommonsWare l'a posté sur une autre question de stackOverlow: http://cyrilmottier.com/2014/08/26/putting-your-apks-on-diet/

cela explique parfaitement votre question suivante:

pourquoi l'un dépendrait de l'autre?

de la poste:

Proguard fonctionne du côté Java. Malheureusement, cela ne fonctionne pas du côté des ressources. Par conséquent, si une image mon_image dans res/drawable n’est pas utilisée, Proguard ne fait que supprimer sa référence dans la classe R mais conserve l'image associée en place.

cela signifie que shrinkResources ne compare que si un dessin est dans le dossier mais pas dans la classe R.

57
Budius

Les réponses aux questions 2 et 4 peuvent être trouvées dans cette vidéo de Android Dev Summit 2015 avec quelques autres informations utiles sur ce sujet.

Voici un aperçu des points discutés:

  • shrinkResources est pris en compte que si minifyEnabled est vrai

  • minifyEnabled réduit le code, tandis que shrinkResources réduit les ressources qui ne sont pas référencées à partir du code

  • Par défaut, shrinkResources s'exécute en mode safe. Si vous passez à strict, vous pouvez fournir tools:keep et tools:discard signale manuellement pour influer sur la réduction des ressources.

24
Florin
  • shrinkResources est utile pour réduire la taille de votre APK généré, en supprimant toute ressource inutilisée.
  • minifiedEnabled lance simplement Proguard, ce qui permet à Android plugin de conditionner l'APK sans code inutilisé, afin de le réduire)
1
Nicola Gallazzi