어떻게 eclipse 를 사용 한 상황 에서 안 드 로 이 드 프로젝트 의 불필요 한 class 파일 과 자원 파일,그리고 불필요 한 그림 을 정리 합 니까?

10739 단어 android
우리 가 프로젝트 를 교체 하 는 과정 에서 특정한 기능 을 사용 하거나 특정한 인터페이스의 문 제 를 수정 하면 문제 가 발생 합 니 다.그러면 대량의 잉여 자바 파일,잉여 자원 파일,일부 불필요 한 인터페이스 파일 등 이 발생 하기 쉽 습 니 다.그렇다면 문제 가 생 긴 이상 어떻게 해결 할 것 인가?이것 이 바로 오늘 중요 하 게 해결 해 야 할 문제 인가?
 
first:
eclipse 에는 UCDetector 라 는 불필요 한 자바 파일 을 검사 하 는 플러그 인 이 있 습 니 다.
다운로드 주소:http://sourceforge.net/projects/ucdetector/files/latest/download?source=files
홈 페이지 주소:http://www.ucdetector.org/index.html
일부 사용 방법:다운로드 가 끝 난 후 다운로드 한 jar 파일 을\eclipse\dropins 폴 더 아래 에 두 고 eclipse 를 다시 시작 하면 이 플러그 인 을 설치 할 수 있 습 니 다.
다음은 다른 사이트 에서 복사 한 이 도구 가 사용 하 는 캡 처 입 니 다.
아 시 죠?남 의 그림 을 직접 붙 일 수 는 없 으 니 닦 으 세 요.링크 주 소 를 주세요.http://www.jb51.net/softjc/123402.html
 
물론 힌트 에 따라 불필요 한 자바 파일 을 삭제 할 수 있 습 니 다.이런 것 외 에 또 다른 방법 이 있다.
https://github.com/jasonross/Android-CU
다음은 readme.md 파일 의 프로필 입 니 다.
CU 는 clear unused 의 줄 임 말로,이 프로젝트 는 Android 프로젝트 에서 쓸모없는 코드 파일 과 자원 파일 을 정리 하 는 데 사 용 됩 니 다.CURes.java자원 파일 을 정리 하 는 데 사 용 됩 니 다.ADT SDK 가 자체 적 으로 가지 고 있 는 lint 도 구 를 이용 하여 상대 경 로 는\sdk\tools\lint.bat 입 니 다.CUSrc.java.자바 파일 을 청소 하 는 데 사용 되 며,Eclipse 플러그 인UCDetector의 협조 가 필요 합 니 다.
쓰다
쓸모없는 파일 을 삭제 하려 면 파일 을 삭제 할 수 없 을 때 까지 교체 실행CURes.javaCUSrc.java이 필요 합 니 다.
CURes.java 실행
  • 실행 매개 변 수 는 lint.bat 파일 의 절대 경로 와 android 프로젝트 디 렉 터 리 입 니 다.예 를 들 어  D:adt/sdk/tools/lint.bat D:/nova
  • String[] dirArray자원 파일 의 상대 디 렉 터 리 를 삭제 하기 위해 기본적으로 res 디 렉 터 리 아래 에 있 습 니 다.일반적으로values삭제 할 필요 가 없 기 때문에 추가 하지 않 습 니 다.
  • 실행 결 과 는 현재 디 렉 터 리 에 저 장 됩 니 다.파일 이름 은 포맷 된 시간 스탬프 입 니 다.

  • CUSrc.java 실행
  • UCDetector 설정,Activity
  • 와 같은 스 캔 이 필요 없 는 파일 무시
  • UCDetector 스 캔 항목 으로 txt 보고서 생 성
  • 프로그램 을 실행 하려 면 두 개의 인자 가 필요 합 니 다.UCDetector 가 생 성 한 보고 경로,프로젝트 의 경로,예 를 들 어D:/UCDetector/report.txt D:/nova
  • 실행 결 과 는 현재 디 렉 터 리 에 있 는 UnusedJava.txt 파일 에 저 장 됩 니 다.

  • 주의 하 다.
  • 자원 을 제거 할 때,레이아웃 등 자원 파일 을 문자열 형식 으로 호출 하면 lint 에 의 해 식별 되 지 않 아 오 삭 될 수 있 습 니 다.
  • 코드 를 지 울 때 fragment 등 컨트롤 을 문자열 형식 으로 호출 하거나 반 사 를 사용 할 때 UCDetector 에 인식 되 지 않 아 오 삭 될 수 있 습 니 다.

  • 사실 프로젝트 에는 세 개의 자바 파일 이 있 습 니 다.하 나 는 CURes.java,하 나 는 CUSrc.java,그리고 ClearDrawble.java 파일 이 있 습 니 다.
    자,자,먼저 남 이 어떻게 하 는 지 보 자.
     CURes.java
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class CURes {
    
        public static final String separator = File.separator;
    
      //       res     ,    lint.bat  
    public static void clearRes(String lintPath, String projectPath, String[] dirArray) { Process process = null; InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; FileWriter fw = null;
        // lint.bat   

       String cmd = lintPath + " --check UnusedResources " + projectPath; int fileCount = 0, singleCount; long fileSize = 0; try {
       // ,
    SimpleDateFormat formatter = new SimpleDateFormat("CURes-yyyy-MM-dd-HH-mm-ss"); Date curDate = new Date(System.currentTimeMillis()); String dateStr = formatter.format(curDate); fw = new FileWriter(dateStr + ".txt", true); Runtime runtime = Runtime.getRuntime(); String line = null; do { singleCount = 0;
              // lint

      
    process = runtime.exec(cmd); is = process.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); while ((line = br.readLine()) != null) { boolean needDel = false; for (String dir : dirArray) { if (line.startsWith("res" + separator + dir)) { needDel = true; break; } } if (needDel) { int index = line.indexOf(":"); if (index > 0) { String filePath = projectPath + separator + line.substring(0, index); ++fileCount; ++singleCount; File file = new File(filePath); fileSize += file.length(); //
    boolean success = file.delete(); System.out.println(filePath + " " + success); fw.write(filePath + " " + success + "
    "); fw.flush(); } } } } while (singleCount != 0); String result = "delete file " + fileCount + ",save space " + fileSize / 1024 + "KB."; System.out.println(result); fw.write(result); fw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } if (process != null) { process.destroy(); } } } public static void main(String[] args) {

    // ,
    if (args.length < 2) { System.out.println("Please config program arguments. Correct arguments contain both absolute path of lint.bat and that of android project."); return; }
    // , ,lintPath lint.bat , ╲╲ /, ,projectPath android
      
         // args[0] args[1] stirng    
    String lintPath = args[0]; String projectPath = args[1]; String[] dirArray = { "drawable", "layout", "anim", "color" }; CURes.clearRes(lintPath, projectPath, dirArray); } }

      
    ok,그리고 쓸모없는 자바 파일 을 삭제 하 는 방법 을 봅 시다.
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    
    public class CUSrc {
    
      // java ,
    private static String clearUnusedJavaFile(String inFileName, String localProjectPath) throws IOException { File infile = new File(inFileName);
         //
    RandomAccessFile outfile = new RandomAccessFile("UnusedJava.txt", "rw"); int index = -1;

        // src ,localProjectPath android    
    String path = localProjectPath + "/src/"; BufferedReader bf = new BufferedReader(new FileReader(infile)); String content = ""; StringBuilder sb = new StringBuilder(); while ((content = bf.readLine()) != null) { index = content.indexOf(".<init>"); if (index != -1 && (content.indexOf("\tClass") == (content.indexOf(")") + 1) || content.indexOf("\tInterface") == (content.indexOf(")") + 1))) { String temp = path + content.substring(0, index).replace('.', '/') + ".java";   

      
      

              // ,
       sb.append(temp).append("\t" + new File(temp).delete()).append( "\t" + System.currentTimeMillis()).append("\r
    "); } } outfile.seek(outfile.length()); outfile.writeBytes(sb.toString()); bf.close(); outfile.close(); return sb.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub if (args.length == 2) { String inputFile = args[0]; String localProjectPath = args[1]; try { String str = clearUnusedJavaFile(inputFile, localProjectPath); System.out.print(str); } catch (IOException e) { // TODO Auto-generated catch block System.out.print("something wrong"); } } else { System.out.println("arguments wrong!!"); } } }

      
    분석 이 끝 났 으 니 밥 먹 으 러 가자.

    좋은 웹페이지 즐겨찾기