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标签统计)的主要内容,如果未能解决你的问题,请参考以下文章

Excel 求考勤上班的工时怎么用函数统计

DevOps使用教程 华为云团队绩效评估 工时统计

JIRA统计工时,我们用Tempo

Android项目实战_手机安全卫士流量统计

一款惨绝人寰,惨无人道的程序员工时统计工具

android 自定义带动画的统计饼图