Як я можу знайти всі жорстко закодовані рядки у своєму проекті в Android Studio


89

Мені потрібно знайти та витягти всі жорстко закодовані рядки у своєму проекті в Android Studio (бета-версія) 0.84. Мені потрібен інструмент статичного аналізу, такий як Find Bugs, який робить це за мене одним пострілом і дозволяє перебирати кожне повідомлення та витягувати рядок у файли ресурсів. Ще краще, якщо весь процес буде автоматизований.

В Android Studio (бета-версія) 0.84 File / Setting / FindBugs-IDEA відображає I18N як опцію на вкладці Звітування. Але я просто не можу зрозуміти, як змусити це працювати.

Дякуємо за будь-які пропозиції.

Відповіді:


125

Як @Maor Hadad та інші прихильники запропонували мені: я перетворюю свій коментар у відповідь, так:

Починаючи з Android Studio 1.2.2, є нова опція в

"Analyse > Run inspection By Name" => "Hardcoded strings".

Я використовував його, і це здається набагато надійнішим у поточній версії, ніж "жорстко закодований текст" (який перевіряє лише файли xml).

Побачене тут посилання


32
Зауважте, Hardcoded Textперевірка повертає закодовані тексти у .XMLфайлах, тоді як Hardcoded Stringsперевірка повертає закодовані тексти у .javaфайлах.
Лоялар,

Будь ласка , дивіться мій відповідь на аналогічну проблему тут stackoverflow.com/a/56121083/3904109
DragonFire

У мене було подібне завдання, але для мого проекту Flutter. Інспекція, згадана вище, не принесла очікуваних результатів, тому я спробував Regex. ".+\Q\Eякщо ви підставляєте подвійну лапку однією, ви отримуєте всі рядки всередині одинарних лапок.
pbertsch

115

Перейдіть до "Аналіз> Запустити перевірку за іменем ..." і введіть "Текст із твердим кодом". Запустіть його проти всього вашого проекту, і ви повинні отримати панель результатів перевірки, яка покаже твердо закодовані текстові екземпляри.

Ви також можете перейти до Android Studio> Налаштування> Інспекції> Текст із твердим кодом і вказати, як саме він працює, і які (якщо такі є) особливі випадки виключаються з перевірки.


2
Це працювало надзвичайно! Дякую. До речі, чи існують інструменти, які автоматично витягують рядки до файлу values.xml за допомогою сформованого ідентифікатора ресурсу на основі тексту? Це було б великою підмогою. Тоді можна просто перейти і перерахувати імена ідентифікаторів ресурсів на щось коротше.
Farrukh Najmi

Я не знаю автоматичного, але я вважаю, що якщо ви виділите один із рядків і натиснете Option-Enter, ви отримаєте опцію автоматичного вилучення цього рядка, але вам доведеться вводити ім'я вручну.
Кевін Коппок,

3
Оцініть +1 дуже цікавою функцією Android Studio. Хтось знайшов спосіб виключити повідомлення android.util.Log із результатів? (близько 95% моїх результатів!)
Бен Клейтон

6
Довідково: Android Studio 1.2.2 додав нову опцію в "Запустити перевірку за назвою" => "Зашифровані рядки". У поточній версії це видається набагато надійнішим, ніж "закодований текст". Побачене тут посилання
PAD

@PAD ви повинні написати це як відповідь. Текст із твердим кодом повертає лише файли xml. ty :)
Maor Hadad

11

Для платформи Windows найкращий спосіб, який я знайшов, такий:

Ви можете використовувати цей ярлик Ctrl Alt Shift Iі шукати,

Текст із твердим кодом

у рядку пошуку.

Ви можете вибрати відповідний модуль, в якому ви хочете шукати жорстко закодовані рядки, і він надасть вам список усіх рядків разом.

Параметри вибору модулів


1

Якщо ви просто хочете знайти всі жорстко закодовані рядки лише у всіх файлах макета, ви можете зробити це дуже швидко, запустивши -

vinayak@vinayak-osx:layout $ grep -n "android:text=\"" * | grep -v "@string"

Примітки -
1. grepне можуть бути використані на вікнах
2. По перше , cdщоб проекту layoutреж
3. kcoppock відповідь великий, але це займає надто багато часу


Команда grep працює добре, але додайте, як ігнорувати прив'язку даних у команді
kashyap

1

Використовуйте комбінацію Ctrl+ Shift+ Fдля Windows для пошуку скрізь, вона також показує попередній перегляд.

Використовуйте комбінацію Ctrl+ Fдля Windows для пошуку у поточному файлі.

Використовуйте комбінацію Shift+ Shift(подвійний зсув) для Windows для пошуку у файлі проекту проекту.

Можливо, недоступний для старих версій.


0

Для мене добре працював пошук у цілому проекті за допомогою регулярного виразу:

android: text = "[az]

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

Щоб знайти всередині цього класу kotlin / java:

[.] text = "[az]

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

[.] setText ("

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

не забудьте натиснути на синю кнопку. * у самому кінці цього зображення вище

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