自己封装一个可以随意删减 没用的资源文件的工具

自己封装一个可以随意删减 没用的资源文件的工具

思路:

  • 通过lint命令 导出一个带有lint log的txt文件
  • 通过读取里面的“[UnusedResources]”字段 筛选出所有没用的资源文件
  • 可以直接删除 文件
    - drawable-mdpi
    - drawable-hdpi
    - drawable-xhdpi
    - drawable-xxhdpi
    - drawable
    - layout
    - anim
    - color
    - raw
    - xml

    • 看情况 删除文件里面的某一行 values
      • arrays
      • colors
      • dimens
      • strings
      • config_main_tab
      • prompt_message
      • styles
      • syle_base_view
      • teaching_strings
      • toast
(1)首先得进入 sdk里面的 tools
` D:\develop\AndroidStudio\Android\sdk\tools\lint.bat `
(2)在cmd里面输入
`  lint H:\android_workspace\smilecampus_git\SmileCampus >C:\Users\Administrator\Desktop\master_lint_log.txt`
(3)通过java代码(IO流) 读取导出来的lint log文件

通过筛选里面的“[UnusedResources]” 判断资源文件所处哪一个文件夹 (到底是删除文件 还是删除里面的某一行)

代码三个类:
Constant类

public class Constant {
    public static final String UnusedResources = "[UnusedResources]";

    public static final String drawable_mdpi = "drawable-mdpi";
    public static final String drawable_hdpi = "drawable-hdpi";
    public static final String drawable_xhdpi = "drawable-xhdpi";
    public static final String drawable_xxhdpi = "drawable-xxhdpi";
    public static final String drawable = "drawable";
    public static final String anim = "anim";
    public static final String layout = "layout";
    public static final String color = "color";
    public static final String raw = "raw";//弹幕
    public static final String xml = "xml";//不改动

    public static final String values = "values";
    /**
     * values下面的配置文件
     */
    public static final String arrays = "arrays";
    public static final String colors = "colors";
    public static final String dimens = "dimens";
    public static final String strings = "strings";
    public static final String config_main_tab = "config_main_tab";
    public static final String prompt_message = "prompt_message";
    public static final String styles = "styles";
    public static final String syle_base_view = "syle_base_view";
    public static final String teaching_strings = "teaching_strings";
    public static final String toast = "toast";
}

CompactAndroidCodeUtil类

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class CompactAndroidCodeUtil {

    public static void cleanUnUseResourse(String projectPath, String lintResultPath, List<String> resources) {
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            FileReader fr = new FileReader(lintResultPath);
            br = new BufferedReader(fr);
            String s = br.readLine();
            //将原本导出来的lint文件 窗以及一个副本  并把"[UnusedResources]"筛选出来 写进副本文件中
            String lintResultTranscriptPath = createLintResultTranscript(lintResultPath);
            File file = new File(lintResultTranscriptPath);
            if(!file.exists()) {
                file.createNewFile();
            }
            bw = new BufferedWriter(new FileWriter(file));
            while (null != s) {
                // 判断一行包含
                if (s.contains(Constant.UnusedResources)) {
                    // res\color\org_apply_text_color_selector.xml:2: Error: The
                    // resource R.string.lepi_un_sub_any_service appears to be
                    // unused
                    // 截取第一个:前面 是整个路径  判断该文件 是什么文件夹下面的资源文件
                    int end = s.indexOf(":");
                    if (end > 0) {
                        String subPath = s.substring(0, end);
                        // Test
                        int startDiagonal = subPath.indexOf("\\");
                        String temp = subPath.substring(startDiagonal + 1);
                        int secondDiagonal = temp.indexOf("\\");
                        String resource = temp.substring(0 , secondDiagonal);
                        if(resource.equals(Constant.values)) {//将values下面的文件夹筛选出来
                            String temp1 = temp.substring(secondDiagonal + 1);
                            int thirdDiagonal = temp1.indexOf(".");
                            resource = temp1.substring(0, thirdDiagonal);
//                          if (!resources.contains(resource)) {
//                              resources.add(resource);
//                          }
                        } else {
                            if (resources.contains(resource)) {//如果resourse是resourses里面的话 那就删除文件
                                //将符合标准的资源文件 写入副本文件中
                                bw.write(s);
                                bw.newLine();//换行
                                bw.flush();

                                String deleteFilePath = projectPath + "\\" + subPath;
                                if(deleteFile(deleteFilePath)){
                                    System.out.println("文件删除成功");
                                }
//                              resources.add(resource);
                            }   
                        }
                    }
                }
                s = br.readLine();
            }
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到!");
        } catch (IOException e) {
            System.out.println("读取失败!");
        } finally {
            try {
                br.close();
                bw.close();
            } catch (IOException e) {
                System.out.println("关闭流失败!");
            }
            for(String res : resources) {
                System.out.println(res);
            }
        }
    }

    /**
     * @param lintResultPath
     * @return 创建一个文件副本 来
     */
    public static String createLintResultTranscript(String lintResultPath) {
        String lintResultTranscriptPath = "";
        int index = lintResultPath.indexOf(".");
        String before = lintResultPath.substring(0, index);
        String after = lintResultPath.substring(index);
        lintResultTranscriptPath = before + "-副本1" + after;
        return lintResultTranscriptPath;
    }

    /**
     * @param deletePath
     * @return 删除文件
     */
    public static boolean deleteFile(String deletePath) {
        // 验证字符串是否为正确路径名的正则表达式  
        String matches = "[A-Za-z]:\\\\[^:?\"><*]*";  
        boolean flag = false;  
        // 通过 sPath.matches(matches) 方法的返回值判断是否正确  
        // sPath 为路径字符串  
        if(deletePath.matches(matches)) {
            File file = new File(deletePath);  
            // 路径为文件且不为空则进行删除  
            if (file.isFile() && file.exists()) {  
                file.delete();  
                flag = true;  
            }  
        }
        return flag;  
    }
}

CleanResource类

import java.util.ArrayList;
import java.util.List;

/**
 * @author Wisdozzh
 * 清除项目中的无用资源文件
 *
 */
public class CleanResource {
    public static void main(String[] args) {
        String projectPath = "H:\\android_workspace\\smilecampus_git\\SmileCampus";
        String lintResultPath = "C:\\Users\\Administrator\\Desktop\\master_lint_log.txt";
        //这里面只删除 某一些文件 以及文件里面的某一行
        List<String> resourses = new ArrayList<>();
        resourses.add(Constant.drawable_mdpi);//ok
        resourses.add(Constant.drawable_hdpi);//ok
        resourses.add(Constant.drawable_xhdpi);//ok
        resourses.add(Constant.drawable_xxhdpi);//ok
        resourses.add(Constant.drawable);
        resourses.add(Constant.layout);
//      resourses.add(Constant.color);


        //这些事删除一行
        resourses.add(Constant.arrays);
        resourses.add(Constant.colors);
        resourses.add(Constant.dimens);
        resourses.add(Constant.strings);
        CompactAndroidCodeUtil.cleanUnUseResourse(projectPath, lintResultPath, resourses);
    }
}
(4)研究已经出成果了

现在只删除drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxdpi、drawable、layout、以及一点儿style

(5)可以优化 (以后在进行优化)

把anim、color、raw、xml、values下面的arrays、colors、dimens、strings、config_main_tab、prompt_message、styles、style_base_view、teaching_strings、toast
里面没用的资源文件 进行删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值