Hapus semua sumber daya yang tidak digunakan dari proyek android

386

Saya ingin menghapus semua tata letak, string, drawable, warna, dll yang tidak digunakan dari direktori res Android saya. Apakah ada alat yang akan memberi saya daftar file dan saya dapat menghapus dari repositori dan elemen dalam file spesifik (misalnya entri string yang tidak digunakan) yang tidak lagi digunakan?

Steve Prentice
sumber

Jawaban:

734

Anda dapat dengan mudah mencari sumber daya yang tidak digunakan dari Android Studio. Cukup tekan CtrlAltShiftidan ketik " sumber daya yang tidak digunakan " (tanpa tanda kutip). Itu akan mengeksekusi serat. Cara super mudah untuk menjalankan perintah lint (dan hal-hal lain dari IDE).

ATAU

Di Android Studio Menu > Refactor > Hapus Sumber yang Tidak Digunakan ...

Pilih sumber daya yang ingin Anda hapus. Anda dapat mengecualikan sumber daya yang ingin Anda simpan dengan mengklik kanan pada item sumber daya.

Gunakan Do Refactor untuk menghapus semua Sumber Daya sekaligus.

Pembaruan: gunakan OptionShiftiuntuk mac

bakua
sumber
55
cmd + Alt + Shift untuk mac
Jesus Dimrix
5
@MikeMilla Klik kanan pada file yang ingin Anda hapus dan klik pada opsi yang mengatakan "Terapkan Perbaikan Lint". Untuk menghapus banyak file sekaligus, pilihlah.
Saket Jain
28
Harap diperhatikan bahwa menggunakan pendekatan ini juga akan menghapus sumber daya apa pun yang digunakan secara terprogram.
Prokash Sarkar
23
Hancurkan seluruh proyek saya ... Bukan langkah yang bijak
egorikem
7
Dengan AS 3.0, fitur ini menghapus beberapa file tata letak yang digunakan. Lebih baik buat cadangan atau git komit sebelum mencoba ini.
StoneLam
99

Sejak ADT 16 Anda dapat menggunakan Android Lint . Ini alat yang luar biasa.

Android Lint adalah alat baru untuk ADT 16 (dan Alat 16) yang memindai sumber proyek Android untuk bug potensial.

Berikut adalah beberapa contoh jenis kesalahan yang dicari:

  • Terjemahan yang hilang (dan terjemahan yang tidak digunakan)
  • Masalah kinerja tata letak (semua masalah yang ditemukan alat tata letak lama, dan banyak lagi)
  • Sumber daya yang tidak digunakan
  • Ukuran array yang tidak konsisten (ketika array didefinisikan dalam banyak konfigurasi)
  • Masalah aksesibilitas dan internasionalisasi (string hardcode, contentDescription hilang, dll)
  • Masalah ikon (seperti kepadatan yang hilang, ikon duplikat, ukuran yang salah, dll)
  • Masalah kegunaan (seperti tidak menentukan jenis input pada bidang teks)
  • Manifestasikan kesalahan dan banyak lagi.

Namun, ada beberapa masalah (tidak tahu apakah sudah diperbaiki) dan jika Anda ingin menghapus ratusan sumber daya yang seharusnya tidak digunakan, saya akan merekomendasikan untuk secara manual mengkompilasi proyek beberapa kali selama penghilangan sumber daya untuk memastikan bahwa Lint tidak melakukannya. hapus sesuatu yang dibutuhkan.

Andrei Buneyeu
sumber
10
Saya tidak akan terlalu bergantung pada apa yang Lint usulkan sebagai sumber daya yang tidak digunakan terutama jika Anda melakukan banyak pencarian sumber daya dalam kode Anda alih-alih dalam xml. Lint akan dalam hal itu menemukan banyak sumber daya yang tidak digunakan saat mereka sebenarnya.
MrJre
61
Di Android Studio, Anda dapat menggunakan Analyze > Inspect Code...untuk menemukan sejumlah hal, termasuk Deklarasi dan Metode yang Tidak Digunakan .
Joshua Pinter
8
Contoh, jika Anda ingin menggunakan baris perintah:lint --check UnusedResources <project-path>
espinchi
41
Tetapi bagaimana cara menghapusnya?
Martin Pfeffer
1
Apakah ada cara untuk menghapus semuanya Extra Translationsbersama / secara otomatis?
rishabhmhjn
41

Karena Dukungan untuk ADT di Eclipse telah berakhir, kita harus menggunakan Android Studio.

Di Android Studio 2.0+ digunakan Refactor > Remove Unused Resources...

masukkan deskripsi gambar di sini

pelaku diet
sumber
2
Sepertinya cara ini menghilangkan sumber daya yang digunakan secara programatik
THZ
1
Jangan lupa Tinjau di langkah berikutnya, jika tidak, beberapa file yang digunakan juga dihapus.
Karan Sharma
38

Sistem pembangunan Gradle untuk Android mendukung "penyusutan sumber daya": penghapusan sumber daya secara otomatis yang tidak digunakan, saat membangun, di aplikasi yang dikemas. Selain menghapus sumber daya dalam proyek Anda yang sebenarnya tidak diperlukan saat runtime, ini juga menghapus sumber daya dari perpustakaan tempat Anda bergantung jika mereka tidak benar-benar dibutuhkan oleh aplikasi Anda.

Untuk mengaktifkannya, tambahkan baris shrinkResources true di file gradle Anda.

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

Lihat dokumentasi resmi di sini,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking

Prokash Sarkar
sumber
2
shrinkResources perlu proguard untuk diaktifkan. i hv masalah mengaktifkan proguard :-(
Tixeon
shrinkResources hanya diperhitungkan jika minifyEnabled benar minifyEnabled true
Eldhopj
16

Kami membuka sumber alat yang menghapus semua sumber daya yang tidak digunakan dalam proyek android Anda berdasarkan pada keluaran serat. Itu dapat ditemukan di sini: https://github.com/KeepSafe/android-resource-remover

philipp
sumber
bagaimana saya menggunakan ini untuk menghapus sumber daya yang tidak digunakan dari proyek studio android saya.
Yamini
15

Waspadalah jika Anda menggunakan berbagai rasa saat menjalankan serat. Lint dapat memberikan sumber daya palsu yang tidak digunakan tergantung pada rasa yang telah Anda pilih.

MRodrigues
sumber
Bagaimana cara menghindarinya?
NickUnuchek
Sampai sekarang, saya belum menemukan cara untuk melakukannya. Kecuali menjalankan serat untuk setiap rasa dan kemudian menandai item yang tidak digunakan pada kedua rasa.
MRodrigues
8

Di Android Studio 2.0 dan di atas dalam menu pilih Refactor -> klik Hapus Sumber Daya Tidak Digunakan ...

(atau)

pintas juga tersedia

Tekan Ctlr + Alt + Shift + i satu kotak dialog akan muncul, lalu ketik yang tidak digunakan , Anda akan menemukan sejumlah opsi pilih dan hapus sumber daya yang tidak digunakan

Ramesh R
sumber
7

Di Android Studio,

Analisis -> Jalankan Inspeksi berdasarkan Nama

(Pintasan Untuk Mac shift + perintah + opsi + i, Ctrl + Shift + A di Windows / Linux).

Dan ketik 'sumber daya yang tidak digunakan'.

Dengan cara ini Anda dapat menghapus sumber daya yang tidak terpakai, variabel, simbol, lokalisasi, perpustakaan .. dll.

Pilih inspeksi yang diinginkan dari daftar, lalu pilih lingkup inspeksi -> OK masukkan deskripsi gambar di sini

Lins Louis
sumber
6

Perhatian pengembang Android Wear : "Hapus Sumber Daya Tidak Digunakan" akan menghapus file xml di mana Anda mendeklarasikan nama kemampuan (res / values ​​/ wear.xml) dan telepon tidak akan dapat terhubung ke arloji. Saya menghabiskan waktu berjam-jam untuk mencari tahu bug ini di aplikasi saya.

steliosf
sumber
Dan juga menghapus ikon round mipmap, misalnya.
artem
Benar. Secara umum, 'Hapus Sumber Daya yang Tidak Digunakan' tidak direkomendasikan sama sekali karena mungkin membuat banyak bug yang tidak bisa dilacak.
steliosf
4

Untuk memeriksa string.xml.

Sangat mudah (setidaknya dalam versi Eclipse saya)

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

  • Klik kiri 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
+1 solusi bagus, sobat. Hal ini memungkinkan untuk menjalankan lint untuk pemeriksaan yang dipilih juga - persis apa yang saya butuhkan .... (ps hampir sama dengan Android Studio: klik kanan di Project Explorer, pilih Analisis , pilih Periksa Kode atau Jalankan Inspeksi dengan Nama ): D
Trinimon
Ini tidak banyak membantu dalam menghilangkan string yang tidak digunakan. Apakah Anda menyarankan untuk menghapusnya secara manual seperti sebelumnya?
Stan
"Lint" adalah cara terbaik untuk "membersihkan proyek Anda". Anda masih harus menghapusnya secara manual, tetapi mereka disorot dan Anda segera melihat bahwa mereka tidak digunakan. Ini beberapa menit bekerja untuk proyek ukuran sedang. :)
Gabriel Klein
3

Mungkin Andround Unused Resources yang berguna adalah aplikasi Java yang akan memindai proyek Anda untuk sumber daya yang tidak digunakan. Sumber daya yang tidak terpakai tidak perlu menghabiskan ruang, menambah waktu pembuatan, dan mengacaukan daftar lengkapi-otomatis IDE.

Untuk menggunakannya, pastikan direktori kerja Anda adalah root dari proyek Android Anda, dan jalankan:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/

pengguna1632014
sumber
1
dimanapun saya taruh itu terus mengatakan bahwa itu bukan akar proyek yang benar
kingston
2

Ketika kita mendefinisikan menyusutkan sumber daya benar saat itu kita juga dapat menentukan sumber daya mana yang ingin kita simpan dan mana yang tidak saya tambahkan file xml di res / folder mentah bernama keep.xml

sebelum melangkah lebih jauh, buatlah alat yang ditandatangani dan diperiksa di apk alat analisis yang akan menunjukkan drawable-xhdpi-v4 memiliki messenger_button_send_round_shadow.png yang ingin saya hapus untuk pengujian ini

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

dengan melakukan messenger_ * semua file mulai dari name messenger di folder drawable akan dihapus atau sebaliknya saya harus mendefinisikan file tertentu yang akan dihapus

sehingga dengan cara itu Anda dapat menghapus file dari pustaka itu sendiri, Anda juga dapat menghapus tata letak dengan @ tata letak / nama tata letak jika gambar itu telah digunakan oleh tata letak dan ....

Parth Dave
sumber
1

Ada jawaban yang sangat bagus di sini yang menyarankan alat yang bagus

Tetapi jika Anda bermaksud untuk menghapus png-drawables (atau file gambar lainnya ), Anda juga harus mempertimbangkan untuk memindahkan semua folder drawable-xxxx dari proyek Anda ke folder sementara, kemudian lakukan membangun kembali semua, dan lihat build. daftar pesan yang akan memberi tahu Anda mana yang hilang.

Ini dapat berguna secara khusus jika Anda ingin mendapatkan ikhtisar sumber daya mana yang Anda gunakan secara efektif dan mungkin menggantinya dengan font ikon atau sumber daya svg, mungkin dengan bantuan pustaka Ikon Android .

Daniel F
sumber
ini menghabiskan waktu, tapi saya setuju ini juga, solusi. Saya sedang melakukan ini sekarang
Dika
0

Android Assets Viewer dirancang untuk membantu memeriksa secara visual grafik yang dikemas (sebagai drawable) dalam .apk Anda (Anda juga dapat mengunggah file zip folder res Anda jika Anda mau):

http://www.cellebellum.net/AndroidAssetsViewer/

Jadi untuk menghapus sumber daya yang tidak digunakan, ini mungkin bekerja dengan baik bersama dengan cek Lint untuk membantu memastikan semua yang seharusnya ada. Ini juga membantu Anda mengidentifikasi beberapa masalah potensial lainnya dengan drawable Anda: bucket salah, grafik salah, dll.

straya
sumber
0

Setelah Anda menjalankan Lint di Android Studio dan menemukan semua sumber daya yang tidak digunakan, Anda dapat mengklik salah satunya dari tab Inspeksi. Ini memberikan beberapa detail tentang masalah ini dan beberapa opsi untuk memperbaikinya. Salah satunya adalah Hapus Semua Sumber Daya Yang Tidak Digunakan. Memilih opsi itu akan menghapus semua sumber daya yang tidak digunakan.

rohans310
sumber