zoukankan      html  css  js  c++  java
  • Lint工具去除Android工程里不再需要的资源

    摘要:

    在项目开发过程中常常会不断改UI设计,于是在定稿要发布的前夕,发现有好多不再需要的资源文件存在,发布的包会把这些无用的资源都包含在里面,造成APK的下载包过大。可以通过Android SDK自带的工具进行无用资源的批量删除,下面就工具的使用流程和注意事项进行介绍。


    第一步:lint检测无效资源

    在Android SDK里启动android-sdk-windows oolslint.bat工具【有个小技巧:在文件夹Shift+右键 –> w键  -> Enter 即可打开cmd并进入当前文件夹目录】

    image

    将检测结果导出到文本文件,代码:lint 工程目录 > 导出的文件名,如 lint D:CodesAndroidWCC_v2 > D:CodesAndroidRemoveUnusedResources esult.txt

    即可将WCC_v2下的工程检测结果导出到result.txt文件里

    第二步:自动化删除无效文件

    创建一个Java工程RemoveUnusedResources【C#也可】,关键代码如下:

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String projectPath = "D:\Codes\Android\WCC_v2\";
            try {
                BufferedReader reader = new BufferedReader(new FileReader("result.txt"));
                String line;
                int count = 0;
                double totalSize = 0;
                while((line = reader.readLine()) != null) {
                    if (line.contains("UnusedResources") 
                            && !line.contains("res\value") 
                            && !line.contains("appcompat")
                            && !line.contains("umeng")
                            ) {
                        count++;
                        int end = line.indexOf(":");
                        if (end != -1){
                            String file = line.substring(0, end);
                            String f = projectPath +file;
                            System.out.println(f);
    //                        File curFile = new File(f);           
    //                        curFile.delete();            
                            totalSize += FileSizeUtil.getFileOrFilesSize(f, FileSizeUtil.SIZETYPE_KB); //curFile.length(); // 
    //                        new File(file).delete();
                        }
                    }
                }
                System.out.println(String.valueOf(count));
                System.out.println(String.valueOf(totalSize/1024));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    注意事项:

    1. Lint只能分析资源文件,即Res目录下的文件,这样会导致有可能某个资源文件被某Java文件引用,而这个Java文件是Unused的,但资源文件就不会被lint检测出来,所以如果要做彻底的瘦身发布,要先优化Java代码在lint去资源。
    2. Lint的分析不够职能,比如有一个drawable文件只被一个layout文件引用,但layout是Unused,lint就不会检测出该drawable为Unused文件,所以要反复删除再lint检测几次,直到检测到的count数目为0.
    3. 如果工程里引用了其他第三方库,如友盟后台,lint会认为umeng的drawable文件都是Unused resources,所以在删除时一定要避免删除掉第三方库自带的文件。 

    参考:

    【1】清除Android工程中没用到的代码 

    【2】小工具实现工程无效代码的删除 

  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/yxy8023ustc/p/4050243.html
Copyright © 2011-2022 走看看