快速清除安卓res下无用资源,精简apk

来源:互联网 发布:c 定义json数组 编辑:程序博客网 时间:2024/04/30 05:06

由于我的操作方法是参考网上一篇原文研究的,尊重原创,首先贴出该地址:

http://www.cnblogs.com/angeldevil/p/3725358.html


但是遗憾的是这个文章虽然给出了方法,却没有给足够详细的操作步骤。

本人研究了一会走通了,把apk从12M降到了7M,下面写下我的实际的操作步骤以及注意事项,补充完善下了哈:


1.首先,最重要的是先把自己项目备份一下免得出错无法还原,后面还有用);


2.打开cmd,进入你的SDK所在tools目录(因为lint.bat文件在这个目录下)

例如我的SDK在G:\workfiles\eclipse_adt\sdk\tools,则执行如下命令进入目录(可以直接复制路径,在命令行内输入“cd:”然后粘贴)




3.利用lint.bat工具检测没有被引用的资源:在命令行上继续执行如下命令(可直接复制,然后替换红色字体部分为自己项目所在的路径,即被检测的项目)

lint --check "UnusedResources"  你的项目所在路径 > result.txt

例如我的项目在G:\workfiles\android\android_projects\thinksns_xiniuhui_srb,则执行


可能会花一点时间,这个取决于你项目大小,运行完则会生成一个result.txt文件在你sdk--tools目录下;



这个文件下记录的就是你的代码中所有未引用的资源名称;


4.通过脚本清理你的项目:

在result.txt当前文件夹新建一个delete.java文件(可以下载链接我写好的,也可以自己新建delete.txt,复制以下代码,把红色部分改成自己的项目路径和SDK路径,然后修改扩展名为.java,最后 命令行输入 javac  delete.java  编译,再java delete 执行就行了)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
 * 类说明:
 * 
 * @author Administrator
 * @date 2015-5-21
 * @version 1.0
 */
public class delete{
public static void main(String[] args) {
try {
String projectPath = "G:/workfiles/android/android_projects/thinksns_xiniuhui_srb";
BufferedReader reader = new BufferedReader(new FileReader(
"G:/workfiles/eclipse_adt/sdk/tools/result.txt"));
String line;
int count = 0;
while ((line = reader.readLine()) != null) {
if (line.contains("UnusedResources")
&& !line.contains("res/value")
&& !line.contains("appcompat")) {
count++;
int end = line.indexOf(":");
if (end != -1) {
String file = line.substring(0, end);
String f = projectPath + file;
System.out.println(f);
new File(f).delete();
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}







5.最后需要注意的可能代码会删除你values下的某些文件,这时候会导致你的代码无法编译,你只需要把之前备份的文件复制到项目下就ok了,运行下看apk是否变小了呢



0 0
原创粉丝点击