Esiste un modo semplice per scoprire stringhe inutilizzate nel progetto Android?


152

Ho un enorme progetto Android con molte stringhe dichiarate in strings.xml. Volevo rimuovere le stringhe inutilizzate strings.xml.

C'è un modo semplice per farlo?

Risposte:


239

Su Android Studio :

Menu -> Analizza -> Esegui ispezione per nome -> Risorse non utilizzate

Selezionare la casella Maschera / e file e inserirla strings.xmlnel campo di testo.


2
Quindi puoi definire Custom scope, scegliendo Production classes-> app-> valuesper trovare stringhe, colori inutilizzati ...
Jemshit Iskenderov

2
Con SDK Tools 26.0.2 questo non trova le mie stringhe inutilizzate mentre "Trova utilizzi" non ne mostra alcun utilizzo (e lo fa per quelli effettivamente utilizzati).
user905686,

A proposito, quando viene effettivamente utilizzata una stringa (referenziata dinamicamente nel codice), è possibile eliminare gli avvisi di tools:ignore="UnusedResources"
linter

4
questo non funziona come previsto. Ho provato con l'aggiunta di stringa inutilizzata e ispeziona, ma non è in grado di identificarlo
chikka.anddev

Questo sembra rotto, pensava che un sacco di mie corde fossero inutilizzate, ma un rapido "trova usi" trovò utile. Stai attento.
szaske,

37

Ecco un'altra soluzione abbastanza semplice. Nel menu di Android Studio vai a

Refactor> Rimuovi risorse inutilizzate ... .

inserisci qui la descrizione dell'immagine

Fare clic su Anteprima per vedere quali sono le risorse non utilizzate e rimuoverle selettivamente.


1
Ciò ha rimosso molte risorse che sono state effettivamente utilizzate. Ho dovuto ripristinare manualmente un sacco di roba
stoefln

1
@stoefln, se fai clic su Anteprima, puoi scegliere manualmente cosa eliminare e non eliminare.
Suragch,

1
fare attenzione a "Elimina anche le dichiarazioni @ id inutilizzate". Mi ha eliminato un sacco di ID che il mio codice stava effettivamente utilizzando (plug-in di estensione Android Kotlin - che consentirà il recupero di visualizzazioni da attività, frammenti e visualizzazioni)
Dan Alboteanu,

28

Nel mio caso "Esegui ispezione per nome" non ha funzionato, nonostante il fatto che stavo usando "Rimuovi risorse non utilizzate".

Soluzione:

  1. Apri strings.xml
  2. Clic secondario
  3. Refactor -> Rimuovi risorse non utilizzate

Non ho idea del perché "Rimuovi risorse non utilizzate" funzioni in un modo ma non nell'altro.


2
Puoi farlo anche nell'esploratore del progetto, selezionare il modulo desiderato, quindi fare clic con il tasto destro e refactoring> rimuovere le risorse non utilizzate, rimuovere qualsiasi tipo di risorsa come i drawable non utilizzati
FRL

22

Con ADT 16 puoi farlo nel modo più semplice possibile. Aggiorna ad ADT 16 e usa Android Lint . È uno strumento davvero straordinario. Può trovare tutte le risorse inutilizzate (non solo stringhe) e molte altre. Dal suo sito ufficiale:

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.

11
A partire da ADT 20.0.2 Android Lint non trova stringhe inutilizzate, né pretende di farlo. Ho appena provato aggiungendo una stringa con un ID completamente casuale e quindi eseguendo Lint. Non ho potuto votare la risposta sopra in basso, perché non ho abbastanza reputazione :(.
Frank Harper

Come ha detto @FrankHarper: non è stato in precedenza. Come disse Lord Flash, ora lo fa:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc,

3

Per controllare string.xml.

È facile (almeno nella mia versione di Eclipse)

In Eclipse per Android (ho la versione v22.6.2-1085508)

  • Fare clic destro sul nome del progetto in "Esplora pacchetti"
  • Seleziona "Strumenti Android".
  • Seleziona "Esegui Lint: verifica errori comuni".

Ora quando apri strings.xml, vedrai che la stringa non utilizzata è evidenziata.

Puoi risolvere altri potenziali problemi.


questo è utile per trovare stringhe che non hanno una traduzione nel file predefinito
ePeace il

3

In Android Studio Stampa

CTLR + Alt + Maiusc + i

Seleziona -> Risorse
non utilizzate Mostra le stringhe e le icone non utilizzate.

Grazie Buona codifica :)


3

Ecco come l'ho fatto con Android 3.3.

Controlla eventuali modifiche non salvate nel tuo repository.

  • Fai clic con il pulsante destro del mouse sul modulo della tua app -> Refactor -> Rimuovi risorse non utilizzate -> Anteprima
  • Nell'anteprima del refactoring, comprimi entrambe le viste ("Articoli da eliminare" e "Dichiarazioni sulle risorse non utilizzate")
  • Fare clic con il tasto destro del mouse su "Elementi da eliminare" -> Escludi
  • Fare clic con il tasto destro del mouse su "Dichiarazioni sulle risorse non utilizzate" -> Escludi
  • Ora espandi le "Dichiarazioni sulle risorse inutilizzate" e in quel punto individua la tua app strings.xml specifica (ci sarebbero più stringhe.xmls)
  • Fare clic con il tasto destro del mouse su strings.xml -> Includi
  • Rifattore! Tutte le stringhe non utilizzate dal file xml vengono eliminate!

Nota: prova a creare il progetto. Se la compilazione fallisce, è molto probabile che questi strings.xml vengano richiamati da alcuni layout / menu xmls, che essi stessi non vengono utilizzati. Quindi questi xmls di layout possono anche essere eliminati manualmente!

Costruisci ed esegui. Test!


-1

Esegui questo script dalla radice del tuo progetto.

per file di risorse in "trova res / valori / *. xml"; fare
  per stringname in `grep '. * / \ 1 / g'`; fare
    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`
    se [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; poi
      echo $ resourcefile: $ stringname
    fi
  fatto
fatto

per resourcename in `find res / drawable * -type f -name '*. ???'`; fare
  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`
  se [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; poi
      echo $ resourcename
  fi
fatto

per resourcename in `find res / layout / *. xml`; fare
  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]; poi
      echo $ resourcename
  fi
fatto

Mi dà questo tipo di output:

res / valori / activity_strings.xml: activity_more
res / valori / activity_strings.xml: activity_as_reply_to
res / valori / db_strings.xml: sql_backlog_count
res / valori / db_strings.xml: sql_backlog_update_last_resend
...

Approccio interessante ma verifica se il nome della risorsa non è nei commenti o nelle stringhe? Ha bisogno di alcune modifiche per essere compatibile anche con la nuova struttura del progetto Android Studio.
Mohammad Jafar Mashhadi l'

-1

Solo per traduzione mancante:

Utilizzando InteliJ, fai clic sulla barra del pannello di InteliJ: "Analizza"> "Esegui ispezione per nome"> Digita: traduzione incompleta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.