aboutsummaryrefslogtreecommitdiff
path: root/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java')
-rw-r--r--dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java14
1 files changed, 14 insertions, 0 deletions
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 1363894..053fb16 100644
--- a/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
+++ b/dexmaker/src/main/java/com/android/dx/stock/ProxyBuilder.java
@@ -47,6 +47,8 @@ import static java.lang.reflect.Modifier.PRIVATE;
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>
@@ -301,6 +303,18 @@ public final class ProxyBuilder<T> {
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);