lint工具删除无用资源最佳示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、根据要删除的文件类型设置筛选条件(已能智能处理layout文件和drawable文件)4、至少设置以下三个参数
String projectPath = "D:\\95_bqt\\95xiu5.0.9";//工程路径,注意,
String fileName = "mlint_bqt.txt";//文件名
String copyPath = "D:\\_95copy"; //备份路径
注意:根据要删除的文件类型,要先在备份目录中建几个文件夹,名字分布是xml、layout、hdpi、xhdpi等5、执行java代码即可
源码
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;/*** 删除android工程中未使用的drawable资源,并备份删除的文件<br/>* 注意:必须先把文件夹创建了才能往文件夹里写文件,否者报异常java.io.FileNotFoundException<br/>* 所以,一定要先在备份目录中建几个文件夹,名字分布是xml、layout、hdpi等<br/>* 日志格式:<br/>* 检索出的行===res\drawable\yellow_bg_item_selector_withline.xml:The resource R.drawable.yellow_bg_item_selector_withline appears to be unused <br/>* 要删除文件的相对路径:res\drawable\yellow_bg_item_selector_withline.xml <br/>* 要删除文件的绝对路径:D:\95xiu_bqt\95xiu5.0.9\res\drawable\yellow_bg_item_selector_withline.xml <br/>* ---------------------------------------------yellow_bg_item_selector_withline.xml删除成功! <br/>* @author 白乾涛*/public class DeleteFile {public static void main(String[] args) throws Exception {String projectPath = "D:\\95bobo_bqt\\95bobo2.0.9";//工程路径String fileName = "mlint_bqt_content_only.txt";//文件名String copyPath = "D:\\95bobo_copy"; //备份路径,定要先在备份目录中建几个文件夹,名字是xml、layout、hdpi等// String projectPath = "D:\\95xiu_bqt\\95xiu5.0.9";//工程路径// String fileName = "mlint_bqt_content_only.txt";//文件名// String copyPath = "D:\\95xiu_copy"; //备份路径,要先在备份目录中建几个文件夹,名字是xml、layout、hdpi等delete(projectPath, fileName, copyPath);}/*** 删除文件,简化方法* @param projectPath Android工程所在地址* @param fileName lint产生的文件名,要带后缀名* @param copyPath 要删除的文件的备份路径*/private static void delete(String projectPath, String fileName, String copyPath) {boolean b = true;String filePath = projectPath + "\\" + fileName;//lint产生的文件放在Android工程根目录下String encoding = "UTF-8";delete(b, projectPath, filePath, copyPath, encoding);}/*** 删除文件* @param b false 不删除文件,仅显示要删除的文件列表;true 删除* @param projectPath Android工程所在跟目录* @param filePath lint产生的【文件】所在路径,要带后缀名* @param copyPath 要删除的文件的备份路径* @param encoding 编码格式*/private static void delete(boolean b, String projectPath, String filePath, String copyPath, String encoding) {File file = new File(filePath);if (!file.exists()) {throw new RuntimeException("文件或路径不存在");}if (!file.isFile()) {throw new RuntimeException("对应路径不是一个文件");//带后缀的文件路径,而非文件所在文件夹路径}InputStreamReader read = null;try {read = new InputStreamReader(new FileInputStream(file), encoding);//考虑编码格式} catch (Exception e) {e.printStackTrace();}BufferedReader bufferedReader = new BufferedReader(read);String line = null;try {//逐行检查lint产生的文件while ((line = bufferedReader.readLine()) != null) {if ((line.contains("res\\drawable") || line.contains("res\\layout"))&& line.contains("appears to be unused")) {//res\layout\activity_check.xml: The resource R.layout.activity_check appears to be unused//res\drawable-xhdpi\anim_f16_effect0.png: The resource R.drawable.anim_f16_effect0 appears to be unused//res\drawable\attend_enable.xml: The resource R.drawable.attend_enable appears to be unusedSystem.out.println("检索出的行=====" + line);//因为文件已经被我处理过了,所以不需要怎么处理就能把需要的字符串弄出来int start = line.indexOf("res");//第一次出现的位置(如果没有则返回 -1)int end = line.indexOf(":", start + 1);//从指定位置开始查找第一次出现的位置if (start != -1 && end != -1) {//筛选出文件的相对路径String mPath = line.substring(start, end);//包含start,不包含endSystem.out.println("要删除文件的相对路径:=====" + mPath);//筛选出文件中的layout、DPI,以放在不同子文件夹中String child_path = null;if (mPath.contains("res\\layout") && mPath.contains(".xml")) {child_path = "layout";} else {int start2 = mPath.indexOf("-");int end2 = mPath.indexOf("\\", start2 + 1);if (start2 != -1 && end2 != -1) {//把路径中的hdpi、xhdpi弄出来child_path = mPath.substring(start2 + 1, end2);System.out.println("要删除文件的子文件夹:=====" + child_path);} else {child_path = "xml";}}//拼接文件的绝对路径String mFilePath = projectPath + "\\" + mPath;//经检测,Windows平台用\或/都没问题,标准为\System.out.println("要删除文件的绝对路径:=====" + mFilePath);if (b) {File mFile = new File(mFilePath);//必须做健壮性判断if (mFile.exists() && mFile.isFile()) {//备份文件copy(mFilePath, copyPath, child_path, mFile.getName());//删除文件if (mFile.delete())System.out.println("---------------------------------------------" + mFile.getName() + "删除成功!");elseSystem.out.println("---------------------------------------------" + mFile.getName() + "删除失败!");}}}}}} catch (IOException e) {e.printStackTrace();}try {read.close();bufferedReader.close();} catch (IOException e) {e.printStackTrace();}System.out.println("---------------------------------------------------------------------------------------------已完成!");}/*** 备份要删除的文件* @param pathFrom 源文件路径* @param pathTo 备份文件路径* @param child_path 备份的子文件路径* @param fileName 备份的文件名*/public static void copy(String pathFrom, String pathTo, String child_path, String fileName) {FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream(pathFrom);fos = new FileOutputStream(pathTo + "\\" + child_path + "\\" + fileName);byte[] buf = new byte[1024];int len = 0;while ((len = fis.read(buf)) != -1) {fos.write(buf, 0, len);}} catch (Exception e) {e.printStackTrace();} finally {try {if (fos != null) {fos.close();fis.close();}} catch (IOException e) {e.printStackTrace();}}}}
以上是关于lint工具删除无用资源最佳示例的主要内容,如果未能解决你的问题,请参考以下文章
Android 性能优化:使用 Lint 优化代码去除多余资源
androidStudio去除无用、多余、未引用、未关联的资源的方式