2011-01-13 10 views

Odpowiedz

5

Spójrz na moje pytanie: Find out if resource is used

Ponieważ nikt nie miał prawdziwą odpowiedź, ja zaprogramowany skrypt, aby szukać niewykorzystanych zasobów, które zawiera ciągi, too.

Nadzieję, że pomaga.

-2

Uruchom ten skrypt z katalogu głównego projektu.

 
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 

To daje mi ten rodzaj wyjścia:

 
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

Fajne podejście, ale czy sprawdza, czy nazwa zasobu nie zawiera komentarzy ani ciągów znaków? Wymaga pewnych modyfikacji, aby były zgodne z nową strukturą projektów Android Studio. –

22

Z ADT 16 można zrobić to tak proste, jak to możliwe. Zaktualizuj do ADT 16 i użyj Android Lint. To naprawdę niesamowite narzędzie. Może znaleźć nieużywane zasoby (nie tylko łańcuchy) i wiele innych. Z jego oficjalnej strony:

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

Od ADT 20.0.2 Android Lint nie znajduje nieużywanych Stringsów, ani nie roszczeń. Właśnie przetestowałem to, dodając ciąg z całkowicie losowym identyfikatorem, a następnie uruchomiłem Lint. Nie mogłem odpowiedzieć na powyższą odpowiedź, ponieważ nie mam wystarczającej reputacji :( –

+4

W obecnej wersji (ADT 21.1) działa całkiem nieźle! –

+0

Jak powiedział @FrankHarper: to nie było wcześniej. robi teraz: 'Ostrzeżenie: Zasób R.string .... wydaje się być nieużywany [UnusedResources] [lint] jakiś tekst' –

3

Aby sprawdzić string.xml.

To proste (przynajmniej w mojej wersji Eclipse)

w Eclipse dla Android (mam wersję v22.6.2-1085508)

  • prawym przyciskiem myszy na nazwę projektu w "Explorer Package"
  • Wybierz "Narzędzia Android".
  • Wybierz "Run Lint: Check for common Errors".

Teraz po otwarciu pliku strings.xml zobaczysz, że niewykorzystany ciąg jest podświetlony.

Możesz naprawić inne potencjalne problemy.

+0

jest to przydatne aby znaleźć ciągi, które nie mają tłumaczenia w domyślnym pliku – ePeace

164

Na Android Studio:

Menu ->Analyse ->Run Inspection Imieniem ->Niewykorzystane zasoby

Sprawdź maska ​​pliku (s) wyboru i wstaw strings.xml w polu tekstowym.

+2

Następnie możesz zdefiniować 'Custom scope', wybierając' Production classes' -> 'app' ->' values', aby znaleźć nieużywane ciągi, kolory ... –

+4

wow Znaleziono 479 elementów Każdy sposób kliknięcia, aby je wszystkie usunąć – dit

+0

To jest piękne !! Wielkie dzięki! –

-1

Dla brakuje tylko tłumaczenie:

Korzystanie InteliJ, kliknij na pasku panelu swojego InteliJ: „Analyse”> „Run wglądu przez nazwa”> Wpisz: tłumaczenie Niepełna

16

W moim przypadku „Run Inspection by Name "nie działało, pomimo tego, że używałem" Usuń nieużywane zasoby ".

Rozwiązanie:

  1. Otwarte strings.xml
  2. Secondary kliknięcie
  3. Refactor -> Usuń niewykorzystane zasoby

nie mam pojęcia dlaczego "Usuń niewykorzystane zasoby" działa w jedną stronę ale nie inne.

+1

Możesz to zrobić również w eksploratorze projektu, wybierz odpowiedni moduł, a następnie kliknij prawym przyciskiem myszy i refactor> usuń nieużywane zasoby, usuń wszelkie zasoby, takie jak nieużywane rysunki. – FRL

2

W Android Studio Prasa

Ctlr + Alt + Shift + I

Select -> Dział Niewykorzystane
To pokazuje niewykorzystane nieużywane struny i ikony.

Dzięki Happy kodowania :)

6

Oto inne rozwiązanie, które jest dość łatwe. W menu Studio na Androida przejdź pod numer

Refactor> Usuń nieużywane zasoby ....

enter image description here

Kliknij Podgląd zobaczyć co niewykorzystane zasoby są i selektywnie je usunąć.

+0

To spowodowało usunięcie wielu zasobów, które zostały faktycznie użyte. Musiał ręcznie przywrócić wiele rzeczy – stoefln

+1

@stoefln, jeśli klikniesz Podgląd, możesz ręcznie wybrać, co usunąć i nie usuwać. – Suragch

+0

Tak, jestem tego świadomy. Mimo to ta funkcja wydaje się być błędna ... – stoefln

Powiązane problemy