summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/DexOptHelper.java12
-rw-r--r--services/core/java/com/android/server/pm/PackageDexOptimizer.java5
2 files changed, 17 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java
index 2b8a196ba528..cd074c0d4a5d 100644
--- a/services/core/java/com/android/server/pm/DexOptHelper.java
+++ b/services/core/java/com/android/server/pm/DexOptHelper.java
@@ -385,6 +385,11 @@ final class DexOptHelper {
} else if (snapshot.isInstantApp(options.getPackageName(), UserHandle.getCallingUserId())) {
return false;
}
+ var pkg = snapshot.getPackage(options.getPackageName());
+ if (pkg != null && pkg.isApex()) {
+ // skip APEX
+ return true;
+ }
if (options.isDexoptOnlySecondaryDex()) {
return mPm.getDexManager().dexoptSecondaryDex(options);
@@ -427,6 +432,10 @@ final class DexOptHelper {
// Package could not be found. Report failure.
return PackageDexOptimizer.DEX_OPT_FAILED;
}
+ if (p.isApex()) {
+ // APEX needs no dexopt
+ return PackageDexOptimizer.DEX_OPT_SKIPPED;
+ }
mPm.getPackageUsage().maybeWriteAsync(mPm.mSettings.getPackagesLocked());
mPm.mCompilerStats.maybeWriteAsync();
}
@@ -498,6 +507,9 @@ final class DexOptHelper {
if (packageState == null || pkg == null) {
throw new IllegalArgumentException("Unknown package: " + packageName);
}
+ if (pkg.isApex()) {
+ throw new IllegalArgumentException("Can't dexopt APEX package: " + packageName);
+ }
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 3fb4066c965a..178d0ea594b1 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -189,6 +189,11 @@ public class PackageDexOptimizer {
return false;
}
+ // We do not dexopt APEX packages.
+ if (pkg.isApex()) {
+ return false;
+ }
+
// We do not dexopt unused packages.
// It's possible for this to be called before app hibernation service is ready due to
// an OTA dexopt. In this case, we ignore the hibernation check here. This is fine since