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.