Programing

Android 프로젝트에서 사용하지 않는 문자열을 찾는 간단한 방법이 있습니까?

lottogame 2020. 6. 23. 07:40
반응형

Android 프로젝트에서 사용하지 않는 문자열을 찾는 간단한 방법이 있습니까?


에 많은 문자열이 선언 된 거대한 Android 프로젝트가 strings.xml있습니다. 에서 사용하지 않는 문자열을 제거하고 싶었습니다 strings.xml.

그렇게 쉬운 방법이 있습니까?


안드로이드 스튜디오 :

메뉴 -> 분석 -> 이름으로 검사 실행 -> 사용하지 않은 자원

확인 파일 마스크 (들) 체크 박스를 넣어 strings.xml텍스트 필드에.


상당히 쉬운 또 다른 솔루션이 있습니다. Android Studio 메뉴에서

리팩토링은> 사용하지 않는 리소스를 제거 ... .

여기에 이미지 설명을 입력하십시오

미사용 리소스가 무엇인지 확인하고 선택적으로 제거 하려면 미리보기클릭하십시오 .


필자의 경우 "사용하지 않은 리소스 제거"를 사용하고 있음에도 불구하고 "이름으로 검사 실행"이 작동하지 않았습니다.

해결책:

  1. strings.xml 열기
  2. 보조 클릭
  3. 리 팩터-> 사용하지 않는 리소스 제거

"사용하지 않은 리소스 제거"가 한 가지 방법으로 작동하지만 다른 방법으로 작동하지 않는 이유는 전혀 없습니다.


ADT 16을 사용하면 가능한 한 간단하게 수행 할 수 있습니다. ADT 16으로 업데이트하고 Android Lint를 사용하십시오 . 정말 놀라운 도구입니다. 사용하지 않는 모든 리소스 (문자열뿐만 아니라)와 그 이상을 찾을 수 있습니다 . 공식 사이트에서 :

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.

내 질문을 살펴 보십시오 : 자원이 사용되는지 확인하십시오.

아무도 진정한 대답을 얻지 못했기 때문에 문자열을 포함하는 사용되지 않는 리소스를 검색하도록 스크립트를 프로그래밍했습니다.

희망이 당신을 도와줍니다.


http://code.google.com/p/android-unused-resources/ 링크를 참조하십시오 . AndroidUnusedResources.jar 도구가 있습니다. 이것을 실행하고 사용하지 않는 문자열이나 리소스를 제거하십시오.


string.xml을 확인하려면

쉽습니다 (적어도 내 버전의 Eclipse에서는)

Android 용 Eclipse에서 (버전 v22.6.2-1085508이 있습니다)

  • "패키지 탐색기"에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하십시오.
  • "Android 도구"를 선택하십시오.
  • "린트 실행 : 일반적인 오류 확인"을 선택하십시오.

이제 strings.xml을 열면 사용되지 않는 문자열이 강조 표시됩니다.

다른 잠재적 인 문제를 해결할 수 있습니다.


Android Studio Press에서

Ctlr + Alt + Shift + i

선택-> 미사용 리소스
미사용 문자열과 아이콘이 표시됩니다.

고마워요 해피 코딩 :)


이것이 Android 3.3에서 수행 한 방법입니다.

저장되지 않은 변경 사항을 저장소에 체크인하십시오.

  • 앱 모듈을 마우스 오른쪽 버튼으로 클릭-> 리 팩터-> 사용하지 않는 리소스 제거-> 미리보기
  • 리팩토링 미리보기에서 두보기 ( '삭제할 항목'및 '사용하지 않은 자원 선언')를 모두 축소하십시오.
  • '삭제할 항목'을 마우스 오른쪽 버튼으로 클릭-> 제외
  • '사용하지 않은 리소스 선언'을 마우스 오른쪽 버튼으로 클릭-> 제외
  • 이제 '사용하지 않은 리소스 선언'을 확장하고 그 아래에서 앱 특정 strings.xml을 찾으십시오 (여러 개의 strings.xml이 있음)
  • 해당 strings.xml-> 포함을 마우스 오른쪽 단추로 클릭하십시오.
  • 리팩터링하십시오! xml 파일에서 사용되지 않은 모든 문자열이 삭제됩니다!

참고 : 프로젝트를 빌드하십시오. 컴파일에 실패하면 이러한 strings.xml이 일부 레이아웃 / 메뉴 xml에서 참조 될 가능성이 높습니다. 따라서 해당 레이아웃 xml을 수동으로 삭제할 수도 있습니다!

빌드하고 실행하십시오. 테스트!


Run this script from root of your project.

for resourcefile in `find res/values/*.xml`; do
  for stringname in `grep '.*/\1/g'`; do
    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 ]; then
      echo $resourcefile : $stringname
    fi
  done
done

for resourcename in `find res/drawable* -type f -name '*.???'`; do
  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`
  if [ $count1 -eq 0 -a $count2 -eq 0 -a $count3 -eq 0 -a $count4 -eq 0 -a $count5 -eq 0 ]; then
      echo $resourcename
  fi
done

for resourcename in `find res/layout/*.xml`; do
  resource=`echo $resourcename | xargs basename | sed "s/^\(.*\)\....$/\1/g"`
  count1 =`grep -rc "R \ .layout \. $ {resource}"src | egrep -v ': 0 $'| 화장실 -l`
  [$ count1 -eq 0]이면; 그때
      echo $ resourcename
  fi
끝난

그것은 나에게 이런 종류의 출력을 제공합니다 :

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
...

누락 된 번역의 경우 :

InteliJ를 사용하여 InteliJ의 패널 표시 줄을 클릭하십시오. "분석"> "이름으로 검사 실행"> 입력 : 불완전한 번역

참고 URL : https://stackoverflow.com/questions/4680285/is-there-any-simple-way-to-find-out-unused-strings-in-android-project

반응형