使用Python3将manifest.xml转为excel供查看

#!/usr/bin/env python3

from xml.dom.minidom import parse
import xml.dom.minidom
import os,os.path
import xlwt
import sys, getopt

#存放所有数据,二位数据,到时候将次二维数组数据直接写入excel中
projectsExcel=[]
projectsExcel.append(['Manifest','工程名称','仓库地址','分支'])

def usage():
    print('ManifestParse.py usage:')
    print('-i:      指定Manifest存放的文件夹')

#数据写入xls
def write_to_excel(excelFileName,sheetName,data):
    '''Write content to a new excel'''
    new_workbook=xlwt.Workbook()
    newSheet=new_workbook.add_sheet(sheetName)
    i=j=0
    for x in range(0,len(data)):
        for y in data[i]:
            newSheet.write(i,j,y)
            j+=1
        i+=1
        j=0
    if not os.path.exists('parse_results'):
        os.makedirs('parse_results')
    new_workbook.save(r'parse_results/'+excelFileName+'.xls')

def parse_manifest(manifestName,manifestPath):
    # 使用minidom解析器打开 XML 文档
    DOMTree = xml.dom.minidom.parse(manifestPath)
    collection = DOMTree.documentElement
    remotes = collection.getElementsByTagName("remote")

    remoteDict={}
    for remote in remotes:
        remoteDict[remote.getAttribute('name')]=remote.getAttribute('fetch')

    default = collection.getElementsByTagName("default")[0]
    #默认远程地址
    defaultRemote=remoteDict.get(default.getAttribute('remote'))
    #默认分支
    defaultRevision=default.getAttribute('revision')
    #获取所有的project属性
    projects = collection.getElementsByTagName("project")
    for x in projects:
        #获取工程名
        projectName = x.getAttribute('name')
        #获取工程地址
        projectRemoteKey=x.getAttribute('remote')
        if projectRemoteKey ==None:
            projectRemoteKey=default.getAttribute('remote')
        projectRemote=remoteDict.get(projectRemoteKey)
        if projectRemote==None:
            projectRemote=defaultRemote
        #获取工程分支
        projectBranch=x.getAttribute('revision')
        if projectBranch =='':
            projectBranch=defaultRevision
        #应用分支数据追加到总的数据文件上
        one=[manifestName,projectName,projectRemote+'/'+projectName,projectBranch]
        projectsExcel.append(one)
        print(manifestName,' ',projectName,'  ',projectRemote+'/'+projectName,' ',projectBranch)

def main(manifestDir):
    for root, dirs, files in os.walk(manifestDir,topdown=False):
        for name in files:
            path = os.path.join(root,name)
            if path.endswith('xml'):
                print(path)
                parse_manifest(name,path)
     #统计结果写入excel
    write_to_excel('统计结果','应用分支详情',projectsExcel)

if __name__ == '__main__':
    manifestDir=None
    try:
      opts, args = getopt.getopt(sys.argv[1:],'i:')
    except getopt.GetoptError:
      usage()
      sys.exit(2)
    for o,a in opts:
        print(o,a)
        if o == '-i':
            manifestDir=a
    if manifestDir == None:
        usage()
    else:
        main(manifestDir)

好的,我可以为您解答关于添加、修改Manifest.xmlManifest.kt和Layout布局的问题。 首先,让我们来看一下Manifest.xmlManifest.kt。Manifest文件是Android应用程序的配置文件,用于声明应用程序的组件和权限。在Kotlin中,你可以使用Manifest.kt文件来代替Manifest.xml文件,使用更加简单和方便。你可以在Manifest.kt文件中声明应用程序的组件和权限,如下所示: ``` package com.example.myapp import android.Manifest import androidx.compose.ui.graphics.Color val permissions = arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) val themeColors = mapOf( "primary" to Color(0xFF6200EE), "primaryVariant" to Color(0xFF3700B3), "secondary" to Color(0xFF03DAC6), "secondaryVariant" to Color(0xFF018786), "background" to Color(0xFFE5E5E5), "surface" to Color.White, "error" to Color(0xFFB00020), "onPrimary" to Color.White, "onSecondary" to Color.Black, "onBackground" to Color.Black, "onSurface" to Color.Black, "onError" to Color.White ) ``` 在这里,我们声明了应用程序需要的权限和主题颜色。 接下来,让我们来看一下Layout布局。Layout布局用于定义应用程序的UI界面。在Kotlin中,你可以使用Compose来创建布局。Compose是一种声明式UI编程模型,可以让你更加容易地编写UI界面。例如,以下代码演示了如何使用Compose创建一个简单的UI界面: ``` @Composable fun Greeting(name: String) { Text(text = "Hello $name!") } @Preview(showBackground = true) @Composable fun DefaultPreview() { MyApplicationTheme { Greeting("Android") } } ``` 在这里,我们定义了一个Greeting组件,它接受一个名字参数,并显示一个"Hello + 名字"的文本。我们还定义了一个DefaultPreview组件,它显示一个MyApplicationTheme主题和一个Greeting组件。 希望这些信息对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值