一个app开发久了,项目中难免会有越来越多没有被调用到却没有被及时删除的资源文件, 尤其是体积较大的图片文件,于是我们会发现我们的app包越来越大,越来越臃肿。于是,定期的检测我们工程中哪些资源已经被废弃,是十分必要的。要做这么一个工作,分为两步,一步是查找到这些无用的资源,另一步是批量删掉他们!
网上类似的工具有一些,其中“列出”这一步骤我整理了两种方案
1、使用 AndroidUnusedResources.jar(不推荐)
这是一个第三方的jar包,直接下载该jar包到自己的工程根目录,使用命令
java -jar AndroidUnusedResources1.6.2.jar>>d:\unused.txt
即可将不用的资源导出到该txt文件,达到目的。我个人不推荐这个方法,因为第二种更简单~第一种方法详情请看以下链接:
http://blog.csdn.net/u012808234/article/details/47440629
2、直接使用Adrdoi Studio的lint功能(推荐)
看到这里,你肯惊呼,哇,原来studio自己就有这个功能啊!?是的,具体操作如下:
点开以后,输入 Unused resources打开
执行完毕以后,你会得到一个类似图中的无用资源清单
可以看到有drawable,有dimen,有anim等各种类型的resources。
另外,你也可以将此结果导出为文件,便于对照,导出的按钮在最左侧的菜单栏。
——– 2016.4.4更新
接下来要删除了,在最新的版本(Studio2.1)中,lint已经可以自行删除无用资源,这样的话,我们的python脚本也不需要写了,具体操作如下:
注意到更之前的版本比,右侧的操作多一个了resolution,我们选择Remove All Unused Resources。片刻后弹出一个确认对话框,确认之
搞定了!
——–2016.4.4更新结束
——–历史版本——–
接下来要删除了,可惜lint并没有提供直接删除的操作,我们要自己删除,你可以自己删除,当然也可以写个脚本,我来分享一下我自己的方案。
以删除图片资源为例,我们的思路就是找到文件名,找到对应目录,删掉文件:
1、首先,把图片相关的数据拷贝出来,放在一个文本文件中
整理一下,用行编辑和替换,得到一个纯文件名的文档:
2、写一个简单的python文件,功能是读文档,把文档里面每一行数据拼成一个文件路径,然后调用删除文件的命令rm,删掉。
代码还有很多要优化的地方,文本就不贴了,大家看看思路即可
(有朋友反应图太小了看不清楚,我代码也贴一下吧)
import os
if __name__ == '__main__':
#工程资源的路径
main = "E:/git-work/android/app/src/main/res/"
#删除的图片可能存在的路径
d = "drawable/"
m = "drawable-mdpi/"
lh = "drawable-lhdpi/"
h = "drawable-hdpi/"
xh = "drawable-xhdpi/"
xxh = "drawable-xxhdpi/"
#打开我们导出的无用资源列表
f = open("C:/Users/Administrator/Desktop/res.txt", 'r')
line = f.readline()
#以行为单位循环
while line:
line = f.readline()
if (line != ""):
#注意line读出来以后 行末有空格,替换一下,加个.*的后缀可以删除xml、.9等其它格式的图片
line = line.replace('\n','.*')
print ("==="+line)
#调用系统方法删除 简单粗暴
os.system("rm "+main+d+line)
os.system("rm "+main+m+line)
os.system("rm "+main+lh+line)
os.system("rm "+main+h+line)
os.system("rm "+main+xh+line)
os.system("rm "+main+xxh+line)
f.close()
ok,直接执行脚本,那些无用的图片就被统统删掉了~
——–历史版本结束——–
如果resourcesNotFound的错误,建议自行跑跑monkey,送命令
adb shell monkey -p com.xxx.xxx -s 500 100000