2011-01-13 8 views

risposta

5

Date un'occhiata alla mia domanda: Find out if resource is used

Come nessuno aveva una vera risposta, ho programmato uno script per la ricerca di risorse non utilizzate, che include le stringhe, anche.

La speranza che ti aiuta.

-2

Eseguire questo script dalla radice del progetto.

 
for resourcefile in `find res/values/*.xml`; do 
    for stringname in `grep '.*/\1/g'`; do 
    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 ]; then 
     echo $resourcefile : $stringname 
    fi 
    done 
done 

for resourcename in `find res/drawable* -type f -name '*.???'`; do 
    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 ]; then 
     echo $resourcename 
    fi 
done 

for resourcename in `find res/layout/*.xml`; do 
    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 ]; then 
     echo $resourcename 
    fi 
done 

Mi dà questo tipo di uscita:

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

Un approccio interessante ma controlla se il nome della risorsa non è nei commenti o nelle stringhe? Ha bisogno di alcune modifiche per essere compatibile anche con la nuova struttura di progetto di Android Studio. –

22

Con ADT 16 lo si può fare il più semplice possibile. Effettuare l'aggiornamento a ADT 16 e utilizzare Android Lint. È davvero uno strumento 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. 
+10

A partire da ADT 20.0.2 Android Lint non trova stringhe inutilizzate, né rivendica. L'ho appena testato aggiungendo una stringa con un ID completamente casuale e poi eseguendo Lint. Non potrei votare la risposta sopra, perché non ho abbastanza reputazione :(. –

+4

Nella versione attuale (ADT 21.1) funziona piuttosto bene! –

+0

Come ha detto @FrankHarper: non lo ha fatto in precedenza. ora: 'Attenzione: la risorsa R.string .... sembra non essere utilizzata [UnusedResources] [lint] del testo' –

3

Per controllare string.xml.

E '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 "explorer Package"
  • Seleziona "Strumenti Android".
  • Selezionare "Esegui scarto: verifica errori comuni".

Ora quando si apre strings.xml, si noterà che la stringa non utilizzata è evidenziata.

È possibile risolvere altri potenziali problemi.

+0

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

164

Su Android Studio:

Menu ->Analyse ->Run ispezione per nome ->risorse inutilizzate

check maschera di file (s) casella di controllo e inserire strings.xml nel campo di testo.

+2

Quindi è possibile definire 'Ambito personalizzato', scegliendo' Classi di produzione' -> 'app' ->' valori' per trovare stringhe, colori non utilizzati ... –

+4

wow 479 elementi trovati.Tutto un clic per rimuoverli tutti? – dit

+0

Questo è bellissimo !! Grazie mille! –

-1

Per la traduzione manca solo:

Utilizzando InteliJ, fare clic sulla barra del pannello del vostro InteliJ: "Analyse"> "Esegui ispezione per nome"> Digitare: traduzione incompleta

16

Nel mio caso "Run Ispezione per nome "non funzionava, nonostante stavo usando" Rimuovi risorse inutilizzate ".

Soluzione:

  1. Aprire strings.xml
  2. click secondaria
  3. Refactor -> Rimuovi risorse inutilizzate

non ho idea perché "Rimuovere risorse inutilizzate" funziona a senso unico ma non l'altro.

+1

Puoi farlo anche nel project explorer, selezionare il modulo desiderato, quindi fare clic con il pulsante destro del mouse e refactoring> rimuove le risorse inutilizzate, rimuove qualsiasi tipo di risorsa come i drawable inutilizzati – FRL

2

In Android Studio Press

Ctlr + Alt + Maiusc + I

Seleziona -> risorse non utilizzate
E vi mostra le stringhe non utilizzati non utilizzati e le icone.

Ringraziamenti Happy una marcatura di :)

6

Ecco un'altra soluzione che è abbastanza facile. Nel menu di Android Studio vai a

Refactor> Rimuovi risorse inutilizzate ....

enter image description here

Clicca Anteprima per vedere quali sono le risorse inutilizzate sono e selettivamente rimuoverli.

+0

Ciò ha rimosso molte risorse effettivamente utilizzate. È stato necessario annullare manualmente un sacco di roba – stoefln

+1

@stoefln, se si fa clic su Anteprima, è possibile scegliere manualmente cosa eliminare e non eliminare. – Suragch

+0

sì, ne sono consapevole. Ancora questa funzione sembra essere buggy ... – stoefln

Problemi correlati