Allow only selected priv apps to run OOB
- Add pm.dexopt.priv-apps-oob-list to allow selecting specific packages
to run OOB, in a comma-separated string of package names. When set to
"ALL" (default), all priv apps will run in OOB.
- Add a global config priv_app_oob_list to persist the state for
experiment.
- Also make background dexopt to respect the config.
Test: 0. Reset previous OOB settings.
1. settings put global priv_app_oob_list \
com.google.android.gms,com.android.vending
2. cmd package compile -m speed -f com.google.android.gms (then
com.android.vending, com.google.android.googlequicksearchbox)
3. dumpsys package dexopt
# .vending and .gms are "verify", .googlequicksearchbox is
# "speed".
Test: settings put global priv_app_oob_list 'ALL' # see the same result
Test: settings delete global priv_app_oob_list # see the same result
Test: atest SettingsBackupTest
Bug: 30972906
Bug: 63920015
Change-Id: Iba47b4763a026cdc94939db0a743822278917269
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index ebab1a7..b0be4a9 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -34,6 +34,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.pm.Installer.InstallerException;
+import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DexoptOptions;
import com.android.server.pm.dex.DexoptUtils;
import com.android.server.pm.dex.PackageDexUsage;
@@ -495,10 +496,9 @@
boolean isUsedByOtherApps) {
int flags = info.flags;
boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
- // When pm.dexopt.priv-apps-oob is true, we only verify privileged apps.
- if (info.isPrivilegedApp() &&
- SystemProperties.getBoolean("pm.dexopt.priv-apps-oob", false)) {
- return "verify";
+ // When a priv app is configured to run out of box, only verify it.
+ if (info.isPrivilegedApp() && DexManager.isPackageSelectedToRunOob(info.packageName)) {
+ return "verify";
}
if (vmSafeMode) {
return getSafeModeCompilerFilter(targetCompilerFilter);