Android项目控件统计(XML标签统计)
Posted 冷不冷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android项目控件统计(XML标签统计)相关的知识,希望对你有一定的参考价值。
最近项目要做改版,需要评估一下工时,因为项目比较大,导致在Studio搜索某些数据的时候数量出现100+的情况(比如统计项目中的Button数量),没办法统计到具体的数据.故写了一个统计xml文件标签的方法(java),分享一下,希望能帮到同样遇到这种问题的童鞋.
需求
修改项目中所有Activity的背景色,字体颜色等,修改所有Button(其他控件)的风格.评估工作量.
分析
看到需求的时候,会不会有童鞋有打开项目一个一个数的想法的(哈哈,其实我也有过,不过一瞬间就被干掉了)?当然这样做也可以,不过就和咸鱼没什么区别了,作为一名程序猿,当然要用程序猿的方式来解决这个问题.
首先分析一下,既然需要评估工作量,就需要知道项目中有多少个Activity和多少个Button(控件).怎么统计呢?
方法其实很多,首先看一下Activity的统计:
方法一)日常开发中一般Activity都是以XxxActivity来命名的,所以可以遍历项目src文件夹,找到所有文件名包含Activity的文件,统计出数量.但是这样统计有没有问题呢?仔细想一下,问题还是挺多的,比如有的Activity文件不是以XxxActivity格式命名的或者说有的非Activity的文件文件名中也包含Activity,这样统计出来的数据就会存在误差.
方法二)每个Activity创建时都需要在androidManifest文件中注册之后才能使用,所以打开项目的AndroidManifest文件,看一下有多少个activity标签就可以了.当然在AndroidManifest文件中用Studio中直接搜索就可以看到有多少个activity标签了,这里也用代码实现了一下,两种方式都可以.
在看一下Button(控件)的统计:
因为项目比较大,所以搜到的Button标签的数量很多,Studio里边提示的是100+(当然可能可以在Studio里边设置显示为确切的数据,不过这里没有去具体研究,直接用代码解析的),没办法看到确切的数据.
这要怎么解决呢?这里考虑一下,其实Button标签在项目中大都是写在布局文件中的(极少部分代码添加),布局文件都是xml文件,所以这里解析一下xml文件找到Button标签并统计个数其实就可以了,当然项目中有很多布局文件,所以遍历项目中的layout文件夹并统计所有xml文件中的Button标签总个数即可.
具体实现
代码如下:
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* @author junweiliu
* @version 1.0
* @date 2018/2/28
* @QQ 1007271386
*/
public class FileRead
public static void main(String[] args)
// 统计activity数量,当然也可以在IDE中直接查看
System.out.println("activity的个数是" + labelNum("...你的本地路径/AndroidManifest.xml", "activity"));
// 统计按钮数量(当然其他控件标签也可)
try
File file = new File("...你的本地路径/layout");
List<String> resultFileName = new ArrayList<String>();
List<String> fileNames = new ArrayList<String>();
fileNames.addAll(getFileNamesForFileFolder(file, resultFileName));
int buttonNum = 0;
for (int i = 0; i < fileNames.size(); i++)
buttonNum += labelNum(fileNames.get(i), "Button");
System.out.println("Layout文件个数是" + fileNames.size());
System.out.println("Button标签个数是" + buttonNum);
catch (Exception e)
e.printStackTrace();
/**
* 获取xml文件中某标签个数
*
* @param filePath 文件路径
* @param labelName 标签名称
* @return
*/
private static int labelNum(String filePath, String labelName)
int count = 0;
try
File f = new File(filePath);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName(labelName);
for (int i = 0; i < nl.getLength(); i++)
count++;
catch (Exception e)
e.printStackTrace();
return count;
/**
* 获取文件夹下所有文件路径
*
* @param file 文件夹路径
* @param resultFileName 文件路径集合
* @return
*/
private static List<String> getFileNamesForFileFolder(File file, List<String> resultFileName)
File[] files = file.listFiles();
if (files == null) return resultFileName;
for (File f : files)
if (f.isDirectory())
resultFileName.add(f.getPath());
// 调用自身,查找子目录
getFileNamesForFileFolder(f, resultFileName);
else
resultFileName.add(f.getPath());
return resultFileName;
运行结果如下:
统计的方法有很多,这里只是提供一种思路,其他类型的文件同理.这里使用java来编写,想使用的童鞋可以保存成java文件,修改文件路径及标签名字等信息,使用java指令(1.javac FileRead.java 2.java FileRead)编译运行或者也可放在IDE去运行.当然也可以把方法提出去使用.
以上是关于Android项目控件统计(XML标签统计)的主要内容,如果未能解决你的问题,请参考以下文章