ฉันจะค้นหาสตริงที่เข้ารหัสยากทั้งหมดในโครงการของฉันใน Android Studio ได้อย่างไร


92

ฉันต้องการค้นหาและแยกสตริงฮาร์ดโค้ดทั้งหมดในโปรเจ็กต์ของฉันใน Android Studio (เบต้า) 0.84 ฉันต้องการเครื่องมือวิเคราะห์แบบคงที่เช่น Find Bugs ทำสิ่งนี้ให้ฉันในนัดเดียวและอนุญาตให้ฉันก้าวผ่านแต่ละข้อความและแยกสตริงไปยังไฟล์ทรัพยากร จะดีไปกว่านั้นถ้ากระบวนการทั้งหมดเป็นแบบอัตโนมัติ

ใน Android Studio (เบต้า) 0.84 ไฟล์ / การตั้งค่า / FindBugs-IDEA จะแสดง I18N เป็นตัวเลือกในแท็บการรายงาน แต่ฉันคิดไม่ออกว่าจะทำให้มันใช้งานได้อย่างไร

ขอบคุณสำหรับคำแนะนำใด ๆ

คำตอบ:


130

ดังที่@Maor Hadadและผู้โหวตคนอื่น ๆ แนะนำฉัน: ฉันแปลงความคิดเห็นเป็นคำตอบดังนั้น:

ตั้งแต่ Android Studio 1.2.2 มีตัวเลือกใหม่ในรูปแบบ

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

ฉันใช้มันและดูเหมือนว่าจะน่าเชื่อถือกว่ากับเวอร์ชันปัจจุบันมากกว่า "ข้อความที่เข้ารหัส" (ซึ่งตรวจสอบเฉพาะไฟล์ xml)

เห็นที่นี่ลิงค์


33
โปรดทราบว่าการHardcoded Textตรวจสอบจะส่งคืนข้อความที่เข้ารหัสใน.XMLไฟล์ในขณะที่การHardcoded Stringsตรวจสอบจะส่งคืนข้อความที่เข้ารหัสใน.javaไฟล์
Loyalar

โปรดดูคำตอบของฉันสำหรับปัญหาที่คล้ายกันที่นี่stackoverflow.com/a/56121083/3904109
DragonFire

ฉันมีงานที่คล้ายกัน แต่สำหรับโครงการ Flutter ของฉัน การตรวจสอบที่กล่าวถึงข้างต้นไม่ได้ผลลัพธ์ที่คาดหวังดังนั้นฉันจึงลองใช้ Regex ".+\Q\Eหากคุณแทนที่เครื่องหมายคำพูดคู่ด้วยคำพูดเดียวคุณจะได้รับสตริงทั้งหมดภายในเครื่องหมายคำพูดเดี่ยว
pbertsch

117

ไปที่ "วิเคราะห์> เรียกใช้การตรวจสอบตามชื่อ ... " แล้วพิมพ์ "ข้อความที่เข้ารหัส" เรียกใช้อันนั้นกับโปรเจ็กต์ทั้งหมดของคุณและคุณควรได้รับแผงผลการตรวจสอบที่จะแสดงอินสแตนซ์ข้อความที่เข้ารหัส

คุณยังสามารถไปที่ Android Studio> ค่ากำหนด> การตรวจสอบ> ข้อความฮาร์ดโค้ดและระบุว่ามันทำงานอย่างไรและกรณีพิเศษ (ถ้ามี) อะไรบ้างที่ไม่รวมอยู่ในการตรวจสอบ


2
มันได้ผลสุดยอด! ขอบคุณ. BTW มีเครื่องมือใดบ้างที่จะแยกสตริงเป็นไฟล์ values.xml โดยอัตโนมัติโดยใช้รหัสทรัพยากรที่สร้างขึ้นตามข้อความหรือไม่ นั่นจะช่วยได้มาก จากนั้นเราสามารถไปและ refcator ชื่อรหัสทรัพยากรให้สั้นลง
Farrukh Najmi

ฉันไม่รู้ว่าอัตโนมัติ แต่ฉันเชื่อว่าถ้าคุณไฮไลต์สตริงใดสตริงหนึ่งแล้วกด Option-Enter คุณจะได้รับตัวเลือกในการแยกสตริงนั้นโดยอัตโนมัติ แต่คุณจะต้องพิมพ์ชื่อด้วยตนเอง
Kevin Coppock

3
+1 คุณลักษณะที่ยอดเยี่ยมของ Android Studio มีใครพบวิธีการยกเว้น android.util.Log ข้อความจากผลลัพธ์หรือไม่ (ประมาณ 95% ของผลลัพธ์ของฉัน!)
Ben Clayton

6
สำหรับข้อมูล: Android Studio 1.2.2 ได้เพิ่มตัวเลือกใหม่ใน "Run การตรวจสอบ By Name" => "Hardcoded strings" ดูเหมือนว่าจะน่าเชื่อถือกว่าสำหรับเวอร์ชันปัจจุบันมากกว่า "ข้อความที่เข้ารหัส" เห็นที่นี่ลิงค์
พันธมิตรฯ

@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ไม่สามารถใช้งานบน Windows
2. แรกcdเพื่อโครงการlayoutdir
3. คำตอบ kcoppock เป็นสิ่งที่ดี แต่มันต้องใช้เวลามากเกินไป


คำสั่ง grep ใช้งานได้ดี แต่เพิ่มวิธีการละเว้น databinding ในคำสั่งด้วย
kashyap

1

ใช้Ctrl+ Shift+ Fรวมกันสำหรับ Windows ที่จะค้นหาทุกที่แสดงให้เห็นว่ามันดูตัวอย่างยัง

ใช้Ctrl+ Fรวมกันสำหรับ Windows เพื่อค้นหาในไฟล์ปัจจุบัน

ใช้ชุดค่าผสมShift+ Shift(Double Shift) สำหรับ Windows เพื่อค้นหาไฟล์โครงการของโครงการ

อาจไม่พร้อมใช้งานสำหรับเวอร์ชันเก่า


1

สิ่งที่ใช้ได้ผลดีสำหรับฉันคือการค้นหาทั้งโครงการโดยใช้ regex:

Android: text = "[az]

ป้อนคำอธิบายภาพที่นี่

หากต้องการค้นหาภายในคลาส kotlin / java:

[.] text = "[az]

ป้อนคำอธิบายภาพที่นี่

[.] setText ("

ป้อนคำอธิบายภาพที่นี่

อย่าลืมแตะที่ปุ่ม. * สีน้ำเงินที่ท้ายสุดของภาพด้านบนนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.