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?

Steve Prentice
źródło

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

Bakua
źródło
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.

Andrei Buneyeu
źródło
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

dieter
źródło
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

Prokash Sarkar
źródło
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
16

Otwieramy źródło narzędzie, które usuwa wszystkie nieużywane zasoby w projekcie Android na podstawie informacji o strzępach. Można go znaleźć tutaj: https://github.com/KeepSafe/android-resource-remover

philipp
źródło
jak używam tego, aby usunąć nieużywane zasoby z mojego projektu Android Studio.
Yamini
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.

MRodrigues
źródło
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

Ramesh R.
źródło
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

Lins Louis
źródło
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.

steliosf
źródło
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.

Gabriel Klein
źródło
+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/

użytkownik1632014
źródło
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 ...

Parth Dave
źródło
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 .

Daniel F.
źródło
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.

straya
źródło
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.

rohans310
źródło