Apakah ada cara sederhana untuk mengetahui string yang tidak digunakan dalam proyek Android?

152

Saya memiliki proyek Android yang sangat besar dengan banyak string dinyatakan dalam strings.xml. Saya ingin menghapus string yang tidak digunakan di strings.xml.

Apakah ada cara mudah untuk melakukannya?

pengguna556956
sumber

Jawaban:

238

Di Android Studio :

Menu -> Analisis -> Jalankan Inspeksi berdasarkan Nama -> Sumber daya yang tidak digunakan

Centang kotak File mask dan letakkan strings.xmldi bidang teks.

Oded Breiner
sumber
2
Kemudian Anda dapat menentukan Custom scope, memilih Production classes-> app-> valuesuntuk menemukan string, warna yang tidak digunakan ...
Jemshit Iskenderov
2
Dengan SDK Tools 26.0.2 ini tidak menemukan string saya yang tidak digunakan sementara "Temukan penggunaan" tidak menunjukkan penggunaan apa pun dari mereka (dan itu tidak untuk mereka yang benar-benar digunakan).
user905686
BTW ketika string benar-benar digunakan (direferensikan secara dinamis dalam kode), Anda dapat menekan peringatan linter dengantools:ignore="UnusedResources"
jakub.g
4
yang ini tidak berfungsi seperti yang diharapkan. Saya telah mencoba menambahkan string yang tidak digunakan dan memeriksa, tetapi tidak dapat mengidentifikasinya
chikka.anddev
Ini tampaknya rusak, itu mengira sekelompok string saya tidak digunakan, tetapi "menemukan penggunaan" cepat digunakan. Hati-hati.
szaske
37

Berikut ini solusi lain yang cukup mudah. Di menu Android Studio, buka

Refactor> Hapus Sumber Daya yang tidak digunakan ... .

masukkan deskripsi gambar di sini

Klik Pratinjau untuk melihat apa sumber daya yang tidak digunakan dan secara selektif menghapusnya.

Suragch
sumber
1
Ini menghapus banyak sumber daya yang sebenarnya digunakan. Harus membatalkan penghapusan secara manual banyak hal
stoefln
1
@stoefln, jika Anda mengklik Pratinjau, Anda dapat secara manual memilih apa yang akan dihapus dan tidak dihapus.
Suragch
1
berhati-hatilah dengan "Hapus deklarasi @ id yang tidak digunakan juga". Itu menghapus banyak id saya bahwa kode saya benar-benar menggunakan (plugin Ekstensi Android Kotlin - yang akan memungkinkan memulihkan tampilan dari Kegiatan, Fragmen, dan Tampilan)
Dan Alboteanu
28

Dalam kasus saya "Jalankan Inspeksi berdasarkan Nama" tidak berfungsi, meskipun saya menggunakan "Hapus sumber daya yang tidak digunakan".

Larutan:

  1. Buka strings.xml
  2. Klik kedua
  3. Refactor -> Hapus Sumber Daya Tidak Digunakan

Saya tidak tahu mengapa "Hapus Sumber Daya yang Tidak Digunakan" bekerja satu arah tetapi tidak yang lain.

cutiko
sumber
2
Anda dapat melakukannya juga di penjelajah proyek, pilih modul yang Anda inginkan, lalu klik kanan dan refactor> hapus sumber daya yang tidak digunakan, hapus semua jenis sumber daya seperti drawables yang tidak digunakan
FRL
22

Dengan ADT 16 Anda dapat melakukannya sesederhana mungkin. Perbarui ke ADT 16 dan gunakan Android Lint . Ini alat yang luar biasa. Itu dapat menemukan semua sumber daya yang tidak digunakan (tidak hanya string) dan banyak lagi. Dari situs resminya:

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.
Andrei Buneyeu
sumber
11
Pada ADT 20.0.2 Android Lint tidak menemukan String yang tidak digunakan, juga tidak mengklaim. Saya baru saja mengujinya dengan menambahkan string dengan id sepenuhnya acak dan kemudian menjalankan Lint. Saya tidak dapat memilih jawaban di atas, karena saya tidak memiliki reputasi yang cukup :(.
Frank Harper
Seperti @FrankHarper katakan: tidak sebelumnya. Seperti yang dikatakan Lord Flash, sekarang:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc
3

Untuk memeriksa string.xml.

Sangat mudah (setidaknya dalam versi Eclipse saya)

Di Eclipse untuk Android (saya punya versi v22.6.2-1085508)

  • Klik kanan pada nama proyek di "Package explorer"
  • Pilih "Alat Android".
  • Pilih "Run Lint: Periksa kesalahan umum".

Sekarang ketika Anda membuka strings.xml, Anda akan melihat bahwa string yang tidak digunakan disorot.

Anda dapat memperbaiki masalah potensial lainnya.

Gabriel Klein
sumber
ini berguna untuk menemukan string yang tidak memiliki terjemahan dalam file default
ePeace
3

Di Android Studio Tekan

Ctlr + Alt + Shift + i

Pilih -> Sumber daya yang tidak digunakan.
Ini menunjukkan kepada Anda string dan ikon yang tidak digunakan.

Terima kasih Selamat coding :)

Happy Singh
sumber
3

Ini adalah bagaimana saya melakukannya dengan Android 3.3.

Periksa perubahan yang belum disimpan ke repositori Anda.

  • Klik kanan modul Aplikasi Anda -> Refactor -> Hapus Sumber Daya Tidak Digunakan -> Pratinjau
  • Dalam Pratinjau Refactoring, tutup kedua tampilan ('Item yang akan dihapus' & 'Deklarasi Sumber Daya Tidak Digunakan')
  • Klik kanan 'Item yang akan dihapus' -> Kecualikan
  • Klik kanan 'Deklarasi Sumber Daya Tidak Digunakan' -> Kecualikan
  • Sekarang perluas 'Deklarasi Sumber Daya Tidak Terpakai' dan di bawah itu temukan strings.xml spesifik aplikasi Anda (akan ada beberapa strings.xmls)
  • Klik kanan strings.xml -> Include itu
  • Lakukan Refactor! Semua string yang tidak digunakan dari file xml dihapus!

Catatan: Cobalah membangun proyek. Jika kompilasi gagal, kemungkinan besar strings.xml ini dirujuk dari beberapa tata letak / menu xmls, yang sendiri tidak digunakan. Jadi tata letak xmls itu juga dapat dihapus secara manual!

Bangun dan jalankan. Uji!

AAP
sumber
-1

Jalankan skrip ini dari root proyek Anda.

untuk resourcefile di `find res / values ​​/ *. xml`; melakukan
  untuk stringname di `grep '. * / \ 1 / g'`; melakukan
    count1 = `grep -rc" R.string. $ {stringname} "src | egrep -v ': 0 $' | wc -l`
    count2 = `grep -rc" @string / $ {stringname} "res / layout | egrep -v ': 0 $' | wc -l`
    count3 = `grep -rc" @string / $ {stringname} "res / menu | 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`
    jika [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; kemudian
      echo $ resourcefile: $ stringname
    fi
  selesai
selesai

untuk resourcename di `find res / drawable * -type f -name '*. ???'`; melakukan
  resource = `echo $ resourcename | xargs basename | sed "s / ^ \ (. * *) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .drawable \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  count2 = `grep -rc" @drawable / $ {resource} "res / layout | egrep -v ': 0 $' | wc -l`
  count3 = `grep -rc" @drawable / $ {resource} "res / drawable * / *. xml | egrep -v ': 0 $' | wc -l`
  count4 = `grep -rc" @drawable / $ {resource} "res / menu | egrep -v ': 0 $' | wc -l`
  count5 = `grep -rc" @drawable / $ {resource} "AndroidManifest.xml | egrep -v '^ 0 $' | wc -l`
  jika [$ count1 -eq 0 -a $ count2 -eq 0 -a $ count3 -eq 0 -a $ count4 -eq 0 -a $ count5 -eq 0]; kemudian
      echo $ resourcename
  fi
selesai

untuk nama sumber di `find res / layout / *. xml`; melakukan
  resource = `echo $ resourcename | xargs basename | sed "s / ^ \ (. * *) \ .... $ / \ 1 / g" `
  count1 = `grep -rc" R \ .layout \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  if [$ count1 -eq 0]; kemudian
      echo $ resourcename
  fi
selesai

Ini memberi saya output semacam ini:

res / values ​​/ activity_strings.xml: activity_more
res / values ​​/ activity_strings.xml: activity_as_reply_to
res / values ​​/ db_strings.xml: sql_backlog_count
res / values ​​/ db_strings.xml: sql_backlog_update_last_resend
...
Carl D'Halluin
sumber
Pendekatan keren tetapi apakah itu memeriksa apakah nama sumber daya tidak dalam komentar atau string? Perlu beberapa modifikasi agar kompatibel dengan struktur proyek Android Studio baru juga.
Mohammad Jafar Mashhadi
-1

Hanya untuk terjemahan yang hilang:

Menggunakan InteliJ, klik pada bilah panel InteliJ Anda: "Analisis"> "Jalankan Inspeksi berdasarkan Nama"> Ketik: Terjemahan tidak lengkap

sancho21
sumber