Entfernen Sie alle nicht verwendeten Ressourcen aus einem Android-Projekt

386

Ich möchte alle nicht verwendeten Layouts, Zeichenfolgen, Zeichen, Farben usw. aus meinem Android-Res-Verzeichnis entfernen. Gibt es Tools, die mir eine Liste von Dateien geben und die ich aus meinem Repository entfernen kann, sowie Elemente in bestimmten Dateien (z. B. nicht verwendete Zeichenfolgeneinträge), die nicht mehr verwendet werden?

Steve Prentice
quelle

Antworten:

734

Sie können in Android Studio problemlos nach nicht verwendeten Ressourcen suchen. Drücken Sie einfach CtrlAltShiftiund geben Sie " nicht verwendete Ressourcen" ein " ein (ohne Anführungszeichen). Das wird Flusen ausführen. Super einfache Möglichkeit, Flusenbefehle (und andere Dinge aus der IDE) auszuführen.

ODER

In Android Studio Menü > Refactor > Nicht verwendete Ressourcen entfernen ...

Wählen Sie die Ressourcen aus, die Sie entfernen möchten. Sie können Ressourcen ausschließen, die Sie behalten möchten, indem Sie mit der rechten Maustaste auf das Ressourcenelement klicken.

Verwenden Sie Do Refactor , um alle Ressourcen gleichzeitig zu entfernen.

Update: Verwendung OptionShiftifür mac

Bakua
quelle
55
cmd + Alt + Shift für Mac
Jesus Dimrix
5
@MikeMilla Klicken Sie mit der rechten Maustaste auf die Dateien, die Sie löschen möchten, und klicken Sie auf die Option "Lint Fixes anwenden". Um mehrere Dateien auf einmal zu löschen, wählen Sie sie aus.
Saket Jain
28
Beachten Sie, dass bei Verwendung dieses Ansatzes auch alle Ressourcen entfernt werden, die programmgesteuert verwendet wurden.
Prokash Sarkar
23
Brach mein ganzes Projekt ... Nicht so ein kluger Schachzug
egorikem
7
Mit AS 3.0 entfernt diese Funktion einige verwendete Layoutdateien. Machen Sie besser ein Backup oder ein Git-Commit, bevor Sie dies versuchen.
StoneLam
99

Seit ADT 16 können Sie Android Lint verwenden . Es ist wirklich ein erstaunliches Werkzeug.

Android Lint ist ein neues Tool für ADT 16 (und Tools 16), das Android-Projektquellen auf mögliche Fehler überprüft.

Hier sind einige Beispiele für die Arten von Fehlern, nach denen gesucht wird:

  • Fehlende Übersetzungen (und nicht verwendete Übersetzungen)
  • Probleme mit der Layoutleistung (alle Probleme, die das alte Layoutopt-Tool gefunden hat, und mehr)
  • Nicht genutzte Ressourcen
  • Inkonsistente Arraygrößen (wenn Arrays in mehreren Konfigurationen definiert sind)
  • Zugänglichkeits- und Internationalisierungsprobleme (fest codierte Zeichenfolgen, fehlende Inhaltsbeschreibung usw.)
  • Symbolprobleme (wie fehlende Dichten, doppelte Symbole, falsche Größen usw.)
  • Usability-Probleme (z. B. keine Angabe eines Eingabetyps in einem Textfeld)
  • Offensichtliche Fehler und vieles mehr.

Es gibt jedoch einige Probleme (ich weiß nicht, ob sie bereits behoben sind) und wenn Sie Hunderte von vermeintlich nicht verwendeten Ressourcen löschen möchten, würde ich empfehlen, das Projekt während des Entfernens der Ressourcen mehrmals manuell zu kompilieren, um sicherzustellen, dass Lint dies nicht getan hat etwas entfernen, was benötigt wird.

Andrei Buneyeu
quelle
10
Ich würde mich nicht stark auf das verlassen, was Lint als ungenutzte Ressourcen vorschlägt, insbesondere wenn Sie viele Ressourcensuchen in Ihrem Code anstelle von XML durchführen. Lint wird in diesem Fall feststellen, dass viele Ressourcen nicht verwendet werden, während sie tatsächlich vorhanden sind.
MrJre
61
In Android Studio können Sie Analyze > Inspect Code...eine Reihe von Dingen finden, einschließlich nicht verwendeter Deklarationen und Methoden .
Joshua Pinter
8
Ein Beispiel, wenn Sie die Befehlszeile verwenden möchten:lint --check UnusedResources <project-path>
espinchi
41
Aber wie lösche ich sie?
Martin Pfeffer
1
Gibt es eine Möglichkeit, alle Extra Translationszusammen / automatisch zu löschen ?
Rishabhmhjn
41

Da die Unterstützung für ADT in Eclipse beendet ist, müssen wir Android Studio verwenden.

In Android Studio 2.0+ verwenden Refactor > Remove Unused Resources...

Geben Sie hier die Bildbeschreibung ein

Dieter
quelle
2
Scheint so, als würde auf diese Weise die programmgesteuert verwendeten Ressourcen entfernt
THZ
1
Vergessen Sie nicht, im nächsten Schritt zu überprüfen, da sonst einige verwendete Dateien ebenfalls gelöscht werden.
Karan Sharma
38

Das Gradle-Build-System für Android unterstützt das "Verkleinern von Ressourcen": das automatische Entfernen von Ressourcen, die zum Zeitpunkt der Erstellung in der gepackten App nicht verwendet werden. Dies entfernt nicht nur Ressourcen in Ihrem Projekt, die zur Laufzeit nicht benötigt werden, sondern auch Ressourcen aus Bibliotheken, von denen Sie abhängig sind, wenn sie von Ihrer Anwendung nicht tatsächlich benötigt werden.

Um dies zu aktivieren, fügen Sie die Zeile shrinkResources true in Ihre Gradle-Datei ein.

   android {
        ...

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

Überprüfen Sie die offizielle Dokumentation hier,

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

Prokash Sarkar
quelle
2
shrinkResources benötigen Proguard, um aktiviert zu werden. Ich habe Probleme beim Aktivieren von Proguard :-(
Tixeon
shrinkResources wird nur berücksichtigt, wenn minifyEnabled wahr ist minifyEnabled true
Eldhopj
16

Wir Open Source ein Tool, das alle nicht verwendeten Ressourcen in Ihrem Android-Projekt basierend auf der Flusenausgabe entfernt. Es kann hier gefunden werden: https://github.com/KeepSafe/android-resource-remover

philipp
quelle
Wie ich dies verwende, um nicht verwendete Ressourcen aus meinem Android Studio-Projekt zu entfernen.
Yamini
15

Seien Sie vorsichtig, wenn Sie beim Ausführen von Flusen mehrere Geschmacksrichtungen verwenden. Flusen können je nach ausgewähltem Geschmack zu falschen, nicht verwendeten Ressourcen führen.

MRodrigues
quelle
Wie vermeide ich das?
NickUnuchek
Bis jetzt habe ich keinen Weg gefunden, dies zu tun. Außer Flusen für jede Geschmacksrichtung laufen zu lassen und dann die Gegenstände zu markieren, die bei beiden Geschmacksrichtungen nicht verwendet wurden.
MRodrigues
8

Wählen Sie in Android Studio 2.0 und höher im Menü Refactor -> klicken Sie auf Unbenutzte Ressourcen entfernen ...

(oder)

Verknüpfung ebenfalls verfügbar

Drücken Sie Ctlr + Alt + Shift + i ein Dialogfeld apper wird, geben Sie dann ungenutzt , werden Sie einige Optionen finden wählen und ungenutzte Ressourcen entfernen

Ramesh R.
quelle
7

In Android Studio

Analysieren -> Inspektion nach Namen ausführen

(Verknüpfung für Mac Shift + Befehl + Option + i, Strg + Umschalt + A unter Windows / Linux).

Und geben Sie "nicht verwendete Ressourcen" ein.

Auf diese Weise können Sie nicht verwendete Ressourcen, Variablen, Symbole, Lokalisierung, Bibliotheken usw. entfernen.

Wählen Sie die gewünschte Inspektion aus der Liste aus und wählen Sie dann Inspektionsbereich -> OK Geben Sie hier die Bildbeschreibung ein

Lins Louis
quelle
6

Achtung Android Wear-Entwickler : "Nicht verwendete Ressourcen entfernen" löscht die XML-Datei, in der Sie den Funktionsnamen (res / values ​​/ wear.xml) deklarieren, und das Telefon kann keine Verbindung zur Uhr herstellen. Ich habe stundenlang versucht, diesen Fehler in meiner App herauszufinden.

steliosf
quelle
Außerdem werden beispielsweise runde Mipmap-Symbole entfernt.
Artem
Richtig. Im Allgemeinen sollte "Nicht verwendete Ressourcen entfernen" überhaupt nicht empfohlen werden, da dies zu vielen nicht nachvollziehbaren Fehlern führen kann.
Steliosf
4

So überprüfen Sie string.xml.

Es ist einfach (zumindest in meiner Version von Eclipse)

In Eclipse für Android (ich habe Version v22.6.2-1085508)

  • Klicken Sie mit der linken Maustaste auf den Projektnamen im "Paket-Explorer".
  • Wählen Sie "Android Tools".
  • Wählen Sie "Lint ausführen: Auf häufige Fehler prüfen".

Wenn Sie nun strings.xml öffnen, sehen Sie, dass nicht verwendete Zeichenfolgen hervorgehoben werden.

Sie können andere potenzielle Probleme beheben.

Gabriel Klein
quelle
+1 schöne Lösung, Kumpel. Es ermöglicht auch das Ausführen von Flusen für ausgewählte Prüfungen - genau das, was ich brauchte ... (ps fast das gleiche mit Android Studio: Klicken Sie mit der rechten Maustaste in den Projektexplorer, wählen Sie Analysieren , wählen Sie Code überprüfen oder Inspektion nach Namen
ausführen
Dies hilft nicht viel beim Entfernen dieser nicht verwendeten Zeichenfolgen. Schlagen Sie vor, sie wie zuvor manuell zu entfernen?
Stan
"Lint" ist wirklich eine hervorragende Möglichkeit, "Ihr Projekt zu bereinigen". Sie müssen sie noch manuell entfernen, aber sie werden hervorgehoben und Sie sehen sofort, dass sie nicht verwendet werden. Es sind ein paar Minuten Arbeit für ein mittelgroßes Projekt. :)
Gabriel Klein
3

Möglicherweise nützlich Andround Unused Resources ist eine Java-Anwendung, die Ihr Projekt nach nicht verwendeten Ressourcen durchsucht. Nicht verwendete Ressourcen beanspruchen unnötig Speicherplatz, verlängern die Erstellungszeit und überladen die Autocomplete-Liste der IDE.

Stellen Sie zur Verwendung sicher, dass Ihr Arbeitsverzeichnis das Stammverzeichnis Ihres Android-Projekts ist, und führen Sie Folgendes aus:

java -jar AndroidUnusedResources.jar

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

user1632014
quelle
1
Wo immer ich es hinstelle, heißt es immer wieder, dass dies nicht die richtige Projektwurzel ist
Kingston
2

Wenn wir Shrink-Ressourcen als true definieren, können wir auch definieren, welche Ressourcen wir behalten möchten und welche nicht. Ich habe keine XML-Datei im Ordner res / raw mit dem Namen keep.xml hinzugefügt

Bevor Sie fortfahren, generieren Sie einen einzelnen signierten Build und checken Sie das apk analyzer-Tool ein, das zeigt, dass drawable-xhdpi-v4 messenger_button_send_round_shadow.png hat, das ich für diesen Test entfernen möchte

<?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_*"  />

Wenn Sie messenger_ * ausführen, werden alle Dateien, die mit name messenger im zeichnbaren Ordner beginnen, entfernt, oder anders herum, wenn ich eine bestimmte Datei definiert habe, die entfernt werden soll

Auf diese Weise können Sie Dateien selbst aus der Bibliothek entfernen. Sie können Layouts auch nach @ layout / layout name entfernen, wenn dieses Zeichen vom Layout verwendet wurde und so weiter ....

Parth Dave
quelle
1

Hier finden Sie wirklich hervorragende Antworten, die auf gute Tools hinweisen

Wenn Sie jedoch beabsichtigen, png-drawables (oder andere Bilddateien ) zu entfernen , sollten Sie auch in Betracht ziehen, alle drawable-xxxx-Ordner aus Ihrem Projekt in einen temporären Ordner zu verschieben, dann alle neu zu erstellen und sich den Build anzusehen Nachrichtenliste, die Ihnen sagt, welche fehlen.

Dies kann besonders nützlich sein, wenn Sie sich einen Überblick darüber verschaffen möchten, welche Ressourcen Sie effektiv verwenden, und diese möglicherweise durch eine Symbolschriftart oder SVG-Ressourcen ersetzen möchten, möglicherweise mithilfe der Android Iconics- Bibliothek.

Daniel F.
quelle
Das ist zeitaufwändig, aber ich stimme zu, dass dies auch eine Lösung ist. Ich mache das gerade
Dika
0

Android Assets Viewer wurde entwickelt, um die in Ihrer APK gepackten Grafiken (als Drawables) visuell zu überprüfen (Sie können auch einfach eine Zip-Datei Ihres Res-Ordners hochladen, wenn Sie dies bevorzugen):

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

Wenn Sie also nicht verwendete Ressourcen entfernen, funktioniert dies möglicherweise gut zusammen mit den Lint-Überprüfungen, um sicherzustellen, dass alles vorhanden ist, was vorhanden sein sollte. Es hilft Ihnen auch dabei, einige andere potenzielle Probleme mit Ihren Drawables zu identifizieren: falscher Eimer, falsche Grafik usw.

streunend
quelle
0

Nachdem Sie Lint in Android Studio ausgeführt und alle nicht verwendeten Ressourcen gefunden haben, können Sie auf der Registerkarte Inspektion auf eine davon klicken. Es enthält einige Details zum Problem und einige Optionen zur Behebung des Problems. Eine davon ist Alle nicht verwendeten Ressourcen entfernen. Durch Auswahl dieser Option werden alle nicht verwendeten Ressourcen gelöscht.

rohans310
quelle