diff --git a/README.version b/README.version
index 92d3d64..2d91670 100644
--- a/README.version
+++ b/README.version
@@ -10,5 +10,3 @@
 
 Local Modifications:
         Allow to share classloader via dexmaker.share_classloader system property (I8c2490c3ec8e8582dc41c486f8f7a406bd635ebb)
-	Allow 'Q' until we can replace the version check with a number based check
-        Mark mocks as trusted (needs upstreaming)
diff --git a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InlineDexmakerMockMaker.java b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InlineDexmakerMockMaker.java
index abcf4f5..319ff0d 100644
--- a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InlineDexmakerMockMaker.java
+++ b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InlineDexmakerMockMaker.java
@@ -26,7 +26,6 @@
 import org.mockito.Mockito;
 import org.mockito.exceptions.base.MockitoException;
 import org.mockito.internal.creation.instance.Instantiator;
-import org.mockito.internal.util.reflection.LenientCopyTool;
 import org.mockito.invocation.MockHandler;
 import org.mockito.mock.MockCreationSettings;
 import org.mockito.plugins.InstantiatorProvider;
@@ -37,7 +36,6 @@
 import java.lang.ref.Reference;
 import java.lang.ref.ReferenceQueue;
 import java.lang.ref.WeakReference;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
@@ -108,40 +106,6 @@
                         + "Potentially, the current VM does not support the jvmti API correctly",
                         ioe);
             }
-
-            // Blacklisted APIs were introduced in Android P:
-            //
-            // https://android-developers.googleblog.com/2018/02/
-            // improving-stability-by-reducing-usage.html
-            //
-            // This feature prevents access to blacklisted fields and calling of blacklisted APIs
-            // if the calling class is not trusted.
-            Method allowHiddenApiReflectionFrom;
-            try {
-                Class vmDebug = Class.forName("dalvik.system.VMDebug");
-                allowHiddenApiReflectionFrom = vmDebug.getDeclaredMethod(
-                        "allowHiddenApiReflectionFrom", Class.class);
-            } catch (ClassNotFoundException | NoSuchMethodException e) {
-                throw new IllegalStateException("Cannot find "
-                        + "VMDebug#allowHiddenApiReflectionFrom.");
-            }
-
-            // The LenientCopyTool copies the fields to a spy when creating the copy from an
-            // existing object. Some of the fields might be blacklisted. Marking the LenientCopyTool
-            // as trusted allows the tool to copy all fields, including the blacklisted ones.
-            try {
-                allowHiddenApiReflectionFrom.invoke(null, LenientCopyTool.class);
-            } catch (InvocationTargetException e) {
-                throw e.getCause();
-            }
-
-            // The MockMethodAdvice is used by methods of spies to call the real methods. As the
-            // real methods might be blacklisted, this class needs to be marked as trusted.
-            try {
-                allowHiddenApiReflectionFrom.invoke(null, MockMethodAdvice.class);
-            } catch (InvocationTargetException e) {
-                throw e.getCause();
-            }
         } catch (Throwable throwable) {
             agent = null;
             initializationError = throwable;
diff --git a/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/BlacklistedApis.java b/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/BlacklistedApis.java
deleted file mode 100644
index ffe55fb..0000000
--- a/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/BlacklistedApis.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dx.mockito.tests;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
-import static org.mockito.Mockito.doCallRealMethod;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.provider.Settings;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Simplified versions of bugs seen in the past
- */
-@RunWith(AndroidJUnit4.class)
-public class BlacklistedApis {
-    /**
-     * Check if the application is marked as {@code android:debuggable} in the manifest
-     *
-     * @return {@code true} iff it is marked as such
-     */
-    private boolean isDebuggable() throws PackageManager.NameNotFoundException {
-        Context context = InstrumentationRegistry.getTargetContext();
-        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(
-                context.getPackageName(), 0);
-
-        return (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
-    }
-
-    @Test
-    public void callBlacklistedPublicMethodRealMethod() throws Exception {
-        Context targetContext = InstrumentationRegistry.getTargetContext();
-
-        FrameLayout child = new FrameLayout(targetContext);
-        FrameLayout parent = spy(new FrameLayout(targetContext));
-
-        if (isDebuggable()) {
-            // This calls a blacklisted public method.
-            // Since Android P these methods are not callable from outside of the Android framework
-            // anymore:
-            //
-            // https://android-developers.googleblog.com/2018/02/
-            // improving-stability-by-reducing-usage.html
-            //
-            // Hence if we use a subclass mock this will fail. Inline mocking does not have this
-            // problem as the mock class is the same as the mocked class.
-            parent.addView(child);
-        } else {
-            try {
-                parent.addView(child);
-                fail();
-            } catch (NoSuchMethodError expected) {
-                // expected
-            }
-        }
-    }
-
-    @Test
-    public void copyBlacklistedFields() throws Exception {
-        assumeTrue(isDebuggable());
-
-        Context targetContext = InstrumentationRegistry.getTargetContext();
-
-        FrameLayout child = new FrameLayout(targetContext);
-        FrameLayout parent = spy(new FrameLayout(targetContext));
-
-        parent.addView(child);
-
-        // During cloning of the parent spy, all fields are copied. This accesses a blacklisted
-        // fields. Since Android P these fields are not visible from outside of the Android
-        // framework anymore:
-        //
-        // https://android-developers.googleblog.com/2018/02/
-        // improving-stability-by-reducing-usage.html
-        //
-        // As 'measure' requires the fields to be initialized, this fails if the fields are not
-        // copied.
-        parent.measure(100, 100);
-    }
-
-    @Test
-    public void cannotCallBlackListedAfterSpying() {
-        // Spying and mocking might change the View class's byte code
-        spy(new View(InstrumentationRegistry.getTargetContext(), null));
-        mock(View.class);
-
-        // View#setNotifyAutofillManagerOnClick is a blacklisted method. Resolving it should fail
-        try {
-            View.class.getDeclaredMethod("setNotifyAutofillManagerOnClick", Boolean.TYPE);
-            fail();
-        } catch (NoSuchMethodException expected) {
-            // expected
-        }
-    }
-
-    public class CallBlackListedMethod {
-        public boolean callingBlacklistedMethodCausesException() {
-            // Settings.Global#isValidZenMode is a blacklisted method. Resolving it should fail
-            try {
-                Settings.Global.class.getDeclaredMethod("isValidZenMode", Integer.TYPE);
-                return false;
-            } catch (NoSuchMethodException expected) {
-                return true;
-            }
-        }
-    }
-
-    @Test
-    public void spiesCannotBeUsedToCallHiddenMethods() {
-        CallBlackListedMethod t = spy(new CallBlackListedMethod());
-        assertTrue(t.callingBlacklistedMethodCausesException());
-    }
-
-    public abstract class CallBlacklistedMethodAbstract {
-        public boolean callingBlacklistedMethodCausesException() {
-            // Settings.Global#isValidZenMode is a blacklisted method. Resolving it should fail
-            try {
-                Settings.Global.class.getDeclaredMethod("isValidZenMode", Integer.TYPE);
-                return false;
-            } catch (NoSuchMethodException expected) {
-                return true;
-            }
-        }
-
-        public abstract void unused();
-    }
-
-    @Test
-    public void mocksOfAbstractClassesCannotBeUsedToCallHiddenMethods() {
-        CallBlacklistedMethodAbstract t = mock(CallBlacklistedMethodAbstract.class);
-        doCallRealMethod().when(t).callingBlacklistedMethodCausesException();
-        assertTrue(t.callingBlacklistedMethodCausesException());
-    }
-}
diff --git a/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java b/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
index 19f371e..b19f7bd 100644
--- a/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
+++ b/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
@@ -16,21 +16,15 @@
 
 package com.android.dx.mockito;
 
-import android.os.Build;
-import android.util.Log;
-
 import com.android.dx.stock.ProxyBuilder;
 import org.mockito.exceptions.base.MockitoException;
 import org.mockito.exceptions.stacktrace.StackTraceCleaner;
-import org.mockito.internal.util.reflection.LenientCopyTool;
 import org.mockito.invocation.MockHandler;
 import org.mockito.mock.MockCreationSettings;
 import org.mockito.plugins.MockMaker;
 import org.mockito.plugins.StackTraceCleanerProvider;
 
 import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
 import java.util.Set;
@@ -39,42 +33,8 @@
  * Generates mock instances on Android's runtime.
  */
 public final class DexmakerMockMaker implements MockMaker, StackTraceCleanerProvider {
-    private static final String LOG_TAG = DexmakerMockMaker.class.getSimpleName();
-
     private final UnsafeAllocator unsafeAllocator = UnsafeAllocator.create();
 
-    public DexmakerMockMaker() {
-        if (Build.VERSION.SDK_INT >= 28) {
-            // Blacklisted APIs were introduced in Android P:
-            //
-            // https://android-developers.googleblog.com/2018/02/
-            // improving-stability-by-reducing-usage.html
-            //
-            // This feature prevents access to blacklisted fields and calling of blacklisted APIs
-            // if the calling class is not trusted.
-            Method allowHiddenApiReflectionFromMethod;
-            try {
-                Class vmDebug = Class.forName("dalvik.system.VMDebug");
-                allowHiddenApiReflectionFromMethod = vmDebug.getDeclaredMethod(
-                        "allowHiddenApiReflectionFrom", Class.class);
-            } catch (ClassNotFoundException | NoSuchMethodException e) {
-                throw new IllegalStateException(
-                        "Cannot find VMDebug#allowHiddenApiReflectionFrom. Method is needed to "
-                                + "allow spies to copy blacklisted fields.");
-            }
-
-            // The LenientCopyTool copies the fields to a spy when creating the copy from an
-            // existing object. Some of the fields might be blacklisted. Marking the LenientCopyTool
-            // as trusted allows the tool to copy all fields, including the blacklisted ones.
-            try {
-                allowHiddenApiReflectionFromMethod.invoke(null, LenientCopyTool.class);
-            } catch (InvocationTargetException | IllegalAccessException e) {
-                Log.w(LOG_TAG, "Cannot allow LenientCopyTool to copy spies of blacklisted fields. "
-                        + "This might break spying on system classes.");
-            }
-        }
-    }
-
     @Override
     public <T> T createMock(MockCreationSettings<T> settings, MockHandler handler) {
         Class<T> typeToMock = settings.getTypeToMock();
diff --git a/dexmaker/src/main/java/com/android/dx/DexMaker.java b/dexmaker/src/main/java/com/android/dx/DexMaker.java
index 755c9fa..02baa9b 100644
--- a/dexmaker/src/main/java/com/android/dx/DexMaker.java
+++ b/dexmaker/src/main/java/com/android/dx/DexMaker.java
@@ -49,8 +49,6 @@
 import static java.lang.reflect.Modifier.PRIVATE;
 import static java.lang.reflect.Modifier.STATIC;
 
-import android.util.Log;
-
 /**
  * Generates a <strong>D</strong>alvik <strong>EX</strong>ecutable (dex)
  * file for execution on Android. Dex files define classes and interfaces,
@@ -198,12 +196,9 @@
  * }</pre>
  */
 public final class DexMaker {
-    private static final String LOG_TAG = DexMaker.class.getSimpleName();
-
     private final Map<TypeId<?>, TypeDeclaration> types = new LinkedHashMap<>();
     private ClassLoader sharedClassLoader;
     private DexFile outputDex;
-    private boolean markAsTrusted;
 
     /**
      * Creates a new {@code DexMaker} instance, which can be used to create a
@@ -364,51 +359,12 @@
         return "Generated_" + checksum +".jar";
     }
 
-    /**
-     * Set shared class loader to use.
-     *
-     * <p>If a class wants to call package private methods of another class they need to share a
-     * class loader. One common case for this requirement is a mock class wanting to mock package
-     * private methods of the original class.
-     *
-     * @param classLoader the class loader the new class should be loaded by
-     */
     public void setSharedClassLoader(ClassLoader classLoader) {
         this.sharedClassLoader = classLoader;
     }
 
-    public void markAsTrusted() {
-        this.markAsTrusted = true;
-    }
-
     private ClassLoader generateClassLoader(File result, File dexCache, ClassLoader parent) {
         try {
-            // Try to load the class so that it can call hidden APIs. This is required for spying
-            // on system classes as real-methods of these classes might call blacklisted APIs
-            if (markAsTrusted) {
-                try {
-                    if (sharedClassLoader != null) {
-                        ClassLoader loader = parent != null ? parent : sharedClassLoader;
-                        loader.getClass().getMethod("addDexPath", String.class,
-                                Boolean.TYPE).invoke(loader, result.getPath(), true);
-                        return loader;
-                    } else {
-                        return (ClassLoader) Class.forName("dalvik.system.BaseDexClassLoader")
-                                .getConstructor(String.class, File.class, String.class,
-                                        ClassLoader.class, Boolean.TYPE)
-                                .newInstance(result.getPath(), dexCache.getAbsoluteFile(), null,
-                                        parent, true);
-                    }
-                } catch (InvocationTargetException e) {
-                    if (e.getCause() instanceof SecurityException) {
-                        Log.i(LOG_TAG, "Cannot allow to call blacklisted super methods. This might "
-                                + "break spying on system classes.", e.getCause());
-                    } else {
-                        throw e;
-                    }
-                }
-            }
-
             if (sharedClassLoader != null) {
                 ClassLoader loader = parent != null ? parent : sharedClassLoader;
                 loader.getClass().getMethod("addDexPath", String.class).invoke(loader,
diff --git a/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java b/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
index 053fb16..1363894 100644
--- a/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
+++ b/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
@@ -47,8 +47,6 @@
 import static java.lang.reflect.Modifier.PUBLIC;
 import static java.lang.reflect.Modifier.STATIC;
 
-import android.os.Build;
-
 /**
  * Creates dynamic proxies of concrete classes.
  * <p>
@@ -303,18 +301,6 @@
         if (sharedClassLoader) {
             dexMaker.setSharedClassLoader(baseClass.getClassLoader());
         }
-        if (Build.VERSION.SDK_INT >= 28) {
-            // The proxied class might have blacklisted methods. Blacklisting methods (and fields)
-            // is a new feature of Android P:
-            //
-            // https://android-developers.googleblog.com/2018/02/
-            // improving-stability-by-reducing-usage.html
-            //
-            // The newly generated class might not be allowed to call methods of the proxied class
-            // if it is not trusted. As it is not clear which classes have blacklisted methods, mark
-            // all generated classes as trusted.
-            dexMaker.markAsTrusted();
-        }
         ClassLoader classLoader = dexMaker.generateAndLoad(parentClassLoader, dexCache);
         try {
             proxyClass = loadClass(classLoader, generatedName);
