diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/DexOptHelper.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageDexOptimizer.java | 5 |
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 |