使用Lint+python删除Android工程中的冗余资源

Lint是Android内置工具,可以通过静态扫描,优化代码、发现潜在bug. http://developer.android.com/tools/help/lint.html

1. 执行命令:

lint -html <PATH>/lint_report.html <Project Folder>

扫描项目目录,并已html文档方式输出。


lint --check  UnusedResources  -xml <PATH>/lint_report.xml <Projecct Folder>

扫描项目目录,并已xml方式输出


输出描述中有一种类型的错误为UnusedResources, 这是我们要清除的目标:



2.为了实现自动化删除冗余的资源,我们使用xml格式输出数据

在lint_report.xml中,只留下下面这种类型的错误:



3.编写ptyhon脚本

from xml.dom import minidom
import os;
import sys;
import re;


def get_attrvalue(node, attrname):
    return node.getAttribute(attrname) if node else ''


def get_nodevalue(node, index = 0):
    return node.childNodes[index].nodeValue if node else ''


def get_xmlnode(node,name):
    return node.getElementsByTagName(name) if node else []


def has(lines, l):
    for line in lines:
        if line==l : return True;
    return False;




def delLine(fileName,lines, outFileName):
    inFile = open(fileName, 'r');
    outFile = open(outFileName, 'wb');
    i = 0;
    while 1:
        lc = inFile.readline();
        if lc :
            i += 1;
            if lines.count(i)>0:
                print "Got line %d" % i;
            else:
                writeLine ="%s" % lc;
                # print writeLine;
                outFile.write(writeLine)
        else:
            break;
    inFile.close();
    outFile.close();


def purge_unused(project, report):
    p = re.compile('umeng')
    fileLines = {};
    basePath = project;
    doc = minidom.parse(report);
    root = doc.documentElement;
    issue_nodes = get_xmlnode(root, "issue")
    for node in issue_nodes:
        id = get_attrvalue(node, "id");
        if "UnusedResources"!=id:
            continue;
        location = get_xmlnode(node, "location");
        for i in location:
            file = get_attrvalue(i, "file");
            line = get_attrvalue(i, "line");
            if p.search(file):
                continue;
            print "unused res of %s at line %s" % (file, line);


            fullPath = os.path.join(basePath, file);


            if not fileLines.has_key(fullPath):
                fileLines[fullPath]=[]


            if line:
                fileLines[fullPath].append(int(line));


    for aFile in fileLines.keys():
        print "handle %s " % (aFile);
        if fileLines[aFile].__len__()==0:
            os.remove(aFile);
        else:
            delLine(aFile, fileLines[aFile], "%s.tmp"%aFile);
            os.remove(aFile)
            os.rename("%s.tmp"%aFile, aFile)


projectPath = sys.argv[1];
reportXml = sys.argv[2];
purge_unused(projectPath, reportXml)



执行上边脚本,可以删除掉通过lint扫描发现的冗余资源了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值