Android: есть ли простой способ найти все строки в моем проекте? - PullRequest
13 голосов
/ 06 ноября 2011

Я хочу просканировать свой проект Android на наличие всех жестко закодированных строк, чтобы я мог локализовать проект, поместив строки в strings.xml.В Eclipse я вижу опцию «Externalize Strings ...», но она не специфична для Android.

Я знаю, вы можете выполнить рефакторинг отдельных строк , но я бы хотел провести рефакторинг всех строк одновременно.У меня есть куча файлов, и я стараюсь не просматривать все вручную.

Ответы [ 6 ]

12 голосов
/ 06 ноября 2011

Я бы просто открыл окно терминала (замазка, если вы работаете в windows) в корневом каталоге вашего проекта.Затем вы можете запустить что-то вроде следующего:

grep -r --include=*.java '="[^"\r\n]*"' ./*  --to look for something like this String test="text";, a string with =""
or
grep -r --include=*.java '"[^"\r\n]*"' ./*  -- to look for any string, anything enclosed in ""

Конечно, следующая часть - это фактически заменить Strings в Strings.xml, который также может быть записан в сценарии, но может потребовать больше усилий.

7 голосов
/ 20 января 2014

Я искал это сам. Есть хороший способ сделать это:

Щелкните правой кнопкой мыши по каталогу "src" -> Source -> Externalize Strings

Эта команда найдет все строки, не являющиеся внешними, и позволит вам их экспортировать.

Надеюсь, это поможет:)

Edit:
Это не то же самое, что Android -> Extract Android String. Но это может помочь вам найти все строки Non-Externalize. Затем для каждой строки вам нужно выполнить:
Ctrl + 1 -> Android -> Извлечь строку Android.

1 голос
/ 24 августа 2014

Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields(); String str = ""; for (int i =0; i < fields.length; i++) { int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName()); str += fields[i].getName() + " = "; if (resId != 0) { str += getResources().getString(resId); } str += "\n"; }

Вы получите все коды строк со значениями в переменной "str".

0 голосов
/ 07 января 2019

ПРИМЕЧАНИЕ. Это решение может помочь вам ПОЛУЧИТЬ вашу проблему - найти все жестко закодированные строки. Вам все еще нужно будет выполнить фактический рефакторинг самостоятельно, потому что вам все еще нужно имя всех извлеченных строк.


EDIT:

Это короче и лучше ответ:

  1. Меню -> Анализировать -> Запустить проверку по имени ... (даже имеет ярлык, если вы чувствуете ловкость)
  2. Введите «Жестко закодированный текст», выберите область действия и запустите.

Вы можете запустить пользовательские проверки lint - чтобы найти только жестко закодированные тексты в файлах макета:

  1. Меню -> Анализ -> Проверить код
  2. выбирает желаемую область (например, макеты)

    enter image description here

  3. в разделе «Профиль проверки» выберите новый пользовательский профиль (...)

  4. Дублируйте существующий профиль и отмените все проверки, КРОМЕ «HardcodedText»

enter image description here

enter image description here

  1. Запустите эту проверку, и все ваши жестко закодированные строки будут удобно собраны в один список.
0 голосов
/ 07 августа 2013

Просто сконфигурируйте eclipse, чтобы показать всю строку в коде: Настройка eclipse, чтобы пожаловаться на жестко запрограммированные строки для настроек Android xml

И заменить их одно за другим с рефактором затмения

0 голосов
/ 06 ноября 2011

Я полагаю, что в Google CodePro аддоне для Eclipse есть эта функция там где-то

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...