摘要:

在项目开发过程中常常会不断改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();
}
}

注意事项:

  1. Lint只能分析资源文件,即Res目录下的文件,这样会导致有可能某个资源文件被某Java文件引用,而这个Java文件是Unused的,但资源文件就不会被lint检测出来,所以如果要做彻底的瘦身发布,要先优化Java代码在lint去资源。
  2. Lint的分析不够职能,比如有一个drawable文件只被一个layout文件引用,但layout是Unused,lint就不会检测出该drawable为Unused文件,所以要反复删除再lint检测几次,直到检测到的count数目为0.
  3. 如果工程里引用了其他第三方库,如友盟后台,lint会认为umeng的drawable文件都是Unused resources,所以在删除时一定要避免删除掉第三方库自带的文件。

参考:

【1】清除Android工程中没用到的代码 

【2】小工具实现工程无效代码的删除 

Lint工具去除Android工程里不再需要的资源的更多相关文章

  1. android 工程里缺少 R.java 文件原因和解决方法

    作为新手,学习android 的时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法. 可是导入android源码后,基本都有错误,R.java也不会自 ...

  2. 解决Android工程里的xml文件自动提示问题

    昨天晚上看某培训机构的Android的 视频教程,看到他在写布局的XML文件时,有很方便的自动提示功能.我就在自己的Eclipse里试了一下,可是我的没实现.就到网上查,很多都说:在 Window-& ...

  3. 编写Android工程里测试代码的步骤

    第一步: 写个类去继承 AndroidTestCase public class TestStudent extends AndroidTestCase 并且编写一个测试的方法, 注意,测试的方法必须 ...

  4. 清除Android工程中没用到的资源

    项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...

  5. 清除Android工程中没用到的资源(转)

    项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...

  6. Android学习之Android studio TraceView和lint工具的使用具体解释

    上次讲述了一下Android studio Terminal的使用配置,今天又学习了一下关于Traceview和lint工具的使用. 首先来讲lint吧: Android lint工具是Android ...

  7. 自动删除Android工程中无用的资源

    开发时间久了, 几个版本迭代之后, 工程中难免留下很多垃圾资源, 造成apk的包很大, 这里介绍一个工具, 可以自动扫描工程中, 没有使用的资源, 然后自动删除: 包括图片, xml, 文本等. 采用 ...

  8. apk去广告工具(利用apktool去除apk文件里的广告)

    基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawab ...

  9. 【工利其器】Android Lint篇——为Android量身定做的静态代码审查工具

    前言 我们在进行代码优化的时候,往往是通过开发者的经验来判断哪些代码可能存在潜在问题,哪些资源的使用不合规范等.实际上Android SDK提供了一款功能非常强大的工具,来帮助开发者自动检测代码的质量 ...

随机推荐

  1. 【东软实训】SQL多表链接

    如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询.非等值链接查询.自身链接查询.外链接查询和复合条件链接查询. 这篇博文我们来对多表链接进行 ...

  2. linux内核中GNU C和标准C的区别

    linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...

  3. Elasticsearch入门和基本使用

    1. 什么是Elasticsearch? Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统:Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开 ...

  4. Python中的列表(6)

    列表切片 如何拿到列表中的部分元素,Python 引入了 “切片” 的概念. 上代码: words = ['a','b','c','d'] print(words[0:3]) console: 冒号( ...

  5. jQuery学习之------对标签属性的操作

    jQuery学习之------标签的属性 <a href=””>链接</a>此处的href就是该a标签带有的属性 在js中对标签的属性的操作方法有 1.1getAttribut ...

  6. [luoguP2444] [POI2000]病毒(AC自动机 + dfs)

    传送门 先把所有串建一个AC自动机, 如果要找一个不包含任意一个串的串, 说明这个串一直在AC自动机上匹配但匹配不到, 也就是说,匹配时除去val值为1的点,除去fail指针指向val值为1的点,是否 ...

  7. 贝尔数--Codeforces908E. New Year and Entity Enumeration

    给n<=50个长度m<=1000的二进制数,记他们为集合T,求满足下面条件的集合S数:令$M=2^m-1$,1.$a \epsilon S \Rightarrow a \ \ xor \ ...

  8. 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!

    n<=50000,m<=50000的图,给s和t,问有多少点对$(a,b)$满足 嗯. 不会. 首先最短路DAG造出来,然后两个条件转述一下:条件一,$N_a$表示从s到t经过a的路径,$ ...

  9. ****使用ftp软件上传下载php文件时换行符丢失bug

    在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件 ...

  10. 单调队列&单调栈 基础

    参考博客https://www.cnblogs.com/tham/p/8038828.html 例题  poj 2823 Sliding Window Time Limit: 12000MS   Me ...