Come posso trovare tutte le stringhe hardcoded nel mio progetto in Android Studio


92

Devo trovare ed estrarre tutte le stringhe hardcoded nel mio progetto in Android Studio (beta) 0.84. Ho bisogno di uno strumento di analisi statica come Find Bugs che lo faccia in un colpo solo e mi consenta di scorrere ogni messaggio ed estrarre la stringa nei file di risorse. Ancora meglio sarebbe se l'intero processo fosse automatizzato.

In Android Studio (beta) 0.84 File / Setting / FindBugs-IDEA mostra I18N come opzione nella scheda Reporting. Ma non riesco proprio a capire come farlo funzionare.

Grazie per eventuali suggerimenti.

Risposte:


130

Come mi hanno suggerito @Maor Hadad e altri voti positivi: converto il mio commento in una risposta, quindi:

A partire da Android Studio 1.2.2, è disponibile una nuova opzione in

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

L'ho usato e sembra abbastanza più affidabile con la versione corrente rispetto al "testo hardcoded" (che controlla solo i file xml).

Visto qui link


33
Attenzione, l' Hardcoded Textispezione restituisce i testi codificati nei .XMLfile, mentre l' Hardcoded Stringsispezione restituisce i testi codificati nei .javafile.
Loyalar

Si prega di vedere la mia risposta a un problema simile qui stackoverflow.com/a/56121083/3904109
DragonFire

Avevo un compito simile ma per il mio progetto Flutter. L'ispezione di cui sopra non ha portato i risultati attesi, quindi ho provato un Regex. ".+\Q\Ese sostituisci le virgolette doppie con una singola ottieni tutte le stringhe all'interno delle virgolette singole.
pbertsch

117

Vai su "Analizza> Esegui ispezione per nome ..." e digita "Testo codificato". Eseguilo sull'intero progetto e dovresti ottenere un pannello dei risultati dell'ispezione che mostrerà le istanze di testo codificate.

Puoi anche andare su Android Studio> Preferenze> Ispezioni> Testo hardcoded e specificare esattamente come viene eseguito e quali casi speciali (se presenti) sono esclusi dall'ispezione.


2
Ha funzionato incredibilmente! Grazie. A proposito, ci sono strumenti che estrarrebbero automaticamente le stringhe nel file values.xml utilizzando un ID risorsa generato basato sul testo? Sarebbe di grande aiuto. Quindi si può semplicemente andare e refcator i nomi degli id ​​delle risorse su qualcosa di più breve.
Farrukh Najmi

Non so di automatico, ma credo che se evidenzi una delle stringhe e premi Opzione-Invio, otterrai un'opzione per estrarre automaticamente quella stringa, ma dovrai digitare il nome manualmente.
Kevin Coppock

3
+1 una funzionalità molto interessante di Android Studio. Qualcuno ha trovato un modo per escludere i messaggi android.util.Log dai risultati? (circa il 95% dei miei risultati!)
Ben Clayton

6
Per informazioni: Android Studio 1.2.2 ha aggiunto una nuova opzione in "Esegui ispezione per nome" => "Stringhe codificate". Sembra abbastanza più affidabile con la versione corrente rispetto al "testo codificato". Visto qui link
PAD

@ PAD dovresti scriverlo come risposta. Il testo hardcoded restituisce solo file xml. ty :)
Maor Hadad

11

Per la piattaforma Windows, il modo migliore che ho trovato è questo:

Puoi utilizzare questa scorciatoia Ctrl Alt Shift Ie cercare,

Testo hardcoded

nella barra di ricerca.

Puoi selezionare il modulo appropriato in cui vuoi cercare stringhe hardcoded e ti darà l'elenco di tutte le stringhe insieme.

Opzioni per la selezione dei moduli


1

Se vuoi solo trovare tutte le stringhe hardcoded solo in tutti i file di layout, puoi farlo molto rapidamente eseguendo:

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

Note -
1. grepNon possono essere utilizzati su finestre
2. Prima cddi progetto layoutdir
3. risposta kcoppock è grande, ma ci vuole troppo tempo


Il comando grep funziona bene, ma aggiungi anche come ignorare l'associazione dati nel comando
kashyap

1

Usa la combinazione Ctrl+ Shift+ Fper Windows per cercare ovunque, mostra anche l'anteprima.

Usa la combinazione Ctrl+ Fper Windows per cercare nel file corrente.

Usa la combinazione Shift+ Shift(doppio spostamento) per Windows per cercare il file di progetto del progetto.

Potrebbe non essere disponibile per le versioni precedenti.


1

Quello che ha funzionato bene per me è stata la ricerca sull'intero progetto usando regex:

android: text = "[az]

inserisci qui la descrizione dell'immagine

Per trovare all'interno di quelle classi kotlin / java:

[.] text = "[az]

inserisci qui la descrizione dell'immagine

[.] setText ("

inserisci qui la descrizione dell'immagine

non dimenticare di toccare il pulsante blu. * alla fine di questa immagine sopra

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.