Gibt es eine einfache Möglichkeit, nicht verwendete Zeichenfolgen im Android-Projekt herauszufinden?

152

Ich habe ein riesiges Android-Projekt mit vielen Zeichenfolgen, die in deklariert sind strings.xml. Ich wollte nicht verwendete Zeichenfolgen entfernen strings.xml.

Gibt es eine einfache Möglichkeit, dies zu tun?

user556956
quelle

Antworten:

237

Auf Android Studio :

Menü -> Analysieren -> Inspektion nach Namen ausführen -> Nicht verwendete Ressourcen

Aktivieren Sie das Kontrollkästchen Dateimaske (n) und geben Sie es strings.xmlin das Textfeld ein.

Oded Breiner
quelle
2
Dann können Sie definieren Custom scope, wählen Sie Production classes-> app-> values, um nicht verwendete Zeichenfolgen, Farben zu finden ...
Jemshit Iskenderov
2
Mit SDK Tools 26.0.2 werden meine nicht verwendeten Zeichenfolgen nicht gefunden, während "Verwendungen suchen" keine Verwendung dieser Zeichenfolgen anzeigt (und dies gilt auch für die tatsächlich verwendeten Zeichenfolgen).
user905686
Übrigens, wenn eine Zeichenfolge tatsächlich verwendet wird (im Code dynamisch referenziert), können Sie Linter-Warnungen mittools:ignore="UnusedResources"
jakub.g
4
Dieser funktioniert nicht wie erwartet. Ich habe versucht, nicht verwendete Zeichenfolge hinzuzufügen und zu überprüfen, aber es ist nicht in der Lage, es zu identifizieren
chikka.anddev
Dies scheint kaputt zu sein, es dachte, ein paar meiner Saiten wären unbenutzt, aber ein schnelles "Finden von Verwendungen" fand Verwendung. Achtung.
Szaske
37

Hier ist eine andere Lösung, die ziemlich einfach ist. Gehen Sie im Android Studio-Menü zu

Umgestalten> Entfernen von nicht verwendeten Ressourcen ... .

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf Vorschau , um die nicht verwendeten Ressourcen anzuzeigen und sie selektiv zu entfernen.

Suragch
quelle
1
Dadurch wurden viele Ressourcen entfernt, die tatsächlich verwendet wurden. Musste eine Menge Sachen manuell wiederherstellen
stoefln
1
@stoefln, wenn Sie auf Vorschau klicken, können Sie manuell auswählen, was gelöscht und nicht gelöscht werden soll.
Suragch
1
Achten Sie darauf, dass "auch nicht verwendete @ id-Deklarationen löschen". Es löschte mich viele IDs, die mein Code tatsächlich verwendete (Kotlin Android Extension Plugin - das das Wiederherstellen von Ansichten aus Aktivitäten, Fragmenten und Ansichten ermöglicht)
Dan Alboteanu
28

In meinem Fall hat "Inspektion nach Namen ausführen" nicht funktioniert, obwohl ich "Nicht verwendete Ressourcen entfernen" verwendet habe.

Lösung:

  1. Öffnen Sie die Datei strings.xml
  2. Sekundärer Klick
  3. Refactor -> Nicht verwendete Ressourcen entfernen

Ich habe keine Ahnung, warum "Nicht verwendete Ressourcen entfernen" auf die eine, aber nicht auf die andere Weise funktioniert.

Cutiko
quelle
2
Sie können dies auch im Projektexplorer tun, das gewünschte Modul auswählen, dann mit der rechten Maustaste klicken und umgestalten> nicht verwendete Ressourcen entfernen, um alle Arten von Ressourcen wie nicht verwendete Drawables zu entfernen
FRL
22

Mit ADT 16 können Sie dies so einfach wie möglich tun. Aktualisieren Sie auf ADT 16 und verwenden Sie Android Lint . Es ist wirklich ein erstaunliches Werkzeug. Es kann alle nicht verwendeten Ressourcen (nicht nur Zeichenfolgen) und viele mehr finden. Von seiner offiziellen Seite:

Here are some examples of the types of errors that it looks for:

- Missing translations (and unused translations)
- Layout performance problems (all the issues the old layoutopt tool used to find, and more)
- Unused resources
- Inconsistent array sizes (when arrays are defined in multiple configurations)
- Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
- Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
- Usability problems (like not specifying an input type on a text field)
- Manifest errors
and many more.
Andrei Buneyeu
quelle
11
Ab ADT 20.0.2 findet Android Lint weder unbenutzte Strings noch behauptet es dies. Ich habe es gerade getestet, indem ich einen String mit einer völlig zufälligen ID hinzugefügt und dann Lint ausgeführt habe. Ich konnte die Antwort oben nicht abstimmen, weil ich nicht genug Ruf habe :(.
Frank Harper
Wie @FrankHarper sagte: vorher nicht. Wie Lord Flash sagte, tut es jetzt:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc
3

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 rechten 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
Dies ist nützlich, um Zeichenfolgen zu finden, die keine Übersetzung in der Standarddatei haben
ePeace
3

In Android Studio Drücken Sie

Strg + Alt + Umschalt + i

Wählen Sie -> Nicht verwendete Ressourcen.
Hier werden nicht verwendete nicht verwendete Zeichenfolgen und Symbole angezeigt.

Danke Happy Coding :)

Glücklicher Singh
quelle
3

So habe ich es mit Android 3.3 gemacht.

Checken Sie alle nicht gespeicherten Änderungen in Ihrem Repository ein.

  • Klicken Sie mit der rechten Maustaste auf das Modul Ihrer App -> Refactor -> Nicht verwendete Ressourcen entfernen -> Vorschau
  • Reduzieren Sie in der Refactoring-Vorschau beide Ansichten ("Zu löschende Elemente" und "Nicht verwendete Ressourcendeklarationen").
  • Klicken Sie mit der rechten Maustaste auf "Zu löschende Elemente" -> Ausschließen
  • Klicken Sie mit der rechten Maustaste auf "Nicht verwendete Ressourcendeklarationen" -> Ausschließen
  • Erweitern Sie nun "Nicht verwendete Ressourcendeklarationen" und suchen Sie darunter Ihre app-spezifische Zeichenfolge.xml (es würde mehrere Zeichenfolgen.xmls geben).
  • Klicken Sie mit der rechten Maustaste auf die Datei strings.xml -> Include
  • Refactor machen! Alle nicht verwendeten Zeichenfolgen aus der XML-Datei werden gelöscht!

Hinweis: Versuchen Sie, das Projekt zu erstellen. Wenn die Kompilierung fehlschlägt, wird diese string.xml höchstwahrscheinlich von einigen Layout- / Menü-xmls referenziert, die selbst nicht verwendet werden. So können diese Layout-XMLs auch manuell gelöscht werden!

Bauen und ausführen. Prüfung!

AAP
quelle
-1

Führen Sie dieses Skript im Stammverzeichnis Ihres Projekts aus.

für Ressourcendatei in `find res / values ​​/ *. xml`; machen
  für Stringname in `grep '. * / \ 1 / g'`; machen
    count1 = `grep -rc" R.string. $ {stringname} "src | egrep -v ': 0 $' | wc -l`
    count2 = `grep -rc" @string / $ {stringname} "res / layout | egrep -v ': 0 $' | wc -l`
    count3 = `grep -rc" @string / $ {stringname} "res / menu | egrep -v ': 0 $' | wc -l`
    count4 = `grep -rc" @string / $ {stringname} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
    count5 = `grep -rc" @string / $ {stringname} "res / xml | egrep -v ': 0 $' | wc -l`
    if [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; dann
      echo $ resourcefile: $ stringname
    fi
  getan
getan

für Ressourcennamen in `find res / drawable * -type f -name '*. ???'`; machen
  resource = `echo $ resourcename | xargs basename | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .drawable \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  count2 = `grep -rc" @drawable / $ {resource} "res / layout | egrep -v ': 0 $' | wc -l`
  count3 = `grep -rc" @drawable / $ {resource} "res / drawable * / *. xml | egrep -v ': 0 $' | wc -l`
  count4 = `grep -rc" @drawable / $ {resource} "res / menu | egrep -v ': 0 $' | wc -l`
  count5 = `grep -rc" @drawable / $ {resource} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
  if [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; dann
      echo $ resourcename
  fi
getan

für den Ressourcennamen in `find res / layout / *. xml`; machen
  resource = `echo $ resourcename | xargs basename | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  if [$ count1 -eq 0]; dann
      echo $ resourcename
  fi
getan

Es gibt mir diese Art von Ausgabe:

res / values ​​/ activity_strings.xml: activity_more
res / values ​​/ activity_strings.xml: activity_as_reply_to
res / values ​​/ db_strings.xml: sql_backlog_count
res / values ​​/ db_strings.xml: sql_backlog_update_last_resend
...
Carl D'Halluin
quelle
Cooler Ansatz, aber wird überprüft, ob der Ressourcenname nicht in Kommentaren oder Zeichenfolgen enthalten ist? Es sind einige Änderungen erforderlich, um auch mit der neuen Android Studio-Projektstruktur kompatibel zu sein.
Mohammad Jafar Mashhadi
-1

Nur für fehlende Übersetzung:

Klicken Sie mit InteliJ auf die Bedienfeldleiste Ihres InteliJ: "Analysieren"> "Inspektion nach Namen ausführen"> Geben Sie Folgendes ein: Unvollständige Übersetzung

sancho21
quelle