Usuń wszystkie nieużywane zasoby z projektu Android


386

Chcę usunąć wszystkie nieużywane układy, ciągi, rysunki, kolory itp. Z mojego katalogu res Androida. Czy są jakieś narzędzia, które dadzą mi listę plików i które mogę usunąć z mojego repozytorium i elementów w określonych plikach (np. Nieużywane wpisy ciągu), które nie są już używane?

Odpowiedzi:


734

Możesz łatwo wyszukiwać nieużywane zasoby z Android Studio. Wystarczy nacisnąć CtrlAltShiftii wpisać „ nieużywane zasoby ” (bez cudzysłowów). To wykona strzęp. Super prosty sposób na uruchamianie poleceń lint (i innych rzeczy z IDE).

LUB

W menu Android Studio > Refaktoryzuj > Usuń nieużywane zasoby ...

Wybierz zasoby, które chcesz usunąć. Możesz wykluczyć zasoby, które chcesz zachować, klikając element zasobu prawym przyciskiem myszy.

Użyj Do Refactor, aby usunąć wszystkie zasoby naraz.

Aktualizacja: użyj OptionShiftidla systemu Mac


55
cmd + Alt + Shift dla mac
Jesus Dimrix

5
@MikeMilla Kliknij prawym przyciskiem myszy pliki, które chcesz usunąć, a następnie kliknij opcję „Zastosuj poprawki kłaczków”. Aby usunąć wiele plików za jednym razem, wybierz je.
Saket Jain,

28
Należy pamiętać, że zastosowanie tego podejścia spowoduje również usunięcie wszelkich zasobów, które zostały użyte programowo.
Prokash Sarkar

23
Zepsuł cały mój projekt ... Niezbyt mądry ruch
egorikem

7
W AS 3.0 ta funkcja usuwa niektóre używane pliki układu. Lepiej wykonaj kopię zapasową lub polecenie git przed wypróbowaniem tego.
StoneLam

99

Od wersji ADT 16 można używać systemu Android Lint . To naprawdę niesamowite narzędzie.

Android Lint to nowe narzędzie dla ADT 16 (i Tools 16), które skanuje źródła projektów Androida pod kątem potencjalnych błędów.

Oto kilka przykładów rodzajów błędów, których szuka:

  • Brakujące tłumaczenia (i nieużywane tłumaczenia)
  • Problemy z wydajnością układu (wszystkie problemy, których szukało stare narzędzieoptopt, i więcej)
  • Niewykorzystane zasoby
  • Niespójne rozmiary tablic (gdy tablice są zdefiniowane w wielu konfiguracjach)
  • Problemy z dostępnością i internacjonalizacją (ciągi zakodowane, brakująca treść Opis itp.)
  • Problemy z ikonami (takie jak brakujące zagęszczenia, zduplikowane ikony, niewłaściwe rozmiary itp.)
  • Problemy z użytecznością (np. Brak określenia typu danych wejściowych w polu tekstowym)
  • Widoczne błędy i wiele innych.

Ma jednak pewne problemy (nie wiem, czy zostały już naprawione) i jeśli chcesz usunąć setki rzekomo nieużywanych zasobów, zalecam kilkukrotne ręczne skompilowanie projektu podczas usuwania zasobów, aby upewnić się, że Lint nie usuń coś potrzebnego.


10
Nie polegałbym w dużej mierze na tym, co Lint proponuje jako nieużywane zasoby, szczególnie jeśli wykonujesz wiele wyszukiwań zasobów w kodzie zamiast w xml. W tym przypadku Lint znajdzie wiele zasobów, które nie zostaną wykorzystane, podczas gdy faktycznie są.
MrJre

61
W Android Studio możesz Analyze > Inspect Code...znaleźć wiele rzeczy, w tym nieużywane deklaracje i metody .
Joshua Pinter

8
Przykład, jeśli chcesz użyć wiersza poleceń:lint --check UnusedResources <project-path>
espinchi

41
Ale jak je usunąć?
Martin Pfeffer,

1
Czy istnieje sposób, aby usunąć wszystkie Extra Translationsrazem / automatycznie?
rishabhmhjn

41

Ponieważ obsługa ADT w Eclipse zakończyła się, musimy korzystać z Android Studio.

W systemie Android Studio 2.0+ Refactor > Remove Unused Resources...

wprowadź opis zdjęcia tutaj


2
Wygląda na to, że w ten sposób usuwa się zasoby wykorzystywane programowo
THZ

1
Nie zapomnij przejrzeć w następnym kroku, w przeciwnym razie niektóre używane pliki zostaną również usunięte.
Karan Sharma

38

System kompilacji Gradle dla Androida obsługuje „zmniejszanie zasobów”: automatyczne usuwanie zasobów, które podczas kompilacji nie są używane w pakiecie aplikacji. Oprócz usuwania zasobów w projekcie, które w rzeczywistości nie są potrzebne w środowisku wykonawczym, usuwa to również zasoby z bibliotek, w zależności od tego, czy aplikacja nie jest faktycznie potrzebna.

Aby to włączyć, dodaj linijkę shrinkResources true w swoim pliku stopni.

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

Sprawdź oficjalną dokumentację tutaj,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking


2
shrinkResources wymaga włączenia proguard. I hv problemy z włączeniem proguard :-(
Tixeon

shrinkResources jest brany pod uwagę tylko wtedy, gdy jest prawdą minifyEnabled true
minifyEnabled


15

Uważaj, jeśli używasz wielu smaków podczas uruchamiania szarpnięć. Lint może dawać fałszywe niewykorzystane zasoby w zależności od wybranego smaku.


Jak tego uniknąć?
NickUnuchek

Do tej pory nie znalazłem sposobu na zrobienie tego. Z wyjątkiem biegania kłaczków dla każdego smaku, a następnie oznaczania produktów nieużywanych w obu smakach.
MRodrigues

8

W Android Studio 2.0 i nowszych w menu wybierz Refactor -> kliknij Usuń nieużywane zasoby ...

(lub)

skrót również dostępny

Naciśnij Ctlr + Alt + Shift + i jedno okno dialogowe pojawi się, a następnie wpisz nieużywane , znajdziesz liczbę opcji wybierz i usuń nieużywane zasoby


7

W Android Studio

Analizuj -> Uruchom inspekcję według nazwy

(Skrót do Maca Shift + Command + opcja + i, Ctrl + Shift + A w systemie Windows / Linux).

I wpisz „nieużywane zasoby”.

W ten sposób możesz usunąć nieużywane zasoby, zmienne, symbole, lokalizację, biblioteki ... itp.

Wybierz żądaną kontrolę z listy, a następnie wybierz zakres kontroli -> OK wprowadź opis zdjęcia tutaj


6

Uwaga programiści Android Wear : „Usuń nieużywane zasoby” usunie plik xml, w którym zadeklarujesz nazwę funkcji (res / values ​​/ wear.xml), a telefon nie będzie mógł połączyć się z zegarkiem. Spędziłem godziny próbując znaleźć ten błąd w mojej aplikacji.


A także usuwa na przykład okrągłe ikony mipmap.
artem

Poprawny. Ogólnie rzecz biorąc, „Usuń nieużywane zasoby” nie powinno być w ogóle zalecane, ponieważ może to spowodować wiele niewykrywalnych błędów.
steliosf

4

Aby sprawdzić string.xml.

To proste (przynajmniej w mojej wersji Eclipse)

W Eclipse na Androida (Mam wersję v22.6.2-1085508)

  • Kliknij lewym przyciskiem myszy nazwę projektu w „Eksploratorze pakietów”
  • Wybierz „Narzędzia Android”.
  • Wybierz „Uruchom Lint: sprawdź typowe błędy”.

Teraz, gdy otworzysz plik strings.xml, zobaczysz, że nieużywany ciąg znaków jest podświetlony.

Możesz naprawić inne potencjalne problemy.


+1 fajne rozwiązanie, kolego. Pozwala także na uruchamianie linków dla wybranych kontroli - dokładnie tego, czego potrzebowałem .... (ps prawie tak samo z Android Studio: kliknij prawym przyciskiem myszy w Eksploratorze projektów, wybierz Analizuj , wybierz Sprawdź kod lub Uruchom inspekcję według nazwy ): D
Trinimon

To nie pomaga w usuwaniu nieużywanych ciągów. Czy sugerujesz, aby usunąć je ręcznie jak poprzednio?
Stan

„Lint” to naprawdę doskonały sposób na „oczyszczenie projektu”. Nadal musisz je usunąć ręcznie, ale są podświetlone i od razu widać, że nie są używane. To kilka minut pracy na projekt średniej wielkości. :)
Gabriel Klein

3

Może przydatny Andround Unused Resources to aplikacja Java, która skanuje projekt w poszukiwaniu nieużywanych zasobów. Niewykorzystane zasoby niepotrzebnie zajmują miejsce, wydłużają czas kompilacji i zaśmiecają listę autouzupełniania IDE.

Aby z niego skorzystać, upewnij się, że katalog roboczy jest katalogiem głównym projektu Android i uruchom:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/


1
gdziekolwiek to mówię, ciągle mówi, że nie jest to właściwy projekt
Kingston,

2

Kiedy zdefiniujemy prawdę zmniejszania zasobów, możemy również określić, które zasoby chcemy zachować, a które nie. Dodałem plik xml do folderu res / raw o nazwie keep.xml

zanim przejdziesz dalej, wygeneruj pojedynczą podpisaną kompilację i sprawdź w narzędziu analizatora apk, które pokaże drawable-xhdpi-v4 ma messenger_button_send_round_shadow.png, który chcę usunąć z tego testu

<?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_*"  />

wykonując messenger_ * wszystkie pliki zaczynające się od name messenger w folderze wysuwnym zostaną usunięte lub na odwrót mam określony plik do usunięcia

w ten sposób możesz samodzielnie usuwać pliki z biblioteki, możesz także usuwać układy według @ layout / name layout, jeśli układ ten był używany przez układ i dlatego ...


1

Naprawdę doskonałe odpowiedzi sugerują dobre narzędzia

Ale jeśli zamierzasz usunąć png-drawables (lub inne pliki graficzne ), powinieneś również rozważyć przeniesienie wszystkich folderów drawable-xxxx z projektu do folderu tymczasowego, a następnie przebuduj wszystko i spójrz na kompilację lista wiadomości, która powie ci, których brakuje.

Może to być szczególnie przydatne, jeśli chcesz uzyskać przegląd zasobów, z których faktycznie korzystasz, i być może zastąpić je czcionką ikony lub zasobami svg, być może za pomocą biblioteki Android Iconics .


jest to czasochłonne, ale zgadzam się, że to też jest rozwiązanie. Robię to teraz
Dika

0

Android Assets Viewer został zaprojektowany, aby pomóc wizualnie sprawdzić grafikę spakowaną (jako pliki do rysowania) w pliku .apk (możesz również przesłać plik zip z folderu res), jeśli wolisz):

http://www.cellebellum.net/AndroidAssetsViewer/

Tak więc w przypadku usuwania nieużywanych zasobów może to działać dobrze w połączeniu z kontrolami Lint, aby upewnić się, że wszystko, co powinno tam być, jest. Pomaga również zidentyfikować kilka innych potencjalnych problemów z twoimi drawables: niewłaściwe wiadro, niewłaściwa grafika itp.


0

Po uruchomieniu Lint w Android Studio i znalezieniu wszystkich nieużywanych zasobów możesz kliknąć jeden z nich na karcie Inspekcja. Zawiera szczegółowe informacje na temat problemu i kilka opcji jego rozwiązania. Jednym z nich jest Usuń wszystkie nieużywane zasoby. Wybranie tej opcji powoduje usunięcie wszystkich nieużywanych zasobów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.