Есть ли простой способ узнать неиспользуемые строки в проекте Android?

У меня огромный проект Android со многими строками, объявленными в strings.xml. Я хотел удалить неиспользуемые строки в strings.xml.

Есть ли простой способ сделать это?

Ответ 1

В Android Studio:

Меню → Анализ → Запуск проверки по имени → Неиспользуемые ресурсы

Установите флажок "Файловая маска" и поставьте strings.xml в текстовое поле.

Ответ 2

В моем случае "Run Inspection by Name" не работал, несмотря на то, что я использовал "Удалить неиспользуемые ресурсы".

Решение:

  • Открыть строку .xml
  • Вторичный клик
  • Рефактор → Удалить неиспользуемые ресурсы

Я не знаю, почему "Удалить неиспользуемые ресурсы" работает в одном направлении, но не в другом.

Ответ 3

С ADT 16 вы можете сделать это как можно проще. Обновите ADT 16 и используйте Android Lint. Это действительно потрясающий инструмент. Он может найти все неиспользуемые ресурсы (не только строки) и многое другое. Со своего официального сайта:

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.

Ответ 4

Вот еще одно решение, которое довольно легко. В меню Android Studio перейдите в

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

enter image description here

Нажмите " Просмотр", чтобы увидеть, что такое неиспользуемые ресурсы, и выборочно удалить их.

Ответ 5

Взгляните на мой вопрос: Узнайте, используется ли ресурс

Поскольку никто не имел реального ответа, я запрограммировал script для поиска неиспользуемых ресурсов, который также содержит строки.

Надеюсь, что это поможет.

Ответ 6

Перейдите по ссылке: http://code.google.com/p/android-unused-resources/. у него есть инструмент AndroidUnusedResources.jar. запустите это и получите неиспользуемые строки или любые оставшиеся ресурсы.

  • Пучина

Ответ 7

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

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

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

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

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

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

Ответ 8

В Android Studio Press

Ctlr + Alt + Shift + i

Выбрать → Неиспользуемые ресурсы
Он показывает неиспользуемые неиспользуемые строки и значки.

Спасибо Счастливое кодирование:)

Ответ 9

Вот как я это сделал с Android 3.3.

Проверьте все несохраненные изменения в вашем хранилище.

  • Щелкните правой кнопкой мыши свой модуль приложения → Refactor → Удалить неиспользуемые ресурсы → Предварительный просмотр
  • В предварительном просмотре рефакторинга сверните оба представления ("Элементы, которые нужно удалить" и "Объявления о неиспользованных ресурсах")
  • Щелкните правой кнопкой мыши "Элементы для удаления" → Исключить
  • Щелкните правой кнопкой мыши "Неиспользуемые объявления ресурсов" → Исключить
  • Теперь разверните "Неиспользуемые объявления ресурсов" и найдите в нем свое приложение strings.xml (там должно быть несколько strings.xmls).
  • Щелкните правой кнопкой мыши на этом strings.xml → Включить
  • Делать Рефакторинг! Все неиспользуемые строки из XML файла будут удалены!

Примечание: попробуйте построить проект. Если компиляция завершится неудачно, наиболее вероятно, что эти strings.xml ссылаются из некоторого макета/меню xmls, которые сами по себе не используются. Таким образом, эти макеты XMLS также могут быть удалены вручную!

Сборка и запуск. Тестовое задание!

Ответ 10

Запустите этот script из корня вашего проекта.

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

Он дает мне такой вывод:

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
...

Ответ 11

Только для отсутствующего перевода:

Используя InteliJ, щелкните панель панели вашего InteliJ: "Проанализируйте" > "Запустить проверку по имени" > Введите: Неполный перевод