[TOC]
前言
公司断网,blog 也好久没更新了,主要还是没有发现有什么可以写、本想把前段时间找的材料书签整理下,发现已经要的资源了,还是整理材料的频率太低了。今天主要是 Android 清理重复资源的问题,虽然最新的 Android Gradle 插件已经支持清理重复文件了,但是由于公司的项目 Ant 编译的,体验不了,还是得自己动手。由于原文找不到了,这边就没链接了,还请原作者见谅!我这边也算是留个档吧。这个的工作具体也都是第三方实现的,这边只是让它更易于使用,也只是提供下思路,程序基本都是有规律的,有规律就可以根据程序解决问题。
无用资源清理
借助 Eclipse 插件 Ucdetector,配合脚本清除 java 中的无用代码。
借助 Android Lint,配合脚本清除 res 中无用的代码。
PS:当然 Ucdetector 和 Lint 的功能远不止这两个功能,这边刚好需要这边的两个功能,在配合程序字符串处理,实现半自动删除无用的代码。
解决的问题
- 清除 src 无用 java 代码
- 清除 res 无用资源
问题产生的原因
程序版本迭代,总有些遗留问题,尤其是多人协作
方案流程
1. 清除 src 无用 java 代码
- 通过 Eclipse 配合插件 Ucdetector 产生报告
- 运行清除代码 这边主要根据报告获取字符截取,定位类的地址,再删除 核心代码如下:
if (line.contains("Class") && line.contains("has 0 reference") && !line.contains("Method")) {
int end = line.indexOf(".<init>");
if (end != -1) {
sb.append(line.substring(0, end));
sb.append("\r\n");
}
}
2. 清除 res 无用资源
- 通过 Android 提供的 Lint 工具产生报告
- 运行清除代码 这边主要根据报告获取字符截取,定位类的地址,再删除 核心代码如下:
if (line.contains("UnusedResources") && !line.contains("res\\values") && !line.contains("appcompat")) {
int end = line.indexOf(":");
if (end != -1) {
sb.append(line.substring(0, end));
sb.append("\r\n");
}
}
更多
- Ucdetector 以及 Lint 本身无法清除的资源,这边当然也无能为力啦。这边只是站在巨人的肩膀上,再想省事点。
- 当然据说新版 Gradle 插件已经可以通过 Lint 自动清除无用的代码,由于使用的是 Ant,这边只能自己做,有条件的当然用他们的,毕竟他们会持续维护。