您的位置:首页 > 编程语言 > Python开发

python初学-----查找Android项目中未使用的string资源

2017-08-26 22:26 525 查看
最近在自学python,慢慢的写点小东西记录一下。

这个小程序是帮助我们查找一下我们定义在strings.xml中在java代码中和layout文件中未使用到的资源。我们就可以进行清理掉没用的资源文件。

我是这样一个思路:

0. 首先通过xml解析取出strings.xml中的name部分和值(value)部分,存放到list中

1.遍历找到app\src\main\java和res\layout路径下的所有文件,把文件路径存放到一个数组中

2.通过遍历每一个文件路径 打开文件,查找文件中是否存在strings.xml中有对应的引用R.string.xxx的部分,或者layout文件中有@string/xxx的部分,如果有就把之前存放的集合里面的数据删除掉。剩余的就是没有被踢出去的就是未被使用的。

具体代码如下:

import os
from os import path
from xml.etree.ElementTree import ElementTree

dir_root=path.abspath(os.getcwd());

print(dir_root)

tree = ElementTree()

s=dir_root+"\\app\\src\\main\\res\\values\\strings.xml"

file=open(s,"r",encoding="utf-8")

element=tree.parse(s)

valueList=[]
keyList=[]

strings_data=[];

#遍历strings.xml中所有文本
for e in element:
valueList.append(e.text)
keyList.append(str(e.attrib.get("name")))

strings_data=list(zip(keyList,valueList))
#print(strings_data)

#遍历指定目录下的所有文件
def dirlist(path, allfile):
filelist =  os.listdir(path)

for filename in filelist:
filepath = os.path.join(path, filename)
if os.path.isdir(filepath):
dirlist(filepath, allfile)
else:
allfile.append(filepath)
return allfile

file=[]

dirlist(dir_root+"\\app\src\main\java", file)
dirlist(str(dir_root+"\\app\src\main\\res\layout"), file)

#查找java文件中的字符串
def findJavaFileToString(fileList,list):
for fileitme in fileList:
a=open(fileitme,"r",encoding="utf-8")
sourceText=a.read()
a.close()
for item in list:
if sourceText.find(str("R.string."+item[0])) !=-1:
strings_data.remove(item)
print("文件路径:",fileitme,",找到的字符串为:",item[0])
elif sourceText.find(str("@string/"+item[0])) !=-1:
strings_data.remove(item)
print("文件路径:",fileitme,",找到的字符串为:",item[0])
else:
pass
#print("文件路径:",fileitme,",未找到的字符串为:",item[0])

findJavaFileToString(file,strings_data)

print("剩余未找到的为引用为:",strings_data)


只需要将该文件放置到项目根目录中,然后运行该文件即可。运行后的截图为:



通过该方法同样可以找到找到剔除drawable中未被使用的图片资源文件,这个下次在写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: