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?

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


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.


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


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


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


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.


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


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


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.


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.


+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/


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 ....


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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.