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】小工具实现工程无效代码的删除 

  • 相关阅读:
    tornado+websocket+mongodb实现在线视屏文字聊天
    mongoexport 导出需要授权数据库中的集合 报错 Authentication failed.
    nginx日志中添加请求的response日志
    SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
    RESTful接口设计原则和优点
    一次请求中,经过 nginx+uWSGI+flask应用程序搭建服务的执行过程
    项目中记录影响性能的缓慢数据库查询
    macos Item2 添加 Shell Integration (ftp传输)
    windows安装 阿里云的Fun工具
    windows10安装docker[含百度网盘docker安装包]
  • 原文地址:https://www.cnblogs.com/yxy8023ustc/p/4050243.html
Copyright © 2011-2022 走看看