Jak mogę znaleźć wszystkie zakodowane ciągi w moim projekcie w Android Studio


89

Muszę znaleźć i wyodrębnić wszystkie zakodowane ciągi w moim projekcie w Android Studio (beta) 0.84. Potrzebuję narzędzia do analizy statycznej, takiego jak Find Bugs, które zrobi to za mnie za jednym razem i pozwoli mi przejść przez każdą wiadomość i wyodrębnić ciąg do plików zasobów. Jeszcze lepiej byłoby, gdyby cały proces był zautomatyzowany.

W Android Studio (beta) 0.84 File / Setting / FindBugs-IDEA pokazuje I18N jako opcję w zakładce Reporting. Ale po prostu nie mogę wymyślić, jak to działa.

Dzięki za wszelkie sugestie.

Odpowiedzi:


125

Jak zasugerował @Maor Hadad i inni upvotes: Zamieniam mój komentarz w odpowiedź, więc:

Od wersji Android Studio 1.2.2 dostępna jest nowa opcja w

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

Użyłem go i wydaje się bardziej niezawodny w obecnej wersji niż "tekst zakodowany na stałe" (który sprawdza tylko pliki xml).

Widziany tutaj link


32
Pamiętaj, że Hardcoded Textinspekcja zwraca zakodowane na stałe teksty w .XMLplikach, podczas gdy Hardcoded Stringsinspekcja zwraca zakodowane na stałe teksty w .javaplikach.
Loyalar

Zobacz moją odpowiedź na podobny problem tutaj stackoverflow.com/a/56121083/3904109
DragonFire

Miałem podobne zadanie, ale w ramach projektu Flutter. Wspomniana powyżej inspekcja nie przyniosła oczekiwanych rezultatów, więc wypróbowałem Regex. ".+\Q\Ejeśli zastąpisz podwójny cudzysłów pojedynczym cudzysłowem, otrzymasz wszystkie ciągi znaków w pojedynczych cudzysłowach.
pbertsch

115

Przejdź do „Analiza> Uruchom kontrolę według nazwy ...” i wpisz „Zakodowany tekst”. Uruchom to dla całego projektu, a powinieneś otrzymać panel wyników inspekcji, który pokaże instancje zakodowanego na stałe tekstu.

Możesz również przejść do Android Studio> Preferencje> Inspekcje> Zakodowany tekst i określić dokładnie, jak działa i jakie (jeśli w ogóle) przypadki specjalne są wykluczone z kontroli.


2
To zadziałało niesamowicie! Dzięki. A tak przy okazji, czy istnieją narzędzia, które automatycznie wyodrębniają ciągi znaków do pliku values.xml przy użyciu wygenerowanego identyfikatora zasobu opartego na tekście? To byłaby wielka pomoc. Wtedy można po prostu przejść i zamienić nazwy identyfikatorów zasobów na coś krótszego.
Farrukh Najmi

Nie znam automatycznego, ale wierzę, że jeśli podświetlisz jeden z ciągów i naciśniesz Option-Enter, otrzymasz opcję automatycznego wyodrębnienia tego ciągu, ale będziesz musiał wpisać nazwę ręcznie.
Kevin Coppock

3
+1 bardzo fajna funkcja Android Studio. Czy ktoś znalazł sposób na wykluczenie wiadomości android.util.Log z wyników? (około 95% moich wyników!)
Ben Clayton

6
Dla informacji: Android Studio 1.2.2 dodał nową opcję w "Uruchom inspekcję według nazwy" => "Ciągi zakodowane na stałe". Wydaje się bardziej wiarygodne w obecnej wersji niż „tekst zakodowany na stałe”. Widziany tutaj link
PAD,

@PAD powinieneś napisać to jako odpowiedź. Zakodowany tekst zwraca tylko pliki xml. ty :)
Maor Hadad

11

W przypadku platformy Windows najlepszy sposób, jaki znalazłem, jest następujący:

Możesz użyć tego skrótu Ctrl Alt Shift Ii wyszukać,

Tekst zakodowany na stałe

w pasku wyszukiwania.

Możesz wybrać odpowiedni moduł, w którym chcesz przeszukać zakodowane ciągi, a otrzymasz listę wszystkich ciągów razem.

Opcje wyboru modułów


1

Jeśli chcesz po prostu znaleźć wszystkie zakodowane ciągi tylko we wszystkich plikach układu, możesz to zrobić bardzo szybko, uruchamiając -

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

Uwagi -
1. grepnie mogą być stosowane w oknach
2. Najpierw cddo projektu layoutreż
3. kcoppock odpowiedź jest super, ale to zajmuje zbyt dużo czasu


Polecenie grep działa dobrze, ale dodaj również sposób ignorowania wiązania danych w poleceniu
kashyap

1

Użyj kombinacji Ctrl+ Shift+, Faby system Windows przeszukiwał wszędzie, pokazuje również podgląd.

Użyj kombinacji Ctrl+ Fdla systemu Windows, aby wyszukać w bieżącym pliku.

Użyj kombinacji Shift+ Shift(podwójny Shift) dla systemu Windows, aby przeszukać plik projektu projektu.

Może być niedostępny dla starszych wersji.


0

To, co działało dobrze, to wyszukiwanie w całym projekcie przy użyciu wyrażenia regularnego:

android: text = "[az]

narzędzia: tekst = "[az]

wprowadź opis obrazu tutaj

w tym przypadku tylko w plikach xml (szukam androida: text = "....)

nie zapomnij dotknąć niebieskiego przycisku. * na samym końcu powyższego obrazka

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.