Có cách nào đơn giản để tìm ra các chuỗi không sử dụng trong dự án Android không?


152

Tôi có một dự án Android lớn với nhiều chuỗi được khai báo strings.xml. Tôi muốn loại bỏ các chuỗi không sử dụng trong strings.xml.

Có cách nào dễ dàng để làm như vậy?

Câu trả lời:


238

Trên Android Studio :

Menu -> Phân tích -> Chạy Kiểm tra theo Tên -> Tài nguyên không sử dụng

Chọn hộp kiểm Mặt nạ tệp và đặt strings.xmlvào trường văn bản.


2
Sau đó, bạn có thể xác định Custom scope, chọn Production classes-> app-> valuesđể tìm các chuỗi, màu không sử dụng ...
Jemshit Iskenderov

2
Với SDK Tools 26.0.2, điều này không tìm thấy các chuỗi không sử dụng của tôi trong khi "Tìm tập quán" không hiển thị bất kỳ cách sử dụng nào của chúng (và nó cũng không sử dụng cho các chuỗi thực sự được sử dụng).
dùng905686

BTW khi một chuỗi thực sự được sử dụng (được tham chiếu động trong mã), bạn có thể chặn các cảnh báo tools:ignore="UnusedResources"
kẻ nói dối

4
cái này không hoạt động như mong đợi Tôi đã thử với việc thêm chuỗi không sử dụng và kiểm tra, nhưng không thể xác định được chuỗi đó
chikka.anddev

Điều này dường như bị hỏng, nó nghĩ rằng một loạt các chuỗi của tôi không được sử dụng, nhưng một "cách sử dụng" nhanh chóng được tìm thấy sử dụng. Hãy cẩn thận.
szaske

37

Đây là một giải pháp khá dễ dàng. Trong menu Android Studio, đi tới

Refactor> Xóa Tài nguyên chưa sử dụng ... .

nhập mô tả hình ảnh ở đây

Nhấp vào Xem trước để xem tài nguyên không sử dụng là gì và chọn lọc loại bỏ chúng.


1
Điều này loại bỏ rất nhiều tài nguyên thực sự được sử dụng. Phải tự gỡ bỏ rất nhiều thứ
stoefln

1
@stoefln, nếu bạn nhấp vào Xem trước, bạn có thể chọn thủ công những gì cần xóa và không xóa.
Suragch

1
Cẩn thận với "Xóa khai báo @ id không sử dụng". Nó đã xóa cho tôi rất nhiều id mà mã của tôi thực sự đang sử dụng (plugin Tiện ích mở rộng Android của Kotlin - sẽ cho phép khôi phục lượt xem từ Hoạt động, Đoạn và Lượt xem)
Dan Alboteanu

28

Trong trường hợp của tôi, "Chạy Kiểm tra theo Tên" không hoạt động, mặc dù thực tế tôi đang sử dụng "Xóa tài nguyên không sử dụng".

Giải pháp:

  1. Mở String.xml
  2. Nhấp chuột phụ
  3. Refactor -> Xóa tài nguyên không sử dụng

Tôi không biết tại sao "Xóa tài nguyên không sử dụng" hoạt động theo cách này mà không phải cách khác.


2
Bạn cũng có thể làm điều đó trong trình thám hiểm dự án, chọn mô-đun bạn muốn, sau đó nhấp chuột phải và tái cấu trúc> xóa tài nguyên không sử dụng, loại bỏ bất kỳ loại tài nguyên nào như các tài nguyên không sử dụng
FRL

22

Với ADT 16 bạn có thể làm điều đó đơn giản nhất có thể. Cập nhật lên ADT 16 và sử dụng Android Lint . Nó thực sự là công cụ tuyệt vời. Nó có thể tìm thấy tất cả các tài nguyên không sử dụng (không chỉ chuỗi) và nhiều hơn nữa. Từ trang web chính thức của nó:

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
Kể từ ADT 20.0.2, Android Lint không tìm thấy các Chuỗi không sử dụng, cũng như không yêu cầu. Tôi chỉ kiểm tra nó bằng cách thêm một chuỗi với id hoàn toàn ngẫu nhiên và sau đó chạy Lint. Tôi không thể bỏ phiếu trả lời ở trên, vì tôi không có đủ danh tiếng :(.
Frank Harper

Như @FrankHarper đã nói: trước đây không có. Như Lord Flash đã nói, hiện tại nó:Warning: The resource R.string.... appears to be unused [UnusedResources] [lint] <string name="...">some text</string>
serv-inc

3

Để kiểm tra chuỗi tệp.

Thật dễ dàng (ít nhất là trong phiên bản Eclipse của tôi)

Trong Eclipse cho Android (Tôi có phiên bản v22.6.2-1085508)

  • Nhấp chuột phải vào tên dự án trong "Gói thám hiểm"
  • Chọn "Công cụ Android".
  • Chọn "Chạy Lint: Kiểm tra các lỗi phổ biến".

Bây giờ khi bạn mở String.xml, bạn sẽ thấy chuỗi không sử dụng được tô sáng.

Bạn có thể khắc phục các vấn đề tiềm năng khác.


điều này rất hữu ích để tìm các chuỗi không có bản dịch trong tệp mặc định
ePeace

3

Trong Android Studio Press

Ctlr + Alt + Shift + i

Chọn -> Tài nguyên không sử dụng
Nó hiển thị cho bạn các chuỗi và biểu tượng không sử dụng.

Cảm ơn Chúc mừng mã hóa :)


3

Đây là cách tôi đã làm với Android 3.3.

Kiểm tra bất kỳ thay đổi chưa lưu đối với kho lưu trữ của bạn.

  • Nhấp chuột phải vào mô-đun Ứng dụng của bạn -> Refactor -> Xóa tài nguyên không sử dụng -> Xem trước
  • Trong Bản xem trước tái cấu trúc, thu gọn cả hai chế độ xem ('Các mục cần xóa' & 'Khai báo tài nguyên không sử dụng')
  • Nhấp chuột phải vào 'Các mục sẽ bị xóa' -> Loại trừ
  • Nhấp chuột phải vào 'Khai báo tài nguyên không sử dụng' -> Loại trừ
  • Bây giờ hãy mở rộng 'Khai báo tài nguyên không sử dụng' và theo đó xác định vị trí chuỗi tệp cụ thể của ứng dụng của bạn (sẽ có nhiều chuỗi tệp)
  • Nhấp chuột phải vào chuỗi đó -> Bao gồm
  • Làm tái cấu trúc! Tất cả các chuỗi không sử dụng từ tệp xml sẽ bị xóa!

Lưu ý: Hãy thử xây dựng dự án. Nếu quá trình biên dịch thất bại, rất có thể các chuỗi XML này đang được giới thiệu từ một số xml bố cục / menu, bản thân chúng không được sử dụng. Vì vậy, các xml bố trí cũng có thể được xóa bằng tay!

Xây dựng và chạy. Kiểm tra!


-1

Chạy kịch bản này từ thư mục gốc của dự án của bạn.

cho resourcefile trong `find res / value / *. xml`; làm
  cho tên chuỗi trong `grep '. * / \ 1 / g'`; làm
    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`
    if [$ Count1 -eq 0 -a $ Count2 -eq 0 -a $ Count3 -eq 0 -a $ Count4 -eq 0 -a $ Count5 -eq 0]; sau đó
      echo $ resourcefile: $ stringname
    fi
  làm xong
làm xong

cho tên lại trong `find res / drawable * -type f -name '*. ???'`; làm
  resource = `echo $ resourcename | tên cơ sở xargs | 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`
  if [$ Count1 -eq 0 -a $ Count2 -eq 0 -a $ Count3 -eq 0 -a $ Count4 -eq 0 -a $ Count5 -eq 0]; sau đó
      echo $ resourcename
  fi
làm xong

cho tên resourc trong `find res / layout / *. xml`; làm
  resource = `echo $ resourcename | tên cơ sở xargs | sed "s / ^ \ (. * \) \ .... $ / \ 1 / g" `
  đếm1 = `grep -rc" R \ .layout \. $ {resource} "src | egrep -v ': 0 $' | wc -l`
  nếu [$ đếm1 -eq 0]; sau đó
      echo $ resourcename
  fi
làm xong

Nó cho tôi loại đầu ra này:

res / value / Activity_strings.xml: Activity_more
res / value / Activity_strings.xml: Activity_as_Vply_to
res / value / db_strings.xml: sql_backlog_count
res / value / db_strings.xml: sql_backlog_update_last_resend
...

Cách tiếp cận tuyệt vời nhưng nó có kiểm tra xem tên tài nguyên không có trong các bình luận hoặc chuỗi không? Nó cũng cần một số sửa đổi để tương thích với cấu trúc dự án Android Studio mới.
Mohammad Jafar Mashhadi

-1

Chỉ dành cho bản dịch bị thiếu:

Sử dụng InteliJ, nhấp vào thanh bảng điều khiển InteliJ của bạn: "Phân tích"> "Chạy kiểm tra theo tên"> Nhập vào: Bản dịch chưa hoàn chỉnh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.