diff --git a/devlib/utils/android.py b/devlib/utils/android.py index 1f21fee..90be900 100755 --- a/devlib/utils/android.py +++ b/devlib/utils/android.py @@ -29,10 +29,11 @@ import sys import tempfile import time import uuid -import xml.etree.ElementTree import zipfile from collections import defaultdict +from io import StringIO +from lxml import etree try: from shlex import quote @@ -228,7 +229,10 @@ class ApkInfo(object): command = [dexdump, '-l', 'xml', extracted] dump = self._run(command) - xml_tree = xml.etree.ElementTree.fromstring(dump) + # Dexdump from build tools v30.0.X does not seem to produce + # valid xml from certain APKs so ignore errors and attempt to recover. + parser = etree.XMLParser(encoding='utf-8', recover=True) + xml_tree = etree.parse(StringIO(dump), parser) package = next((i for i in xml_tree.iter('package') if i.attrib['name'] == self.package), None) diff --git a/setup.py b/setup.py index 84bf3df..96262e1 100644 --- a/setup.py +++ b/setup.py @@ -92,6 +92,7 @@ params = dict( 'numpy; python_version>="3"', 'pandas<=0.24.2; python_version<"3"', 'pandas; python_version>"3"', + 'lxml', # More robust xml parsing ], extras_require={ 'daq': ['daqpower>=2'],