55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
from utils.XmlPatcher import XmlPatcher
|
|
|
|
class ManifestPatcher(XmlPatcher):
|
|
def __init__(self, manifestPath):
|
|
assert manifestPath is not None
|
|
|
|
XmlPatcher.__init__(self, manifestPath)
|
|
|
|
self.androidNs = "http://schemas.android.com/apk/res/android"
|
|
self.androidNsPrefix = 'android'
|
|
|
|
self.namespaces[self.androidNsPrefix] = self.androidNs
|
|
self.regNamespace(self.androidNsPrefix, self.androidNs)
|
|
|
|
def AddOrReplaceManifestAtr(self, rawAtrName, atrValue):
|
|
assert rawAtrName is not None
|
|
assert atrValue is not None
|
|
|
|
tree = self.parse()
|
|
manifestElement = tree.getroot()
|
|
|
|
name = self.fetchNameByRawName(rawAtrName)
|
|
manifestElement.set(name, atrValue)
|
|
|
|
self.write(tree)
|
|
|
|
def fetchNameByRawName(self, rawName):
|
|
nameInfo = self.parseRawName(rawName)
|
|
name = self.fetchName(nameInfo)
|
|
|
|
return name
|
|
|
|
def parseRawName(self, rawName):
|
|
"""rawName=(nsPrefix:)?OriginalName
|
|
"""
|
|
|
|
result = rawName.split(':')
|
|
prefixExists = len(result) > 1
|
|
|
|
atrInfo = {
|
|
'prefix': result[0] if prefixExists else None,
|
|
'original_name': result[1] if prefixExists else result[0]
|
|
}
|
|
|
|
return atrInfo
|
|
|
|
def fetchName(self, nameInfo):
|
|
assert nameInfo is not None
|
|
|
|
nsPrefix = nameInfo['prefix']
|
|
origName = nameInfo['original_name']
|
|
|
|
namespace = self.namespaces.get(nsPrefix, None)
|
|
name = self.getNameWithNs(origName, namespace) if nsPrefix else origName
|
|
return name |