Android projesinde kullanılmayan dizeleri bulmanın basit bir yolu var mı?


152

Birçok dize ilan ile büyük bir Android projem var strings.xml. Kullanılmayan dizeleri kaldırmak istedim strings.xml.

Bunu yapmanın kolay bir yolu var mı?

Yanıtlar:


239

On Android Studio :

Menü -> Analiz Et -> Denetimi İsme Göre Çalıştır -> Kullanılmayan kaynaklar

Kontrol Dosya maskesi (ler) onay kutusu ve koyun strings.xmlmetin alanına.


2
Daha sonra, tanımlanmamış dizeleri, renkleri bulmak için -> -> Custom scopeseçerek tanımlayabilirsiniz ...Production classesappvalues
Jemshit Iskenderov

2
SDK Tools 26.0.2 ile bu, kullanılmayan dizelerimi bulmazken "Kullanımları bul" bunların herhangi bir kullanımını göstermez (ve gerçekte kullanılanlar için de geçerlidir).
user905686

BTW bir dize gerçekten kullanıldığında (kodda dinamik olarak referans verilir), linter uyarılarınıtools:ignore="UnusedResources"
jakub.g

4
bu beklendiği gibi çalışmıyor. Kullanılmayan dize ve inceleme ekleyerek denedim, ancak tanımlamak mümkün değil
chikka.anddev

Bu kırık görünüyor, benim dizeleri bir demet kullanılmamış olduğunu düşündüm, ama hızlı bir "kullanımları bulmak" bulundu. Dikkatli ol.
szaske

37

İşte oldukça kolay başka bir çözüm. Android Studio menüsünde şu adrese gidin:

Elden Geçirme> Kullanılmayan Kaynaklar dır ... .

resim açıklamasını buraya girin

Kullanılmayan kaynakların ne olduğunu görmek ve bunları seçici olarak kaldırmak için Önizleme'yi tıklayın .


1
Bu, aslında kullanılan birçok kaynağı kaldırdı. El ile bir sürü şey silme gerekiyordu
stoefln

1
@stoefln, Önizleme'yi tıklatırsanız, nelerin silineceğini ve silinmeyeceğini elle seçebilirsiniz.
18'de Suragch

1
"Kullanılmayan @ id bildirimlerini de sil" seçeneğine dikkat edin. Kodumun gerçekten kullandığı
kimliğin birçoğunu sildi

28

Benim durumumda "Kullanılmayan Kaynakları Kaldır" ı kullanmama rağmen, "İsme Göre Çalıştır" çalışmadı.

Çözüm:

  1. Strings.xml dosyasını açın
  2. İkincil tıklama
  3. Refactor -> Kullanılmayan Kaynakları Kaldır

Neden "Kullanılmayan Kaynakları Kaldır" ın bir şekilde işe yarayıp yaramadığına dair hiçbir fikrim yok.


2
Bunu proje gezgininde de yapabilir, istediğiniz modülü seçebilir, ardından sağ tıklayıp refactor> kullanılmayan kaynakları kaldırabilir, kullanılmayan çekilebilir malzemeler gibi her türlü kaynağı kaldırabilirsiniz
FRL

22

ADT 16 ile mümkün olduğunca basit yapabilirsiniz. ADT 16'ya güncelleyin ve Android Lint'i kullanın . Gerçekten inanılmaz bir araç. Bu bulabilirsiniz tüm kullanılmayan kaynakları (sadece dizeleri) ve daha birçok. Resmi sitesinden:

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'den itibaren Android Lint, kullanılmayan Dizeleri bulamaz ve iddia etmez. Sadece tamamen rasgele bir kimliğe sahip bir dize ekleyip daha sonra Lint çalıştırarak test ettim. Yukarıda cevap veremedim, çünkü yeterince itibarım yok :(.
Frank Harper

@FrankHarper'ın dediği gibi: daha önce olmadı. Lord Flash'ın dediği gibi, şu anda:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc

3

String.xml dosyasını kontrol etmek için.

Kolay (en azından Eclipse versiyonumda)

Eclipse for Android (v22.6.2-1085508 sürümüne sahibim)

  • "Paket gezgini" içinde proje adına sağ tıklayın
  • "Android Araçları" nı seçin.
  • "Tiftik Çalıştır: Yaygın Hataları Kontrol Et" i seçin.

Şimdi strings.xml dosyasını açtığınızda, kullanılmayan dizenin vurgulandığını göreceksiniz.

Diğer olası sorunları çözebilirsiniz.


bu, varsayılan dosyada çevirisi olmayan dizeleri bulmak için kullanışlıdır
ePeace

3

Android Studio Press'te

i + ctlr + Alt + Üst

Seç -> Kullanılmayan kaynaklar
Kullanılmayan dizeleri ve simgeleri gösterir.

Teşekkürler Mutlu kodlama :)


3

Android 3.3 ile böyle yaptım.

Deponuzda kaydedilmemiş değişiklikleri kontrol edin.

  • Uygulamanızın modülünü sağ tıklayın -> Refactor -> Kullanılmayan Kaynakları Kaldır -> Önizleme
  • Yeniden Düzenleme Önizlemesinde, hem görünümleri daraltın ('Silinecek öğeler' & 'Kullanılmayan Kaynak Bildirimleri')
  • 'Silinecek öğeler' -> Hariç tut'u sağ tıklayın
  • 'Kullanılmayan Kaynak Beyanları'nı sağ tıklayın -> Hariç tut
  • Şimdi 'Kullanılmayan Kaynak Beyanları'nı genişletin ve bunun altında uygulamanıza özgü strings.xml dosyasını bulun (birden fazla strings.xmls olacaktır)
  • Strings.xml dosyasına sağ tıklayın -> Ekle
  • Refactor yapın! Xml dosyasındaki kullanılmayan tüm dizeler silinir!

Not: Projeyi oluşturmayı deneyin. Derleme başarısız olursa, büyük olasılıkla bu strings.xml dosyasının kullanılmayan bazı mizanpaj / menü xmls dosyalarından kaynaklanıyor olması muhtemeldir. Böylece bu mxmls düzeni manuel olarak da silinebilir!

Oluşturun ve çalıştırın. Ölçek!


-1

Bu komut dosyasını projenizin kök dizininden çalıştırın.

`find res / değerleri / *. xml`deki kaynak dosyası için; yapmak
  `` grep '' içindeki dize adı için. * / \ 1 / g'`; yapmak
    count1 = `grep -rc" R.string. $ {stringname} "src | egrep -v ': 0 $' | wc -l`
    count2 = `grep -rc" @string / $ {stringname} "res / düzen | egrep -v ': 0 $' | wc -l`
    count3 = `grep -rc" @string / $ {stringname} "res / menü | 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`
    eğer [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; sonra
      echo $ resourcefile: $ stringname
    fi
  tamam
tamam

`res Res / drawable * -type f -name '* içindeki kaynak adı için. ???' '; yapmak
  resource = `echo $ kaynakadı | xargs taban adı | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .drawable \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  count2 = `grep -rc" @drawable / $ {resource} "res / düzen | egrep -v ': 0 $' | wc -l`
  count3 = `grep -rc" @drawable / $ {resource} "res / çekilebilir * / *. xml | egrep -v ': 0 $' | wc -l`
  count4 = `grep -rc" @drawable / $ {resource} "res / menü | egrep -v ': 0 $' | wc -l`
  count5 = `grep -rc" @drawable / $ {resource} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
  eğer [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; sonra
      echo $ kaynak adı
  fi
tamam

"res / layout / *. xml`deki kaynakadı için; yapmak
  resource = `echo $ kaynakadı | xargs taban adı | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  [$ count1 -eq 0] ise; sonra
      echo $ kaynak adı
  fi
tamam

Bana bu tür çıktılar veriyor:

res / değerleri / activity_strings.xml: activity_more
res / değerler / activity_strings.xml: activity_as_reply_to
res / değerler / db_strings.xml: sql_backlog_count
res / değerler / db_strings.xml: sql_backlog_update_last_resend
...

Havalı bir yaklaşım, ancak kaynak adının yorumlarda veya dizelerde olup olmadığını kontrol ediyor mu? Yeni Android Studio proje yapısıyla da uyumlu olması için bazı değişikliklerin yapılması gerekiyor.
Mohammad Jafar Mashhadi

-1

Yalnızca eksik çeviri için:

InteliJ kullanarak InteliJ'nizin panel çubuğuna tıklayın: "Analiz"> "Denetimi İsme Göre Çalıştır"> Yaz: Eksik çeviri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.