Чи є простий спосіб дізнатися невикористані рядки в проекті Android?


152

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

Чи є простий спосіб зробити це?

Відповіді:


238

В Android Studio :

Меню -> Аналіз -> Запуск перевірки за назвою -> Невикористані ресурси

Установіть прапорець Маски (и) файлів і поставте strings.xmlв текстовому полі.


2
Потім ви можете визначитись Custom scope, вибравши Production classes-> app-> valuesзнайти невикористані рядки, кольори ...
Jemshit Iskenderov

2
З інструментами SDK 26.0.2 це не знаходить мої невикористані рядки, в той час як "Знайти звички" не показує їх використання (і для тих, хто фактично використовувався).
користувач905686

BTW, коли рядок фактично використовується (динамічно посилається на код), ви можете придушити попередження лінійки за допомогоюtools:ignore="UnusedResources"
jakub.g

4
цей не працює, як очікувалося. Я спробував додати невикористаний рядок та перевірити, але він не в змозі його визначити
chikka.anddev

Це здається ламаним, він вважав, що купу моїх струн не використовуються, але швидке «знайди звичаї» знайшло застосування. Будь обережний.
szaske

37

Ось ще одне рішення, яке досить легко. У меню Android Studio перейдіть до

Рефакторинг> Видалити невживані ресурси ... .

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

Клацніть Попередній перегляд, щоб побачити, що є невикористаними ресурсами, і вибірково їх видаліть.


1
Це вилучило багато ресурсів, які фактично використовувалися. Довелося вручну
зняти

1
@stoefln, якщо натиснути Попередній перегляд, ви можете вручну вибрати, що видалити, а не видалити.
Сурагч

1
подбайте про те, щоб "Видалити також невикористані декларації @ id". Він видалив мені безліч ідентифікаторів, які мій код використовував насправді (плагін Kotlin Android Extension - це дозволить відновити перегляди з діяльності, фрагментів та переглядів)
Dan Alboteanu

28

У моєму випадку "Запустити перевірку по імені" не спрацювало, незважаючи на те, що я використовував "Видалити невикористані ресурси".

Рішення:

  1. Відкрийте strings.xml
  2. Вторинне клацання
  3. Refactor -> Видалення невикористаних ресурсів

У мене немає поняття, чому "Видалити невикористані ресурси" працює одним способом, а не іншим.


2
Ви можете це зробити також у програмі провідника проектів, виберіть потрібний модуль, потім клацніть правою кнопкою миші та рефактором> видаліть невикористані ресурси, видаліть будь-який ресурс, як невикористаний товарний ресурс
FRL

22

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

11
Станом на ADT 20.0.2 Android Lint не знаходить невикористаних рядків, а також не вимагає. Я просто перевірив це, додавши рядок із повністю випадковим ідентифікатором, а потім запустивши Lint. Я не міг проголосувати відповідь вище, оскільки мені не вистачає репутації :(.
Френк Харпер

Як сказав @FrankHarper: раніше не було. Як сказав лорд Флеш, це робить і зараз:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
серв. Вкл.

3

Щоб перевірити string.xml.

Це легко (принаймні в моїй версії Eclipse)

У програмі Eclipse для Android (у мене версія v22.6.2-1085508)

  • Клацніть правою кнопкою миші назву проекту в "Пакетному досліднику"
  • Виберіть "Інструменти Android".
  • Виберіть "Запуск Lint: Перевірте на поширені помилки".

Тепер, коли ви відкриєте strings.xml, ви побачите, що невикористана рядок виділяється.

Ви можете виправити інші потенційні проблеми.


це корисно для пошуку рядків, які не мають перекладу у файлі за замовчуванням
ePeace

3

В Android Studio Press

Ctlr + Alt + Shift + i

Виберіть -> Невикористані ресурси
Показує невикористані невикористані рядки та піктограми.

Дякую Щасливе кодування :)


3

Ось так я це зробив з Android 3.3.

Перевірте будь-які незбережені зміни у вашому сховищі.

  • Клацніть правою кнопкою миші модуль програми -> Refactor -> Видалити невикористані ресурси -> Попередній перегляд
  • У Попередньому перегляді Refactoring згортайте обидва погляди ("Елементи, які потрібно видалити" та "Невикористані декларації ресурсів")
  • Клацніть правою кнопкою миші «Елементи, які потрібно видалити» -> Виключити
  • Клацніть правою кнопкою миші "Невикористані декларації ресурсу" -> Виключити
  • Тепер розгорніть "Невикористані декларації ресурсу" і під цим знайдіть для програми ваш додаток strings.xml (було б декілька strings.xmls)
  • Клацніть правою кнопкою миші та strings.xml -> Включити
  • Зробіть Refactor! Усі невикористані рядки з файлу XML видалено!

Примітка. Спробуйте створити проект. Якщо компіляція не вдасться, найімовірніше, що ці strings.xml пересилаються з деяких макетів / меню xmls, які самі не використовуються. Тож ці макети xmls можна також видалити вручну!

Побудувати та запустити. Тест!


-1

Запустіть цей скрипт з кореня проекту.

для ресурсного файлу в `find res / values ​​/ *. xml`; робити
  для рядка в `grep '. * / \ 1 / g'`; робити
    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`
    якщо [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; тоді
      echo $ resourcefile: $ stringname
    фі
  зроблено
зроблено

для імені ресурсу в `find res / dravable * -тип f -name '*. ???'`; робити
  resource = `echo $ resourcename | базове ім'я xargs | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .dravable \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  count2 = `grep -rc" @drawable / $ {resource} "res / layout | egrep -v ': 0 $' | wc -l`
  count3 = `grep -rc" @dravable / $ {resource} "res / dravable * / *. 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`
  якщо [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; тоді
      echo $ ім'я ресурсу
  фі
зроблено

для імені ресурсу в `find res / layout / *. xml`; робити
  resource = `echo $ resourcename | базове ім'я xargs | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  якщо [$ count1 -eq 0]; тоді
      echo $ ім'я ресурсу
  фі
зроблено

Це дає мені такий вихід:

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

Класний підхід, але чи перевіряє він, чи ім'я ресурсу не в коментарях чи рядках? Потрібні деякі модифікації, щоб бути сумісними і з новою структурою проекту Android Studio.
Мохаммед Джафар Машхаді

-1

Тільки для відсутнього перекладу:

Використовуючи InteliJ, натисніть на панель панелі InteliJ: "Аналіз"> "Запустити перевірку за назвою"> Введіть: Неповний переклад

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.