diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index d6117688a5f57..3ee8b472869b6 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -51,6 +51,11 @@ public final class Zygote { /** Make the code Java debuggable by turning off some optimizations. */ public static final int DEBUG_JAVA_DEBUGGABLE = 1 << 8; + /** Turn off the verifier. */ + public static final int DISABLE_VERIFIER = 1 << 9; + /** Only use oat files located in /system. Otherwise use dex/jar/apk . */ + public static final int ONLY_USE_SYSTEM_OAT_FILES = 1 << 10; + /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = 0; /** Default external storage should be mounted. */ diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 226053d1495a4..d9944a7546b7f 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3856,6 +3856,12 @@ public class ActivityManagerService extends IActivityManager.Stub mNativeDebuggingApp = null; } + if (app.info.isPrivilegedApp() && + !SystemProperties.getBoolean("pm.dexopt.priv-apps", true)) { + runtimeFlags |= Zygote.DISABLE_VERIFIER; + runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES; + } + String invokeWith = null; if ((app.info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { // Debuggable apps may include a wrapper script with their library directory.