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

Python07

如何正确的用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

问题 在使用python对xml文件进行读取时,提示ValueError: multi-byte encodings are not supported

xml是用gb2312编码的。

很多贴子上说把xml的编码格式改为utf-8,就可以正常执行了。

但是这里有一个问题,xml原先的编码格式和encoding字段显示的编码格式都是gb2312,如果只改了encoding字段,之后再使用这个xml文件,就会按utf-8解析gb2312,会造成不可预知的后果。

第二个问题就是指改一个xml文件还好,但是有几百上千的时候,改这个就不方便了。

解决方案 用parseString函数

python提供了两种xml的输入方式,一种是文件,一种是字符串。我们可以先将xml文件读入内存,然后关闭文件。再将xml字符串中的gb2312用replace改为utf-8,然后用parseString解析,这样就不会报错。

注意事项 如果文件过大,有可能内存不够,所以适用于小的xml文件。注意要把不使用的文件给close掉,以免占用文件描述符。

python对XML的解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,SAX,DOM,以及ElementTree:

1.SAX (simple API for XML )

python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(Document Object Model)

将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。