Android lint 删除无用图片文件和配置文件

Android lint  删除无用、冗余的  配置文件和 图片资源

转载请注明  http://blog.csdn.net/aaawqqq?viewmode=contents

Android项目经过长期的迭代开发  项目当中有大量无用的java类和冗余图片

如果不整理将会导致 apk 包比较大

审查 清理Java类  使用UCDetector  可以查看我的上篇 博文

http://blog.csdn.net/aaawqqq/article/details/46684441

Android lint 是Android SDK 提供的代码检查工具  主要检查 配置文件 资源文件  发现代码问题

我的使用场景  :

减少Android apk 包大小

使用Android lint 发现无用图片和xml 文件  通过删除冗余资源

我在此给大家分享的是工具与技术

具体的知识 大家通过 其它博文去学习  可以查看文章结尾的参考链接  我在这就不复述了

1) 工具

1.1) Android lint  在  Android sdk tools  当中   如果可以希望大家能配好环境变量

本文主讲 以命令行形式的删除无效资源的批处理

1.2) 另在eclipse当中有lint插件

此方法

优点:运行简单  在eclipse的 直接显示

缺点:需要手动删除  当冗余文件数量多的适合 会很伤脑筋

2) 输入

打开命令行  使用lint命令

如图:

lint --check "UnusedResources" /Users/baozi/Dev/android/android > result.txt

/Users/baozi/Dev/android/android  > result.txt

/Users/baozi/Dev/android/android  是 工程的路径  (工程名为  android )

生成的扫描结果将会存放在当前目录下的  result.txt  当中

如我的目录      /Users/baozi/result.txt

3) 输出文件result.txt

打开文件目录   /Users/baozi/result.txt

4) 根据结果 批量删除对应的文件

本文重点   当你第一次运行时 发现需要数千资源文件需要删除的时候就会伤脑筋

手工逐条删除 并不符合程序猿三大优秀品质    :      懒惰   没有耐心   骄傲

尝试过使用 vim 删除  发现操作起来也相当麻烦

大家可以参考下面的代码   使用FIle 获取 result.txt 中的文件信息   调用 File .delete();  方法删除

	/**
	 * 删除 未使用的冗余资源(图片 xml布局)
	 *
	 * @param b
	 *
	 *            false 显示资源列表
	 *
	 *            true 显示资源列表 并删除资源
	 *
	 * @throws Exception
	 */
	private static void init(boolean b) throws Exception {

		String encoding = "UTF-8"; // 字符格式
		String projectPath = "/Users/baozi/Dev/shihui/android/";//Android工程所在地址
		String filePath1 = "/Users/baozi";//result的所在路径
		File file = new File(filePath1, "result.txt");//获取result.txt 文件 生成地址
		if (file.isFile() && file.exists()) { // 判断文件是否存在
			InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考虑到编码格式
			BufferedReader bufferedReader = new BufferedReader(read);
			String line = null;
			while ((line = bufferedReader.readLine()) != null) {
				if (line.contains("UnusedResources") && !line.contains("res/value") && !line.contains("appcompat")
						&& !line.contains("res/xml")) {
					// System.out.println(line);
					int end = line.indexOf(":");
					if (end != -1) {
						String file_end = line.substring(0, end);
						String f = projectPath + file_end;
						System.out.println(f);
						if (b) {
							new File(f).delete();
							System.out.println("删除成功");
						}
					}

				}

			}
			read.close();

		}
	}

projectPath  :   Android工程在硬盘中的位置

filePath1  :  lint 运行结果   result.txt  所在的位置

方法  参数  传入false  仅打印结果   传入true 打印结果 并删除文件

填入正确的地址  就能批量执行删除未使用的 布局 &  图片 资源   (UnusedResources)

如果想要删除其它操作  请修改 筛选条件

if (line.contains("UnusedResources") && !line.contains("res/value") && !line.contains("appcompat")

&& !line.contains("res/xml")

使用心得:  循环使用3-6次 能完成 删除全部未使用的资源  但是有些废弃的模块 存在代码以来关系 需要手工判断删除

附1:

使用eclipse自带的 Android lint 插件 审查代码的方式

使用方式:

右击工程 → Android Tools → Run Lint: Check for Common Error

结果会在 Lint Warrings 当中显示  和 看logcat 的方式相同

运行结果:

附2:  参考博文

http://blog.csdn.net/hudashi/article/details/8333349

http://xiaxveliang.blog.163.com/blog/static/29708034201272224352784/

http://mikewang.blog.51cto.com/3826268/1003276

http://xiaxveliang.blog.163.com/blog/static/29708034201272224352784/

//Android Lint 检查规则列表

http://hubingforever.blog.163.com/blog/static/17104057920121069261691/

//介绍比较清晰

http://www.cnblogs.com/0616--ataozhijia/p/3746260.html

结尾附上神兽

//┏┓   ┏┓
//┏┛┻━━━┛┻┓
//┃       ┃  
//┃   ━   ┃
//┃ ┳┛ ┗┳ ┃
//┃       ┃
//┃   ┻   ┃
//┃       ┃
//┗━┓   ┏━┛
//  ┃   ┃   神兽保佑        
//  ┃   ┃   代码无BUG!
//  ┃   ┗━━━┓
//  ┃       ┣┓
//  ┃       ┏┛
//  ┗┓┓┏━┳┓┏┛
//    ┃┫┫ ┃┫┫
//    ┗┻┛ ┗┻┛

每日精进  希望能帮上你

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 05:31:21

Android lint 删除无用图片文件和配置文件的相关文章

android删除无用资源文件的python脚本

随着android项目的进行,如果没有及时删除无用的资源时安装包会越来越大,是时候整理一下废弃资源缩小压缩包了,少年! 其实判断一个资源(drawable,layout)是否没有被使用很简单,文件名(不包含后缀)去文件中查找一下就行了,没找到就没有用到,直接删除了就可以了 python的字符串处理相对简单一点,就写了个脚本,供大家参考: import osimport os.pathrootdir = 'D:\HitFm_v2.1.6\hitfm\src' pngFiles = []xmlFil

[Android] 针对生成的图片文件在系统Gallery不显示的处理

之前遇到过一个问题,就是发现我在程序中生成一个新的 Bitmap 之后,当我打开系统的 Gallery 查看时,并没有看到新生成的图像.然而打开文件浏览器,找到保存 Bitmap 所在的文件夹下,还能看到程序生成的 Bitmap 文件.也就是说,文件其实存在,但 Gallery 似乎并没有刷新.之后,又一个新的行为证实了我的观点,即,每次重启设备之后, Gallery 中就会显示新生成的 Bitmap 了.也就是说,重启设备之后,系统对某个保存有图片信息的文件进行了重新读写(当时得出的是这么个结

小例子: 保存Android项目时, 删除无用的文件(find + rm)

1.删除Android工程下的bin和gen 2.删除Git生成的.git文件夹 3.删除SVN生成的.svn文件夹 $ find 工程名 -name bin -exec rm -rvf {} \; $ find 工程名 -name gen -exec rm -rvf {} \; $ find 工程名 -name .git -exec rm -rvf {} \; $ find 工程名 -name .svn -exec rm -rvf {} \;

lint工具删除无用资源最佳示例

lint删除无用图片最佳示例 1.使用lint命令生成报告 lint --check UnusedResources --html D:\95xiu510_bqt\95xiu5.1.0\mlint_bqt.txt D:\95xiu510_bqt\95xiu5.1.0 执行结果 产生的报告文件 2.处理生成的报告文件 首先,更改后缀名为.html(目的是去除里面的HTML标记) 其次,找到这里,点击展开 最后,复制上面.html文件中的内容到一个新的.txt文件中 3.根据要删除的文件类型设置筛选

iOS ipa包瘦身---删除无用图片资源

随着客户端业务的增多和业务的更新,App包大小越来越大,优化包大小的事情迫在眉睫,客户端需要优化的地方也有很多,本期主要讲如何查找无用图片并且删除无用图片的方法. 方案1:(暴力方法)很简单写一个脚本把图片的名称在整个工程下查找即可,查不到就说明这张图片是无用的.(对于小的工程这样方案是可以的,但是对于工程大的项目查找太慢了). 方案2:把所有的赋值语句提取出来放到一个文件中,再把工程下面的图片名称获取出来在这个文件中查找,若查找不到则说明此图片是无用资源.由于工程中的图片全部放在了Images

如何将位置信息写入JPEG图片文件【android】

通过ExifInterface可以将拍照时的一些属性信息写入图片文件里,其中包括经纬度信息.本文介绍一种将经纬度坐标写入JPEG图片文件的方法! 核心代码 /** * 浮点型经纬度值转成度分秒格式 * * @param coord * @return */ public String decimalToDMS(double coord) { String output, degrees, minutes, seconds; // gets the modulus the coordinate d

Eclipse导出APK文件报错 android lint problem

今天准备用Eclipse导出APK文件上传各大安卓应用商店,结果发现血红一片. 继续导出,报错如下: 百度了一下,发现是android lint problem错误 Lint经常会扫描出一些必需要修复的错误(issue).但是这些issue一旦结合实际的上下文,或许实际上不是真正的problem.如果你结合上下文进行分析,确定该issue不是一个problem的话,它可以对此进行标记,以便lint不再继续keep pointing it out. 将"Run full error check w

为什么Android应该根据屏幕分辨率来加载不同的图片文件

1.图片在xxhdpi,手机是hdpi的 我们有一个手机是hdpi的.我们还有一个图片,我们把他放在xxhdpi下.当手机显示的时候,系统会去hdpi中找,发现没有图片,最终在xxhpi中找到.终于找到图片后,系统会觉得xxhdpi中的图片一定很大,而我要把它显示在hdpi的手机中的话就应该压缩下图片,最终成为了原图的1/4,而压缩后的图片会损失一些东西,就会造成模糊的情况.这样的坏处也是显而易见的,显示到手机的图片资源清晰度下降,模糊了很多. 2.图片在dpi,手机是hdpi的 系统先去hdp

客户端Android和Webservice之间的图片文件传输解决方法

最近在写webservice接口 给客户端提供数据和接收客户端发来的数据.当数据类型为图片类型的文件时候,先把文件转为流,然后用Base64编码成字节流的字符串,传输的还是字符串. 客户端代码: public static void main(String[] args) throws IOException { File file=new File("d:/272.jpg"); FileInputStream fis = new FileInputStream(file); Byte