diff --git a/core/java/com/android/internal/os/WebViewZygoteInit.java b/core/java/com/android/internal/os/WebViewZygoteInit.java index 7f46a0c1abdec..cadb66ae6e08b 100644 --- a/core/java/com/android/internal/os/WebViewZygoteInit.java +++ b/core/java/com/android/internal/os/WebViewZygoteInit.java @@ -29,7 +29,7 @@ import android.webkit.WebViewFactoryProvider; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; /** * Startup class for the WebView zygote process. @@ -91,13 +91,18 @@ class WebViewZygoteInit { try { Class providerClass = WebViewFactory.getWebViewProviderClass(loader); - Object result = providerClass.getMethod("preloadInZygote").invoke(null); - preloadSucceeded = ((Boolean) result).booleanValue(); - if (!preloadSucceeded) { - Log.e(TAG, "preloadInZygote returned false"); + Method preloadInZygote = providerClass.getMethod("preloadInZygote"); + preloadInZygote.setAccessible(true); + if (preloadInZygote.getReturnType() != Boolean.TYPE) { + Log.e(TAG, "Unexpected return type: preloadInZygote must return boolean"); + } else { + preloadSucceeded = (boolean) providerClass.getMethod("preloadInZygote") + .invoke(null); + if (!preloadSucceeded) { + Log.e(TAG, "preloadInZygote returned false"); + } } - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | - IllegalAccessException | InvocationTargetException e) { + } catch (ReflectiveOperationException e) { Log.e(TAG, "Exception while preloading package", e); }