Chromium Code Reviews| Index: build/android/devil/android/apk_helper.py |
| diff --git a/build/android/devil/android/apk_helper.py b/build/android/devil/android/apk_helper.py |
| index 73d4b6b214b8b0f8be02f188497085539825a4df..b0612a7d8ea72df618167f3de54f818d23a50e4d 100644 |
| --- a/build/android/devil/android/apk_helper.py |
| +++ b/build/android/devil/android/apk_helper.py |
| @@ -13,10 +13,11 @@ from pylib import constants |
| _AAPT_PATH = os.path.join(constants.ANDROID_SDK_TOOLS, 'aapt') |
| _MANIFEST_ATTRIBUTE_RE = re.compile( |
| - r'\s*A: ([^\(\)= ]*)\([^\(\)= ]*\)="(.*)" \(Raw: .*\)$') |
| + r'\s*A: ([^\(\)= ]*)\([^\(\)= ]*\)=(?:"(.*)" \(Raw: .*\)|\(type.*?\)(.*))$') |
| _MANIFEST_ELEMENT_RE = re.compile(r'\s*(?:E|N): (\S*) .*$') |
| _PACKAGE_NAME_RE = re.compile(r'package: .*name=\'(\S*)\'') |
| _SPLIT_NAME_RE = re.compile(r'package: .*split=\'(\S*)\'') |
| +_TRUE = '0xffffffff' |
|
jbudorick
2015/09/15 18:36:41
I worry about this being fragile if Android decide
agrieve
2015/09/15 19:30:05
Changed it to parse the number and look for non-ze
|
| def GetPackageName(apk_path): |
| @@ -60,7 +61,7 @@ def _ParseManifestFromApk(apk_path): |
| if m: |
| if not m.group(1) in node: |
| node[m.group(1)] = [] |
| - node[m.group(1)].append(m.group(2)) |
| + node[m.group(1)].append(m.group(2) or m.group(3)) |
| continue |
| return parsed_manifest |
| @@ -72,6 +73,7 @@ class ApkHelper(object): |
| self._manifest = None |
| self._package_name = None |
| self._split_name = None |
| + self._has_isolated_processes = None |
| def GetActivityName(self): |
| """Returns the name of the Activity in the apk.""" |
| @@ -130,6 +132,18 @@ class ApkHelper(object): |
| return self._split_name |
| return None |
| + def HasIsolatedProcesses(self): |
| + """Returns whether any services exist that use isolatedProcess=true.""" |
| + if self._has_isolated_processes is None: |
| + manifest_info = self._GetManifest() |
| + try: |
| + services = manifest_info['manifest']['application']['service'] |
| + self._has_isolated_processes = ( |
| + _TRUE in services['android:isolatedProcess']) |
| + except KeyError: |
| + self._has_isolated_processes = False |
| + return self._has_isolated_processes |
| + |
| def _GetManifest(self): |
| if not self._manifest: |
| self._manifest = _ParseManifestFromApk(self._apk_path) |