Index: build/android/provision_devices.py |
diff --git a/build/android/provision_devices.py b/build/android/provision_devices.py |
index 8c21f97ef200987db3d3432e4f26da2b67004d19..3d5ad7423bf8fb7521b755ad4a5bb1564668d836 100755 |
--- a/build/android/provision_devices.py |
+++ b/build/android/provision_devices.py |
@@ -295,15 +295,26 @@ def SetProperties(device, options): |
check_return=True) |
if options.remove_system_webview: |
- if device.HasRoot(): |
- # This is required, e.g., to replace the system webview on a device. |
- device.adb.Remount() |
- device.RunShellCommand(['stop'], check_return=True) |
- device.RunShellCommand(['rm', '-rf'] + _SYSTEM_WEBVIEW_PATHS, |
- check_return=True) |
- device.RunShellCommand(['start'], check_return=True) |
+ if any(device.PathExists(p) for p in _SYSTEM_WEBVIEW_PATHS): |
+ logging.info('System WebView exists and needs to be removed') |
+ if device.HasRoot(): |
+ # Disabled Marshmallow's Verity security feature |
+ if device.build_version_sdk >= version_codes.MARSHMALLOW: |
+ device.adb.DisableVerity() |
+ device.Reboot() |
+ device.WaitUntilFullyBooted() |
+ device.EnableRoot() |
+ |
+ # This is required, e.g., to replace the system webview on a device. |
+ device.adb.Remount() |
+ device.RunShellCommand(['stop'], check_return=True) |
+ device.RunShellCommand(['rm', '-rf'] + _SYSTEM_WEBVIEW_PATHS, |
+ check_return=True) |
+ device.RunShellCommand(['start'], check_return=True) |
+ else: |
+ logging.warning('Cannot remove system webview from a non-rooted device') |
else: |
- logging.warning('Cannot remove system webview from a non-rooted device') |
+ logging.info('System WebView already removed') |
# Some device types can momentarily disappear after setting properties. |
device.adb.WaitForDevice() |