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扫描发现的冗余资源了。