ลบทรัพยากรที่ไม่ได้ใช้ทั้งหมดออกจากโครงการ android


386

ฉันต้องการลบเลย์เอาต์สตริง drawable สีและอื่น ๆ ที่ไม่ได้ใช้ออกจากไดเรกทอรี res Android ของฉัน มีเครื่องมือใดบ้างที่จะให้รายชื่อไฟล์แก่ฉันและฉันสามารถลบออกจากที่เก็บและองค์ประกอบภายในไฟล์เฉพาะ (เช่นรายการสตริงที่ไม่ได้ใช้) ที่ไม่ได้ใช้อีกต่อไป?

คำตอบ:


734

คุณสามารถค้นหาทรัพยากรที่ไม่ได้ใช้จาก Android Studio ได้อย่างง่ายดาย เพียงกดCtrlAltShiftiและพิมพ์ " ทรัพยากรที่ไม่ได้ใช้ " (ไม่มีเครื่องหมายคำพูด) ที่จะรันผ้าสำลี วิธีที่ง่ายสุดในการรันคำสั่ง lint (และสิ่งอื่น ๆ จาก IDE)

หรือ

ในเมนู Android Studio > Refactor > ลบทรัพยากรที่ไม่ได้ใช้ ...

เลือกทรัพยากรที่คุณต้องการลบ คุณสามารถยกเว้นทรัพยากรที่คุณต้องการเก็บไว้ได้โดยคลิกขวาที่รายการทรัพยากร

ใช้Do Refactorเพื่อลบทรัพยากรทั้งหมดในครั้งเดียว

อัปเดต:ใช้OptionShiftiสำหรับ mac


55
cmd + Alt + Shift สำหรับ mac
Jesus Dimrix

5
@MikeMilla คลิกขวาที่ไฟล์ที่คุณต้องการลบแล้วคลิกตัวเลือกที่ระบุว่า "Apply Lint Fixes" หากต้องการลบหลายไฟล์พร้อมกันให้เลือก
Saket Jain

28
โปรดทราบว่าการใช้วิธีการนี้จะลบทรัพยากรใด ๆ ที่ใช้โดยทางโปรแกรมด้วย
Prokash Sarkar

23
ทำลายโครงการทั้งหมดของฉัน ... ไม่ใช่การเคลื่อนไหวที่ฉลาดนัก
egorikem

7
ด้วย AS 3.0 ฟีเจอร์นี้จะลบไฟล์เลย์เอาต์ที่ใช้แล้วบางส่วน ทำการสำรองข้อมูลหรือคอมไพล์ดีกว่าก่อนลองทำสิ่งนี้
StoneLam

99

ตั้งแต่ ADT 16 คุณสามารถใช้Android ผ้าสำลี มันเป็นเครื่องมือที่น่าทึ่งจริงๆ

Android Lint เป็นเครื่องมือใหม่สำหรับ ADT 16 (และเครื่องมือ 16) ซึ่งจะสแกนแหล่งที่มาของโครงการ Android เพื่อหาจุดบกพร่องที่อาจเกิดขึ้น

นี่คือตัวอย่างของข้อผิดพลาดประเภทที่ค้นหา:

  • การแปลที่หายไป (และการแปลที่ไม่ได้ใช้)
  • ปัญหาประสิทธิภาพการทำงานของเค้าโครง (ทุกปัญหาเกี่ยวกับเครื่องมือ layoutopt เก่าที่ใช้ในการค้นหาและอื่น ๆ )
  • ทรัพยากรที่ไม่ได้ใช้
  • ขนาดอาร์เรย์ที่ไม่สอดคล้องกัน (เมื่อมีการกำหนดอาร์เรย์ในหลาย ๆ การกำหนดค่า)
  • ปัญหาการเข้าถึงและการทำให้เป็นสากล (สตริงฮาร์ดโค้ดเนื้อหาที่ขาดหายไปคำอธิบาย ฯลฯ )
  • ปัญหาไอคอน (เช่นความหนาแน่นหายไปไอคอนซ้ำขนาดผิดพลาด ฯลฯ )
  • ปัญหาการใช้งาน (เช่นไม่ระบุประเภทอินพุตในฟิลด์ข้อความ)
  • ข้อผิดพลาดอย่างชัดแจ้งและอื่น ๆ อีกมากมาย

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


10
ฉันจะไม่พึ่งพาสิ่งที่ผ้าสำลีเสนอเป็นทรัพยากรที่ไม่ได้ใช้โดยเฉพาะอย่างยิ่งถ้าคุณทำการค้นหาทรัพยากรจำนวนมากในรหัสของคุณแทนที่จะเป็น xml ในกรณีนี้ผ้าสำลีจะพบทรัพยากรจำนวนมากที่ไม่ได้ใช้งานในขณะที่พวกเขาเป็นจริง
MrJre

61
ใน Android สตูดิโอ, คุณสามารถใช้Analyze > Inspect Code...เพื่อหาจำนวนของสิ่งรวมทั้งที่ไม่ได้ใช้การประกาศและวิธีการ
Joshua Pinter

8
ตัวอย่างเช่นหากคุณต้องการใช้บรรทัดคำสั่ง:lint --check UnusedResources <project-path>
espinchi

41
แต่จะลบได้อย่างไร
Martin Pfeffer

1
มีวิธีลบทั้งหมดExtra Translationsเข้าด้วยกัน / โดยอัตโนมัติหรือไม่
rishabhmhjn

41

เนื่องจากการสนับสนุน ADT ใน Eclipse สิ้นสุดลงเราจึงต้องใช้ Android Studio

ในการใช้ Android Studio 2.0+ Refactor > Remove Unused Resources...

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


2
ดูเหมือนว่าวิธีนี้จะลบทรัพยากรที่ใช้โดยทางโปรแกรม
THZ

1
อย่าลืมตรวจสอบในขั้นตอนถัดไปมิฉะนั้นไฟล์ที่ใช้แล้วบางไฟล์ก็จะถูกลบเช่นกัน
Karan Sharma

38

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

หากต้องการเปิดใช้งานให้เพิ่ม line shrinkResources จริงในไฟล์ gradle ของคุณ

   android {
        ...

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

ตรวจสอบเอกสารอย่างเป็นทางการที่นี่

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


2
shrinkResources จำเป็นต้องเปิดใช้งาน proguard ฉันมีปัญหาในการเปิดใช้งาน proguard :-(
Tixeon

shrinkResources นำมาพิจารณาเฉพาะในกรณีที่ minifyEnabled เป็นจริง minifyEnabled true
Eldhopj

16

เราเปิดโอเพนซอร์สเครื่องมือที่จะลบทรัพยากรที่ไม่ได้ใช้ทั้งหมดในโครงการ Android ของคุณตามเอาท์พุทผ้าสำลี สามารถพบได้ที่นี่: https://github.com/KeepSafe/android-resource-remover


ฉันจะใช้สิ่งนี้เพื่อลบทรัพยากรที่ไม่ได้ใช้จากโครงการ android studio ของฉันได้อย่างไร
Yamini

15

ระวังถ้าคุณใช้หลายรสชาติเมื่อใช้ผ้าสำลี ผ้าสำลีอาจให้ทรัพยากรที่ไม่ได้ใช้เป็นเท็จขึ้นอยู่กับรสชาติที่คุณเลือก


จะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
NickUnuchek

จนถึงตอนนี้ฉันยังไม่พบวิธีที่จะทำ ยกเว้นการใช้ผ้าสำลีสำหรับแต่ละรสชาติจากนั้นทำเครื่องหมายรายการที่ไม่ได้ใช้กับทั้งสองรสชาติ
MRodrigues

8

ใน Android Studio 2.0 และสูงกว่าในเมนูเลือก Refactor -> คลิกที่ลบทรัพยากรที่ไม่ได้ใช้ ...

(หรือ)

ทางลัดยังมีอยู่

กด Ctlr + Alt + Shift + i หนึ่งกล่องโต้ตอบจะปรากฏขึ้นจากนั้นพิมพ์ไม่ได้ใช้คุณจะพบจำนวนตัวเลือกที่เลือกและลบทรัพยากรที่ไม่ได้ใช้


7

ใน Android Studio

วิเคราะห์ -> เรียกใช้การตรวจสอบตามชื่อ

(ทางลัดสำหรับ Mac shift + command + ตัวเลือก + i, Ctrl + Shift + A บน Windows / Linux)

และพิมพ์ 'ทรัพยากรที่ไม่ได้ใช้'

วิธีนี้คุณสามารถลบทรัพยากรตัวแปรสัญลักษณ์การแปลภาษาไลบรารีที่ไม่ได้ใช้ ฯลฯ ได้

เลือกการตรวจสอบที่ต้องการจากรายการจากนั้นเลือกขอบเขตการตรวจสอบ -> ตกลง ป้อนคำอธิบายรูปภาพที่นี่


6

ข้อควรระวังนักพัฒนา Android Wear : "ลบทรัพยากรที่ไม่ได้ใช้" จะลบไฟล์ xml ที่คุณประกาศชื่อความสามารถ (res / values ​​/ wear.xml) และโทรศัพท์จะไม่สามารถเชื่อมต่อกับนาฬิกาได้ ฉันใช้เวลาหลายชั่วโมงในการหาจุดบกพร่องนี้ในแอพของฉัน


และยังลบไอคอน mipmap รอบตัวอย่างเช่น
artem

แก้ไข. โดยทั่วไปไม่ควรแนะนำ 'ลบทรัพยากรที่ไม่ได้ใช้' เนื่องจากอาจสร้างข้อบกพร่องที่ไม่สามารถตรวจสอบได้
steliosf

4

เพื่อตรวจสอบ string.xml

ง่ายมาก (อย่างน้อยใน Eclipse รุ่นของฉัน)

ใน Eclipse สำหรับ Android (ฉันมีรุ่น v22.6.2-1085508)

  • คลิกซ้ายที่ชื่อโครงการใน "Package explorer"
  • เลือก "เครื่องมือ Android"
  • เลือก "Run Lint: ตรวจสอบข้อผิดพลาดทั่วไป"

ตอนนี้เมื่อคุณเปิด strings.xml คุณจะเห็นว่ามีการเน้นสตริงที่ไม่ได้ใช้

คุณสามารถแก้ไขปัญหาที่อาจเกิดขึ้นอื่น ๆ


+1 ทางออกที่ดีเพื่อน มันช่วยให้รันผ้าสำลีสำหรับการตรวจสอบที่เลือกเช่นกัน - สิ่งที่ฉันต้องการ .... (ps เกือบจะเหมือนกันกับ Android Studio: คลิกขวาใน Project Explorer เลือกวิเคราะห์เลือก ตรวจสอบรหัสหรือเรียกใช้การตรวจสอบตามชื่อ ): D
Trinimon

สิ่งนี้ไม่ได้ช่วยอะไรมากในการลบสตริงที่ไม่ได้ใช้ คุณแนะนำให้ลบออกด้วยตนเองเหมือนก่อนหรือไม่
Stan

"ผ้าสำลี" เป็นวิธีที่ยอดเยี่ยมในการ "ล้างข้อมูลโครงการของคุณ" คุณยังคงต้องลบออกด้วยตนเอง แต่มีการเน้นและคุณทันทีเห็นว่าพวกเขาไม่ได้ใช้ ใช้เวลาสองสามนาทีในโครงการขนาดกลาง :)
Gabriel Klein

3

อาจเป็นประโยชน์ Andround Unused Resources เป็นแอปพลิเคชัน Java ที่จะสแกนโครงการของคุณสำหรับทรัพยากรที่ไม่ได้ใช้ ทรัพยากรที่ไม่ได้ใช้จำเป็นต้องใช้พื้นที่เพิ่มเวลาในการสร้างและถ่วงรายการเติมข้อความอัตโนมัติของ IDE

หากต้องการใช้ให้แน่ใจว่าไดเรกทอรีทำงานของคุณเป็นรากของโครงการ Android ของคุณและเรียกใช้:

java -jar AndroidUnusedResources.jar

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


1
ที่ฉันเคยใส่มันก็บอกว่ามันไม่ใช่รากที่ถูกต้องของโครงการ
kingston

2

เมื่อเรากำหนดทรัพยากรหดตัวจริงเวลานั้นเรายังสามารถกำหนดทรัพยากรที่เราต้องการเก็บไว้และสิ่งที่ฉันไม่ได้เพิ่มไฟล์ xml ในโฟลเดอร์ res / raw ที่ชื่อว่า keep.xml

ก่อนที่จะไปสร้างบิลด์เดียวและตรวจสอบในเครื่องมือวิเคราะห์ apk ซึ่งจะแสดง drawable-xhdpi-v4 มี messenger_button_send_round_shadow.png ซึ่งฉันต้องการลบสำหรับการทดสอบนี้

<?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_*"  />

โดยทำ messenger_ * ไฟล์ทั้งหมดที่เริ่มต้นจากชื่อ messenger ในโฟลเดอร์ drawable จะถูกลบออกหรือวิธีอื่น ๆ คือฉันได้กำหนดไฟล์เฉพาะที่จะลบ

เพื่อให้คุณสามารถลบไฟล์ออกจากไลบรารีได้ด้วยตนเองคุณยังสามารถลบเลย์เอาต์โดย @ layout / layout layout ได้หากมีการใช้ drawable โดย layout และอื่น ๆ ....


1

มีคำตอบที่ยอดเยี่ยมจริง ๆ ในที่นี้แนะนำเครื่องมือที่ดี

แต่ถ้าคุณต้องการลบ png-drawables (หรือไฟล์รูปภาพอื่น ๆ) คุณควรพิจารณาย้ายโฟลเดอร์ drawable-xxxx ทั้งหมดออกจากโครงการของคุณไปยังโฟลเดอร์ชั่วคราวจากนั้นทำการสร้างใหม่ทั้งหมดและดูที่การสร้าง รายการข้อความที่จะบอกคุณว่าคนที่หายไป

สิ่งนี้มีประโยชน์เป็นพิเศษหากคุณต้องการดูภาพรวมของทรัพยากรที่คุณใช้อย่างมีประสิทธิภาพและอาจแทนที่ด้วยไอคอนแบบอักษรหรือทรัพยากร svg ซึ่งอาจเป็นความช่วยเหลือของห้องสมุดAndroid Iconics


นี่ใช้เวลานาน แต่ฉันก็เห็นด้วยเช่นกัน ฉันกำลังทำสิ่งนี้อยู่ในตอนนี้
Dika

0

Android Assets Viewer ได้รับการออกแบบมาเพื่อช่วยตรวจสอบกราฟิกที่บรรจุ (เป็น drawables) ภายใน. apk ของคุณ (คุณสามารถอัปโหลดไฟล์ zip ของโฟลเดอร์ res ของคุณได้หากต้องการ):

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

ดังนั้นสำหรับการเอาทรัพยากรที่ไม่ได้ใช้ออกไปสิ่งนี้อาจใช้ได้ดีกับการตรวจสอบผ้าสำลีเพื่อช่วยให้แน่ใจว่าทุกอย่างที่ควรจะมี นอกจากนี้ยังช่วยให้คุณระบุปัญหาอื่น ๆ ที่อาจเกิดขึ้นกับ drawables ของคุณ: bucket ผิดกราฟิกผิด ฯลฯ


0

หลังจากที่คุณเรียกใช้ Lint ใน Android Studio และค้นหาทรัพยากรที่ไม่ได้ใช้ทั้งหมดคุณสามารถคลิกที่หนึ่งในนั้นจากแท็บการตรวจสอบ ให้รายละเอียดเกี่ยวกับปัญหาและตัวเลือกไม่กี่อย่างที่จะแก้ไข หนึ่งในนั้นคือลบทรัพยากรที่ไม่ได้ใช้ทั้งหมด การเลือกตัวเลือกนั้นจะเป็นการลบทรัพยากรที่ไม่ได้ใช้ทั้งหมด

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