如何正确的用python修改AndroidManifest.xml(史上最详细教程)

Python057

如何正确的用python修改AndroidManifest.xml(史上最详细教程),第1张

AndroidManifest.xml这个文件如果你搞过android相关的东西(如果没搞过,我希望你去搞一下), 你一定很熟悉. 我们在工作可能会有一些动态修改或者获取manifest里面的值的情况, 那么今天涛哥就带你研究一下.

我们来看一下root.attrib的输出:

在versionName和versionCode前面的是什么? 没错, 就是我们上面配置的SPACE,所以如果我们要想正确的获取到值,别忘了加上.

通过上面我们可以看到, versionName和versionCode都是属于manifest根目录的成员

因为权限属性(uses-permission)在manifest一级子属性

因为activity不是manifest的一级子属性, 而是application的子属性

meta和service因为跟acitity是同级的, 所以处理方法一样, 我就不赘述了

其实如果你搞明白了,manifest的本质是xml, 然后知道如何用python操作xml, 那么这个问题就变得很简单

https://docs.python.org/2/library/xml.etree.elementtree.html#element-objects

类似于:

#!/usr/bin/evn python 

  #coding:utf-8 

   

  try: 

    import xml.etree.cElementTree as ET 

  except ImportError: 

    import xml.etree.ElementTree as ET 

  import sys 

   

  try: 

    tree = ET.parse("country.xml")     #打开xml文档 

    #root = ET.fromstring(country_string) #从字符串传递xml 

    root = tree.getroot()         #获得root节点  

  except Exception, e: 

    print "Error:cannot parse file:country.xml." 

    sys.exit(1) 

  print root.tag, "---", root.attrib  

  for child in root: 

    print child.tag, "---", child.attrib 

   

  print "*"*10 

  print root[0][1].text   #通过下标访问 

  print root[0].tag, root[0].text 

  print "*"*10 

   

  for country in root.findall('country'): #找到root节点下的所有country节点 

    rank = country.find('rank').text   #子节点下节点rank的值 

    name = country.get('name')      #子节点下属性name的值 

    print name, rank 

      

  #修改xml文件 

  for country in root.findall('country'): 

    rank = int(country.find('rank').text) 

    if rank > 50: 

      root.remove(country) 

   

  tree.write('output.xml')

给你推荐一篇文章看看吧:

http://python.jobbole.com/82775/

1. 使用ElementTree模块,它是Python标准库中提供的一个XML解析模块,它使用简单,非常容易使用,可以降低内存占用。

2. 使用lxml模块,它是一个高性能的XML和HTML解析器,可以有效的降低内存占用。

3. 使用iterparse()函数,它可以遍历XML文档,可以降低内存占用。

4. 使用xml.sax模块,它是一个基于事件驱动的XML解析器,可以有效的降低内存占用。