Удалите все неиспользуемые ресурсы из проекта Android

386

Я хочу удалить все неиспользуемые макеты, строки, рисунки, цвета и т. Д. Из моей директории Android res. Существуют ли какие-либо инструменты, которые дадут мне список файлов, и я смогу удалить из своего репозитория и элементы в определенных файлах (например, неиспользуемые строковые записи), которые больше не используются?

Стив Прентис
источник

Ответы:

734

Вы можете легко искать неиспользуемые ресурсы из Android Studio. Просто нажмите CtrlAltShiftiи введите « неиспользованные ресурсы » (без кавычек). Это выполнит пух. Супер простой способ запуска команд lint (и других вещей из IDE).

ИЛИ

В Android Studio Menu > Refactor > Удалить неиспользуемые ресурсы ...

Выберите ресурсы, которые вы хотите удалить. Вы можете исключить ресурсы, которые хотите сохранить, щелкнув правой кнопкой мыши элемент ресурса.

Используйте Do Refactor, чтобы удалить все ресурсы одновременно.

Обновление: использовать OptionShiftiдля Mac

bakua
источник
55
cmd + Alt + Shift для Mac
Иисус Димрикс
5
@MikeMilla Щелкните правой кнопкой мыши по файлам, которые вы хотите удалить, и выберите параметр «Применить исправления Lint». Чтобы удалить несколько файлов за один раз, выберите их.
Сакет Джайн
28
Имейте в виду, что использование этого подхода также удалит любой ресурс, который использовался программно.
Прокаш Саркар
23
Сломал весь мой проект ... Не такой мудрый ход
egorikem
7
В AS 3.0 эта функция удаляет некоторые использованные файлы макета. Лучше сделать резервную копию или git commit, прежде чем пытаться это сделать.
StoneLam
99

Начиная с ADT 16 вы можете использовать Android Lint . Это действительно удивительный инструмент.

Android Lint - это новый инструмент для ADT 16 (и Tools 16), который сканирует источники проектов Android на предмет возможных ошибок.

Вот несколько примеров типов ошибок, которые он ищет:

  • Отсутствующие переводы (и неиспользованные переводы)
  • Проблемы с производительностью макета (все проблемы, которые использовался старым инструментом layoutopt, и многое другое)
  • Неиспользованные ресурсы
  • Несовместимые размеры массивов (когда массивы определены в нескольких конфигурациях)
  • Проблемы с доступностью и интернационализацией (жестко закодированные строки, отсутствующее описание контента и т. Д.)
  • Проблемы с иконками (например, отсутствие плотности, дублирующиеся иконки, неправильный размер и т. Д.)
  • Проблемы с удобством использования (например, не указание типа ввода в текстовом поле)
  • Явные ошибки и многое другое.

Однако у него есть некоторые проблемы (не знаю, исправлены ли они уже), и если вы хотите удалить сотни предположительно неиспользуемых ресурсов, я бы порекомендовал несколько раз вручную компилировать проект во время удаления ресурсов, чтобы убедиться, что Lint не сделал этого. удалить что-то необходимое.

Андрей Буней
источник
10
Я бы не стал полагаться на то, что Lint предлагает в качестве неиспользуемых ресурсов, особенно если вы выполняете много поисков ресурсов в своем коде, а не в XML. В этом случае Lint обнаружит, что многие ресурсы не используются в то время, как они используются.
MrJre
61
В Android Studio вы можете Analyze > Inspect Code...найти множество вещей, в том числе неиспользуемые объявления и методы .
Джошуа Пинтер
8
Например, если вы хотите использовать командную строку:lint --check UnusedResources <project-path>
espinchi
41
Но как их удалить?
Мартин Пфеффер
1
Есть ли способ удалить все Extra Translationsвместе / автоматически?
rishabhmhjn
41

Поскольку поддержка ADT в Eclipse закончилась, мы должны использовать Android Studio.

В Android Studio 2.0+ используйте Refactor > Remove Unused Resources...

введите описание изображения здесь

Dieter
источник
2
Похоже, что таким образом удаляются ресурсы, используемые программно
THZ
1
Не забудьте просмотреть на следующем шаге, в противном случае некоторые используемые файлы также будут удалены.
Каран Шарма
38

Система сборки Gradle для Android поддерживает «сжатие ресурсов»: автоматическое удаление ресурсов, которые не используются во время сборки в упакованном приложении. В дополнение к удалению ресурсов в вашем проекте, которые на самом деле не нужны во время выполнения, это также удаляет ресурсы из библиотек, от которых вы зависите, если они на самом деле не нужны вашему приложению.

Чтобы включить это, добавьте строку shrinkResources true в ваш файл Gradle.

   android {
        ...

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

Проверьте официальную документацию здесь,

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

Прокаш Саркар
источник
2
shrinkResources должен быть включен proguard. У меня проблемы с включением Proguard :-(
Tixeon
shrinkResources учитывается, только если minifyEnabled имеет значение true minifyEnabled true
Eldhopj
16

Мы открываем исходный код инструмент, который удаляет все неиспользуемые ресурсы в вашем проекте Android на основе вывода lint. Его можно найти здесь: https://github.com/KeepSafe/android-resource-remover

Philipp
источник
как я использую это, чтобы удалить неиспользованный ресурс из моего проекта Android Studio.
Ямини
15

Будьте осторожны, если вы используете несколько ароматов, когда запускаете пух. Lint может давать ложные неиспользованные ресурсы в зависимости от выбранного вами вкуса.

MRodrigues
источник
Как этого избежать?
NickUnuchek
До сих пор я не нашел способ сделать это. За исключением использования ворса для каждого аромата и последующей маркировки предметов, неиспользованных на обоих ароматах.
MRodrigues
8

В Android Studio 2.0 и выше в меню выберите Refactor -> нажмите «Удалить неиспользуемые ресурсы» ...

(или)

ярлык также доступен

Нажмите Ctlr + Alt + Shift + i, откроется одно диалоговое окно, затем введите неиспользованный , вы найдете количество вариантов выбора и удаления неиспользуемых ресурсов.

Рамеш Р
источник
7

В Android Studio

Анализ -> Выполнить проверку по имени

(Ярлык для Mac shift + команда + опция + i, Ctrl + Shift + A в Windows / Linux).

И введите «неиспользованные ресурсы».

Таким образом, вы можете удалить неиспользуемые ресурсы, переменные, символы, локализацию, библиотеки .. и т. Д.

Выберите нужный контроль из списка, затем выберите область контроля -> ОК введите описание изображения здесь

Линс Луис
источник
6

Внимание Разработчики Android Wear : «Удалить неиспользуемые ресурсы» удалит XML-файл, в котором вы объявите имя возможности (res / values ​​/ wear.xml), и телефон не сможет подключиться к часам. Я часами пытался выяснить эту ошибку в своем приложении.

steliosf
источник
А также, например, удаляет круглые значки MipMap.
артем
Правильный. В целом, «Удалить неиспользуемые ресурсы» вообще не рекомендуется, так как это может привести к множеству не отслеживаемых ошибок.
steliosf
4

Чтобы проверить string.xml.

Это легко (по крайней мере, в моей версии Eclipse)

В Eclipse для Android (у меня версия v22.6.2-1085508)

  • Щелкните левой кнопкой мыши на названии проекта в «Проводнике пакетов».
  • Выберите «Инструменты Android».
  • Выберите «Run Lint: Проверка на наличие общих ошибок».

Теперь, когда вы откроете strings.xml, вы увидите, что неиспользованная строка подсвечивается.

Вы можете исправить другие потенциальные проблемы.

Габриэль Кляйн
источник
+1 хорошее решение, приятель. Он также позволяет запускать lint для выбранных проверок - именно то, что мне нужно .... (ps почти то же самое с Android Studio: щелкните правой кнопкой мыши в Project Explorer, выберите Analyze , выберите Inspect Code или Run Inspection by Name ): D
Trinimon
Это не очень помогает в удалении этих неиспользуемых строк. Вы предлагаете удалить их вручную, как раньше?
Стэн
«Lint» - действительно отличный способ «очистить ваш проект». Вам все равно придется удалить их вручную, но они подсвечиваются, и вы сразу видите, что они не используются. Это несколько минут работы для проекта среднего размера. :)
Габриэль Кляйн
3

Может быть полезным Andround Unused Resources - это Java-приложение, которое сканирует ваш проект на наличие неиспользуемых ресурсов. Неиспользуемые ресурсы излишне занимают место, увеличивают время сборки и загромождают список автозаполнения среды IDE.

Чтобы использовать его, убедитесь, что ваш рабочий каталог является корнем вашего проекта Android, и запустите:

java -jar AndroidUnusedResources.jar

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

user1632014
источник
1
где бы я ни ставил его, он продолжает говорить, что это не правильный корень проекта
kingston
2

Когда мы определяем сокращенные ресурсы как истинные, мы также можем определить, какие ресурсы мы хотим сохранить, а какие нет, я добавил XML-файл в папку res / raw с именем keep.xml.

прежде чем идти дальше, сгенерируйте единственную подписанную сборку и проверьте в инструменте apk analyzer, который покажет drawable-xhdpi-v4 имеет messenger_button_send_round_shadow.png, который я хочу удалить для этого теста

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

с помощью messenger_ * все файлы, начиная с имени messenger в папке drawable, будут удалены, или наоборот, если у меня есть определенный файл, который нужно удалить

таким образом, вы можете самостоятельно удалять файлы из библиотеки, вы также можете удалять макеты с помощью @ layout / layout name, если этот чертеж был использован макетом и т. д.

Парт Дэйв
источник
1

Там действительно отличные ответы, предлагающие хорошие инструменты

Но если вы намереваетесь удалить png-drawables (или другие файлы изображений ), вам также следует рассмотреть возможность перемещения всех папок drawable-xxxx из вашего проекта во временную папку, затем выполнить перестройку всех и взглянуть на сборку. список сообщений, который скажет вам, какие из них отсутствуют.

Это может быть особенно полезно, если вы хотите получить представление о том, какие ресурсы вы эффективно используете, и, возможно, заменить их на шрифт с иконками или ресурсы SVG, возможно, с помощью библиотеки Android Iconics .

Даниэль Ф
источник
это отнимает много времени, но я согласен, что это тоже решение. Я делаю это прямо сейчас
Дика
0

Android Assets Viewer предназначен для визуальной проверки упакованной графики (в виде рисунков) в вашем .apk (вы также можете просто загрузить zip-файл вашей папки res, если хотите):

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

Поэтому для удаления неиспользуемых ресурсов это может хорошо работать в тандеме с проверками Lint, чтобы убедиться, что все, что должно быть, есть. Это также поможет вам выявить несколько других потенциальных проблем с вашими объектами рисования: неправильное ведро, неправильное изображение и т. Д.

straya
источник
0

После того, как вы запустите Lint в Android Studio и найдете все неиспользуемые ресурсы, вы можете нажать на один из них на вкладке «Проверка». Он предоставляет некоторые подробности о проблеме и несколько вариантов ее устранения. Одним из них является удаление всех неиспользуемых ресурсов. Выбор этой опции удаляет все неиспользованные ресурсы.

rohans310
источник