क्या एंड्रॉइड प्रोजेक्ट में अप्रयुक्त तारों का पता लगाने का कोई सरल तरीका है?


152

मेरे पास एक बहुत बड़ा एंड्रॉइड प्रोजेक्ट है जिसमें कई तार हैं strings.xml। मैं अप्रयुक्त तार को हटाना चाहता था strings.xml

क्या ऐसा करने का कोई आसान तरीका है?

जवाबों:


238

पर एंड्रॉयड स्टूडियो :

मेनू -> विश्लेषण -> नाम से निरीक्षण चलाएँ -> अप्रयुक्त संसाधनों

फ़ाइल मास्क चेक करें और strings.xmlटेक्स्ट फ़ील्ड में डालें।


2
तब आप परिभाषित Custom scope, Production classesappvalues
चुनिंदा

2
एसडीके टूल्स 26.0.2 के साथ यह मेरे अप्रयुक्त तारों को नहीं ढूंढता है, जबकि "फाइंड यूजेज" उनमें से कोई उपयोग नहीं दिखाता है (और यह वास्तव में उपयोग किए जाने वालों के लिए करता है)।
user905686

BTW जब एक स्ट्रिंग वास्तव में उपयोग किया जाता है (कोड में गतिशील रूप से संदर्भित), आप लिंटर चेतावनी के साथ दबा सकते हैंtools:ignore="UnusedResources"
jakub.g

4
यह उम्मीद के मुताबिक काम नहीं कर रहा है। मैं अप्रयुक्त स्ट्रिंग को जोड़ने के साथ की कोशिश की और निरीक्षण, लेकिन यह यह पहचान करने में सक्षम नहीं है है
chikka.anddev

यह टूटा हुआ लगता है, यह सोचा था कि मेरे तार का एक गुच्छा अप्रयुक्त था, लेकिन एक त्वरित "उपयोग usages" पाया उपयोग। सावधान रहे।
szaske

37

यहां एक और समाधान है जो काफी आसान है। एंड्रॉइड स्टूडियो मेनू में जाएं

Refactor> अप्रयुक्त संसाधन निकालें ...

यहाँ छवि विवरण दर्ज करें

अप्रयुक्त संसाधनों को देखने के लिए पूर्वावलोकन पर क्लिक करें और चुनिंदा रूप से उन्हें हटा दें।


1
इसने बहुत सारे संसाधनों को हटा दिया जो वास्तव में उपयोग किए गए थे। मैन्युअल रूप से बहुत सारे सामानों को हटाना रद्द करना था
stoefln

1
@stoefln, यदि आप पूर्वावलोकन पर क्लिक करते हैं, तो आप मैन्युअल रूप से चुन सकते हैं कि क्या हटाना है और क्या नहीं हटाना है।
सूरगछ

1
इस बात का ध्यान रखें कि "अप्रयुक्त @ आईडी घोषणाओं को हटाएं"। इसने मुझे बहुत सारी आईडी डिलीट कर दीं, जो कि मेरा कोड वास्तव में उपयोग कर रहा था (कोटलिन एंड्रॉइड एक्सटेंशन प्लगइन - जो गतिविधियों, फ़्रैगमेंट्स और व्यूज़ से विचारों को पुनर्प्राप्त करने की अनुमति देगा)
Dan Alboteanu

28

मेरे मामले में "नाम से रन निरीक्षण" काम नहीं किया था, इस तथ्य के बावजूद कि मैं "अप्रयुक्त संसाधनों को निकालें" का उपयोग कर रहा था।

उपाय:

  1. स्ट्रिंग्स खोलें। xml
  2. माध्यमिक क्लिक करें
  3. रिफैक्टर -> अप्रयुक्त संसाधनों को हटा दें

मुझे कोई सुराग नहीं है कि "अप्रयुक्त संसाधनों को निकालें" एक तरह से काम करता है लेकिन दूसरे को नहीं।


2
आप इसे प्रोजेक्ट एक्सप्लोरर में भी कर सकते हैं, जिस मॉड्यूल को आप चाहते हैं, उसका चयन करें, फिर राइट क्लिक और रिफैक्टर> अप्रयुक्त संसाधनों को हटा दें, किसी भी तरह के संसाधन जैसे अप्रयुक्त ड्रॉ को हटा दें
FRL

22

ADT 16 के साथ आप इसे यथासंभव सरल कर सकते हैं। ADT 16 में अपडेट करें और Android Lint का उपयोग करें । यह वास्तव में अद्भुत उपकरण है। यह सभी अप्रयुक्त संसाधनों (न केवल तार) और कई और अधिक पा सकते हैं । इसकी आधिकारिक साइट से:

Here are some examples of the types of errors that it looks for:

- Missing translations (and unused translations)
- Layout performance problems (all the issues the old layoutopt tool used to find, and more)
- Unused resources
- Inconsistent array sizes (when arrays are defined in multiple configurations)
- Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
- Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
- Usability problems (like not specifying an input type on a text field)
- Manifest errors
and many more.

11
ADT 20.0.2 के अनुसार, एंड्रॉइड लिंट अप्रयुक्त स्ट्रिंग्स नहीं ढूंढता है, न ही यह दावा करता है। मैंने इसे पूरी तरह से यादृच्छिक आईडी के साथ एक स्ट्रिंग जोड़कर और फिर लिंट को चलाकर परीक्षण किया। मैं नीचे दिए गए उत्तर को वोट नहीं दे सका, क्योंकि मेरे पास पर्याप्त प्रतिष्ठा नहीं है :(।
फ्रैंक हार्पर

जैसा @FrankHarper ने कहा: यह पहले नहीं था। जैसा कि लॉर्ड फ्लैश ने कहा, यह अब करता है:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
सर्व-

3

String.xml की जाँच करने के लिए।

यह आसान है (कम से कम मेरे ग्रहण के संस्करण में)

Android के लिए ग्रहण में (मेरे पास संस्करण v22.6.2-1085508 है)

  • "पैकेज एक्सप्लोरर" में प्रोजेक्ट के नाम पर राइट क्लिक करें
  • "Android उपकरण" चुनें।
  • "रन लिंट: आम त्रुटियों की जांच करें" चुनें।

अब जब आप स्ट्रिंग्स खोलते हैं। xml, तो आप देखेंगे कि अप्रयुक्त स्ट्रिंग हाइलाइट किए गए हैं।

आप अन्य संभावित मुद्दों को ठीक कर सकते हैं।


यह उन स्ट्रिंग्स को खोजने के लिए उपयोगी है, जिनका डिफ़ॉल्ट फ़ाइल में अनुवाद नहीं है
ePeace

3

एंड्रॉइड स्टूडियो प्रेस में

Ctlr + Alt + Shift + मैं

चयन करें -> अप्रयुक्त संसाधन
यह आपको अप्रयुक्त स्ट्रिंग और आइकन दिखाता है।

धन्यवाद हैप्पी कोडिंग :)


3

यह मैंने इसे एंड्रॉइड 3.3 के साथ कैसे किया।

अपने रिपॉजिटरी में किसी भी सहेजे नहीं गए परिवर्तनों की जाँच करें।

  • अपने ऐप के मॉड्यूल पर राइट क्लिक करें -> रिफ्लेक्टर -> अप्रयुक्त संसाधनों को निकालें -> पूर्वावलोकन
  • रिफैक्टरिंग पूर्वावलोकन में, दोनों दृश्य ('हटाए जाने वाले आइटम' और 'अप्रयुक्त संसाधन घोषणाएँ') को ध्वस्त करें
  • 'हटाए जाने वाले आइटम' पर राइट क्लिक करें -> बाहर निकालें
  • 'अप्रयुक्त संसाधन घोषणाएँ' पर राइट क्लिक करें -> बहिष्कृत करें
  • अब 'अनयूज्ड रिसोर्स डिक्लेरेशन' का विस्तार करें और इसके तहत अपने ऐप को विशिष्ट स्ट्रिंग्स का पता लगाएं। xml (इसमें कई स्ट्रिंग्स होंगे। xmls)
  • उस स्ट्रिंग्स पर राइट क्लिक करें। xml -> शामिल करें
  • रिफ्लेक्टर करो! Xml फ़ाइल से सभी अप्रयुक्त तार हटा दिए जाते हैं!

नोट: परियोजना के निर्माण का प्रयास करें। यदि संकलन विफल हो जाता है, तो इसकी सबसे अधिक संभावना है कि ये तार। Xml कुछ लेआउट / मेनू xmls से संदर्भित किए जा रहे हैं, जो स्वयं अप्रयुक्त हैं। तो उन लेआउट xmls को मैन्युअल रूप से भी हटाया जा सकता है!

बनाएँ और चलाएँ। परीक्षा!


-1

इस स्क्रिप्ट को अपने प्रोजेक्ट के रूट से चलाएँ।

रिसोर्सफाइल के लिए `खोज रेस / मान / *। xml`; करना
  `grep 'में stringname के लिए। * / \ 1 / g'`; करना
    count1 = `grep -rc" R.string। $ {stringname} "src | egrep -v ': 0 $' | wc -l`
    count2 = `grep -rc" @string / $ {stringname} "रेस / लेआउट | egrep -v ': 0 $' | wc -l`
    count3 = `grep -rc" @string / $ {stringname} "res / मेनू | egrep -v ': 0 $' | wc -l`
    count4 = `grep -rc" @string / $ {stringname} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
    count5 = `grep -rc" @string / $ {stringname} "res / xml | egrep -v ': 0 $' | wc -l`
    अगर [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; फिर
      इको $ रिसोर्सफाइल: $ स्ट्रिंगनाम
    फाई
  किया हुआ
किया हुआ

'खोजने के लिए res Rescename' के लिए 'res / drawable * -type f -name' *। ??? '' ` करना
  संसाधन = `प्रतिध्वनि $ प्रतिध्वनि | xargs बेसन | sed "s / ^ \ ((। * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \। प्रत्याहार \ "। $ {संसाधन}" src | egrep -v ': 0 $' | wc -l`
  count2 = `grep -rc" @ वापस लेने योग्य / $ {संसाधन} "रेस / लेआउट | egrep -v ': 0 $' | wc -l`
  काउंट 3 = `grep -rc" @ वापस लेने योग्य / $ {संसाधन} "रेस / ड्रा करने योग्य * / *। xml | egrep -v ': 0 $' | wc -l`
  count4 = `grep -rc" @ पैसे निकालने योग्य / $ {संसाधन} "रेस / मेनू | egrep -v ': 0 $' | wc -l`
  count5 = `grep -rc" @drawable / $ {रिसोर्स} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
  अगर [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; फिर
      $ गूंजना गूंज
  फाई
किया हुआ

`खोज रेस / लेआउट / *। xml` में resourcename के लिए; करना
  संसाधन = `प्रतिध्वनि $ प्रतिध्वनि | xargs बेसन | sed "s / ^ \ ((। * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \ "। $ {संसाधन}" src | egrep -v ': 0 $' | wc -l`
  अगर [$ count1 -eq 0]; फिर
      $ गूंजना गूंज
  फाई
किया हुआ

यह मुझे इस तरह का आउटपुट देता है:

Res / मान / activity_strings.xml: activity_more
Res / मान / activity_strings.xml: activity_as_reply_to
Res / मान / db_strings.xml: sql_backlog_count
Res / मान / db_strings.xml: sql_backlog_update_last_resend
...

शांत दृष्टिकोण लेकिन क्या यह जांचता है कि संसाधन का नाम टिप्पणियों या तार में नहीं है? नए एंड्रॉइड स्टूडियो प्रोजेक्ट संरचना के साथ भी कुछ संशोधनों की आवश्यकता है।
मोहम्मद जाफ़र मशहदी

-1

केवल अनुपलब्ध अनुवाद के लिए:

InteliJ का उपयोग करते हुए, अपने InteliJ के पैनल बार पर क्लिक करें: "विश्लेषण करें"> "नाम से भागो निरीक्षण"> प्रकार: अधूरा अनुवाद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.