Supprimer toutes les ressources inutilisées d'un projet Android

386

Je veux supprimer toutes les mises en page, chaînes, tirages, couleurs, etc. inutilisés de mon répertoire res Android. Existe-t-il des outils qui me donneront une liste de fichiers et que je peux supprimer de mon référentiel et des éléments de fichiers spécifiques (par exemple, des entrées de chaîne inutilisées) qui ne sont plus utilisés?

Steve Prentice
la source

Réponses:

734

Vous pouvez facilement rechercher des ressources inutilisées dans Android Studio. Appuyez simplement sur CtrlAltShiftiet tapez " ressources inutilisées » (sans guillemets). Cela exécutera des peluches. Un moyen super facile d'exécuter des commandes lint (et d'autres choses de l'IDE).

OU

Dans le menu Android Studio > Refactoriser > Supprimer les ressources inutilisées ...

Sélectionnez les ressources que vous souhaitez supprimer. Vous pouvez exclure les ressources que vous souhaitez conserver en cliquant avec le bouton droit sur l'élément de ressource.

Utilisez Do Refactor pour supprimer toutes les ressources à la fois.

Mise à jour: utilisation OptionShiftipour mac

Bakua
la source
55
cmd + Alt + Shift pour mac
Jesus Dimrix
5
@MikeMilla Faites un clic droit sur les fichiers que vous souhaitez supprimer et cliquez sur l'option qui dit "Appliquer les corrections de charpie". Pour supprimer plusieurs fichiers en une seule fois, sélectionnez-les.
Saket Jain
28
Sachez que l'utilisation de cette approche supprimera également toute ressource utilisée par programme.
Prokash Sarkar
23
A cassé tout mon projet ... Pas une décision aussi sage
egorikem
7
Avec AS 3.0, cette fonctionnalité supprime certains fichiers de mise en page utilisés. Mieux vaut faire une sauvegarde ou git commit avant d'essayer.
StoneLam
99

Depuis ADT 16, vous pouvez utiliser Android Lint . C'est vraiment un outil incroyable.

Android Lint est un nouvel outil pour ADT 16 (et Tools 16) qui analyse les sources de projets Android à la recherche de bogues potentiels.

Voici quelques exemples des types d'erreurs qu'il recherche:

  • Traductions manquantes (et traductions inutilisées)
  • Problèmes de performances de mise en page (tous les problèmes rencontrés par l'ancien outil de mise en page, etc.)
  • Ressources inutilisées
  • Tailles de tableaux incohérentes (lorsque les tableaux sont définis dans plusieurs configurations)
  • Problèmes d'accessibilité et d'internationalisation (chaînes codées en dur, description de contenu manquante, etc.)
  • Problèmes d'icône (comme les densités manquantes, les icônes en double, les mauvaises tailles, etc.)
  • Problèmes de convivialité (comme ne pas spécifier de type d'entrée dans un champ de texte)
  • Erreurs manifestes et bien d'autres.

Cependant, il a quelques problèmes (je ne sais pas s'ils sont déjà corrigés) et si vous souhaitez supprimer des centaines de ressources supposément inutilisées, je recommanderais de compiler manuellement le projet plusieurs fois pendant la suppression des ressources pour être sûr que Lint n'a pas retirer quelque chose de nécessaire.

Andrei Buneyeu
la source
10
Je ne compterais pas trop sur ce que Lint propose comme étant des ressources inutilisées, surtout si vous faites beaucoup de recherches de ressources dans votre code plutôt qu'en XML. Dans ce cas, Lint trouvera beaucoup de ressources non utilisées alors qu'elles le sont réellement.
MrJre
61
Dans Android Studio, vous pouvez utiliser Analyze > Inspect Code...pour trouver un certain nombre de choses, y compris les déclarations et méthodes inutilisées .
Joshua Pinter
8
Un exemple, si vous souhaitez utiliser la ligne de commande:lint --check UnusedResources <project-path>
espinchi
41
Mais comment les supprimer?
Martin Pfeffer
1
Existe-t-il un moyen de supprimer tous Extra Translationsensemble / automatiquement?
rishabhmhjn
41

La prise en charge de l'ADT dans Eclipse étant terminée, nous devons utiliser Android Studio.

Dans Android Studio 2.0+, utilisez Refactor > Remove Unused Resources...

entrez la description de l'image ici

diète
la source
2
On dirait que cette façon supprime les ressources utilisées par programme
THZ
1
N'oubliez pas de passer en revue à l'étape suivante, sinon, certains fichiers utilisés sont également supprimés.
Karan Sharma
38

Le système de génération Gradle pour Android prend en charge le «rétrécissement des ressources»: la suppression automatique des ressources inutilisées, au moment de la génération, dans l'application packagée. En plus de supprimer les ressources de votre projet qui ne sont pas réellement nécessaires au moment de l'exécution, cela supprime également les ressources des bibliothèques dont vous dépendez si elles ne sont pas réellement nécessaires à votre application.

Pour l'activer, ajoutez la ligne shrinkResources true dans votre fichier gradle.

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

Consultez la documentation officielle ici,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking

Prokash Sarkar
la source
2
shrinkResources a besoin de proguard pour être activé. i hv problèmes à activer proguard :-(
Tixeon
shrinkResources n'est pris en compte que si minifyEnabled est vrai minifyEnabled true
Eldhopj
16

Nous ouvrons un outil open source qui supprime toutes les ressources inutilisées de votre projet Android en fonction de la sortie de peluches. Il peut être trouvé ici: https://github.com/KeepSafe/android-resource-remover

philipp
la source
comment j'utilise cela pour supprimer les ressources inutilisées de mon projet de studio Android.
Yamini
15

Attention si vous utilisez plusieurs saveurs lorsque vous utilisez de la charpie. La charpie peut donner de fausses ressources inutilisées selon la saveur que vous avez sélectionnée.

MRodrigues
la source
Comment éviter cela?
NickUnuchek
Jusqu'à présent, je n'ai pas trouvé de moyen de le faire. Sauf à appliquer de la charpie pour chaque saveur, puis à marquer les éléments inutilisés sur les deux saveurs.
MRodrigues
8

Dans Android Studio 2.0 et supérieur dans le menu, sélectionnez Refactor -> cliquez sur Supprimer les ressources inutilisées ...

(ou)

raccourci également disponible

Appuyez sur Ctlr + Alt + Maj + i une boîte de dialogue s'affichera, puis tapez inutilisé , vous trouverez un certain nombre d'options, sélectionnez et supprimez les ressources inutilisées

Ramesh R
la source
7

Dans Android Studio,

Analyser -> Exécuter l'inspection par nom

(Raccourci pour Mac shift + commande + option + i, Ctrl + Shift + A sous Windows / Linux).

Et tapez «ressources inutilisées».

De cette façon, vous pouvez supprimer les ressources inutilisées, les variables, les symboles, la localisation, les bibliothèques ..etc.

Sélectionnez l'inspection souhaitée dans la liste, puis sélectionnez l'étendue de l'inspection -> OK entrez la description de l'image ici

Lins Louis
la source
6

À l'attention des développeurs Android Wear : «Supprimer les ressources inutilisées» supprimera le fichier xml dans lequel vous déclarez le nom de la capacité (res / values ​​/ wear.xml) et le téléphone ne pourra pas se connecter à la montre. J'ai passé des heures à essayer de comprendre ce bogue dans mon application.

steliosf
la source
Et il supprime également les icônes rondes mipmap, par exemple.
artem
Correct. En général, 'Supprimer les ressources inutilisées' ne devrait pas être recommandé du tout car cela pourrait créer beaucoup de bogues introuvables.
steliosf
4

Pour vérifier string.xml.

C'est facile (au moins dans ma version d'Eclipse)

Dans Eclipse pour Android (j'ai la version v22.6.2-1085508)

  • Clic gauche sur le nom du projet dans "Explorateur de packages"
  • Sélectionnez "Outils Android".
  • Sélectionnez "Run Lint: Check for common Errors".

Maintenant, lorsque vous ouvrez strings.xml, vous verrez que la chaîne inutilisée est mise en surbrillance.

Vous pouvez résoudre d'autres problèmes potentiels.

Gabriel Klein
la source
+1 belle solution, mon pote. Il permet également d'exécuter des peluches pour les vérifications sélectionnées - exactement ce dont j'avais besoin .... (ps presque le même avec Android Studio: clic droit dans l'Explorateur de projets, sélectionnez Analyser , sélectionnez Inspecter le code ou Exécuter l'inspection par nom ): D
Trinimon
Cela n'aide pas beaucoup à supprimer ces chaînes inutilisées. Suggérez-vous de les supprimer manuellement comme auparavant?
Stan
"Lint" est vraiment un excellent moyen de "nettoyer votre projet". Vous devez toujours les supprimer manuellement, mais ils sont mis en évidence et vous voyez immédiatement qu'ils ne sont pas utilisés. C'est quelques minutes de travail pour un projet de taille moyenne. :)
Gabriel Klein
3

Peut-être utile Andround Unused Resources est une application Java qui analysera votre projet pour les ressources inutilisées. Les ressources inutilisées occupent inutilement de l'espace, augmentent le temps de génération et encombrent la liste de saisie semi-automatique de l'EDI.

Pour l'utiliser, assurez-vous que votre répertoire de travail est la racine de votre projet Android et exécutez:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/

user1632014
la source
1
où que je le mette, il ne cesse de dire que ce n'est pas la bonne racine du projet
kingston
2

Lorsque nous définissons les ressources de rétrécissement vrai à ce moment-là, nous pouvons également définir quelles ressources nous voulons conserver et lesquelles je n'ai pas ajouté de fichier xml dans le dossier res / raw nommé keep.xml

avant d'aller plus loin, générez une seule construction signée et vérifiez dans l'outil d'analyse apk qui montrera drawable-xhdpi-v4 a messenger_button_send_round_shadow.png que je veux supprimer pour ce test

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

en faisant messenger_ * tous les fichiers à partir du nom messenger dans le dossier dessinable seront supprimés ou autrement, j'ai défini un fichier spécifique à supprimer

de cette façon, vous pouvez supprimer les fichiers de la bibliothèque elle-même, vous pouvez également supprimer les mises en page par @ mise en page / nom de la mise en page si ce dessinable a été utilisé par la mise en page et ainsi ....

Parth Dave
la source
1

Il y a vraiment d'excellentes réponses ici suggérant de bons outils

Mais si vous avez l'intention de supprimer les png-drawables (ou autres fichiers image ), vous devriez également envisager de déplacer tous les dossiers drawable-xxxx de votre projet dans un dossier temporaire, puis de tout reconstruire et de jeter un œil à la construction. liste de messages qui vous dira lesquels sont manquants.

Cela peut être particulièrement utile si vous souhaitez obtenir un aperçu des ressources que vous utilisez efficacement et peut-être les remplacer par une police d'icône ou des ressources svg, éventuellement avec l'aide de la bibliothèque Android Iconics .

Daniel F
la source
cela prend du temps, mais je conviens que c'est aussi une solution. Je fais ça maintenant
Dika
0

Android Assets Viewer est conçu pour aider à inspecter visuellement les graphiques emballés (sous forme de dessins) dans votre .apk (vous pouvez également télécharger un fichier zip de votre dossier res si vous préférez):

http://www.cellebellum.net/AndroidAssetsViewer/

Donc, pour supprimer les ressources inutilisées, cela pourrait bien fonctionner en tandem avec les vérifications Lint pour vous assurer que tout ce qui devrait y être est. Il vous aide également à identifier quelques autres problèmes potentiels avec vos drawables: mauvais seau, mauvais graphique, etc.

straya
la source
0

Après avoir exécuté Lint dans Android Studio et trouvé toutes les ressources inutilisées, vous pouvez cliquer sur l'une d'entre elles dans l'onglet Inspection. Il fournit quelques détails sur le problème et quelques options pour le résoudre. L'un d'eux est Supprimer toutes les ressources inutilisées. La sélection de cette option supprime toutes les ressources inutilisées.

rohans310
la source