Lint工具去除Android工程里不再需要的资源
摘要:
在项目开发过程中常常会不断改UI设计,于是在定稿要发布的前夕,发现有好多不再需要的资源文件存在,发布的包会把这些无用的资源都包含在里面,造成APK的下载包过大。可以通过Android SDK自带的工具进行无用资源的批量删除,下面就工具的使用流程和注意事项进行介绍。
第一步:lint检测无效资源
在Android SDK里启动android-sdk-windows\tools\lint.bat工具【有个小技巧:在文件夹Shift+右键 –> w键 -> Enter 即可打开cmd并进入当前文件夹目录】
将检测结果导出到文本文件,代码:lint 工程目录 > 导出的文件名,如 lint D:\Codes\Android\WCC_v2 > D:\Codes\Android\RemoveUnusedResources\result.txt
即可将WCC_v2下的工程检测结果导出到result.txt文件里
第二步:自动化删除无效文件
创建一个Java工程RemoveUnusedResources【C#也可】,关键代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
String projectPath = "D:\\Codes\\Android\\WCC_v2\\";
try {
BufferedReader reader = new BufferedReader(new FileReader("result.txt"));
String line;
int count = 0;
double totalSize = 0;
while((line = reader.readLine()) != null) {
if (line.contains("UnusedResources")
&& !line.contains("res\\value")
&& !line.contains("appcompat")
&& !line.contains("umeng")
) {
count++;
int end = line.indexOf(":");
if (end != -1){
String file = line.substring(0, end);
String f = projectPath +file;
System.out.println(f);
// File curFile = new File(f);
// curFile.delete();
totalSize += FileSizeUtil.getFileOrFilesSize(f, FileSizeUtil.SIZETYPE_KB); //curFile.length(); //
// new File(file).delete();
}
}
}
System.out.println(String.valueOf(count));
System.out.println(String.valueOf(totalSize/1024));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注意事项:
- Lint只能分析资源文件,即Res目录下的文件,这样会导致有可能某个资源文件被某Java文件引用,而这个Java文件是Unused的,但资源文件就不会被lint检测出来,所以如果要做彻底的瘦身发布,要先优化Java代码在lint去资源。
- Lint的分析不够职能,比如有一个drawable文件只被一个layout文件引用,但layout是Unused,lint就不会检测出该drawable为Unused文件,所以要反复删除再lint检测几次,直到检测到的count数目为0.
- 如果工程里引用了其他第三方库,如友盟后台,lint会认为umeng的drawable文件都是Unused resources,所以在删除时一定要避免删除掉第三方库自带的文件。
参考:
Lint工具去除Android工程里不再需要的资源的更多相关文章
- android 工程里缺少 R.java 文件原因和解决方法
作为新手,学习android 的时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法. 可是导入android源码后,基本都有错误,R.java也不会自 ...
- 解决Android工程里的xml文件自动提示问题
昨天晚上看某培训机构的Android的 视频教程,看到他在写布局的XML文件时,有很方便的自动提示功能.我就在自己的Eclipse里试了一下,可是我的没实现.就到网上查,很多都说:在 Window-& ...
- 编写Android工程里测试代码的步骤
第一步: 写个类去继承 AndroidTestCase public class TestStudent extends AndroidTestCase 并且编写一个测试的方法, 注意,测试的方法必须 ...
- 清除Android工程中没用到的资源
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- 清除Android工程中没用到的资源(转)
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- Android学习之Android studio TraceView和lint工具的使用具体解释
上次讲述了一下Android studio Terminal的使用配置,今天又学习了一下关于Traceview和lint工具的使用. 首先来讲lint吧: Android lint工具是Android ...
- 自动删除Android工程中无用的资源
开发时间久了, 几个版本迭代之后, 工程中难免留下很多垃圾资源, 造成apk的包很大, 这里介绍一个工具, 可以自动扫描工程中, 没有使用的资源, 然后自动删除: 包括图片, xml, 文本等. 采用 ...
- apk去广告工具(利用apktool去除apk文件里的广告)
基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawab ...
- 【工利其器】Android Lint篇——为Android量身定做的静态代码审查工具
前言 我们在进行代码优化的时候,往往是通过开发者的经验来判断哪些代码可能存在潜在问题,哪些资源的使用不合规范等.实际上Android SDK提供了一款功能非常强大的工具,来帮助开发者自动检测代码的质量 ...
随机推荐
- vue之props传值与单向数据流
(1)组件通信 父组件向子组件传递数据.这个正向传递数据的过程就是通过props来实现的. 两者区别:props中声明的数据与组件data函数return返回的数据的主要区别就是props来自父级,而 ...
- 【计算机网络】2.5 DNS:因特网的目录服务
第二章第五节 因特网的目录服务 DNS(域名系统)提供了一种能运行主机名到IP地址转换的因特网目录服务:一方面,他让人能够记住如taobao.com这样的主机别名:另一方面,他提供给路由器可理解的IP ...
- POJ 1664 放苹果( 递推关系 )
链接:传送门 思路:苹果m个,盘子n个.假设 f ( m , n ) 代表 m 个苹果,n个盘子有 f ( m , n ) 种放法. 根据 n 和 m 的关系可以进一步分析: 特殊的 n = 1 || ...
- BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割
题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...
- [Luogu] P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 题目分析 因为读错题WAWA大哭. 先dfs枚举选的砝码,满足条件时进行d ...
- KBE_创建项目和基本常识
此笔记参考官方文档 第一个项目 资产库:是每一个项目文件夹的名称,使用KBE提供的生成工具生成一个最小资产库,其中包含了很多常用的工具,默认名server_assets: res:放置一些资源(入地图 ...
- Spider-scrapy 中的 xpath 语法与调试
把setting中的机器人过滤设为False ROBOTSTXT_OBEY = False 1 语法 artcile 选取所有子节点 /article 选取根元素 artile article/a 选 ...
- UVA 1596 Bug Hunt (大模拟 栈)
题意: 输入并模拟执行一段程序,输出第一个bug所在的行. 每行程序有两种可能: 数组定义: 格式为arr[size]. 例如a[10]或者b[5],可用下标分别是0-9和0-4.定义之后所有元素均为 ...
- 远程调试nodejs
一 windows作为远程服务器 1.在远程服务器(192.168.1.1)上安装node-inspector:npm install -g node-inspector // -g 导入安装路径 ...
- JavaEE JDBC 事务
JDBC 事务 @author ixenos 事务 1.概念:我们将一组语句构建成一个事务(trans action),当所有语句顺利执行之后,事务可以被提交(commit):否则,如果其中某个语句遇 ...