From c7e02c1d2a53e0f738d2a8383e03658b39d91ce6 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 1 Aug 2016 22:08:26 -0700 Subject: [PATCH] OtaDexopt: Special-case system app classpaths Specialize system apps' shared libraries so that classpath checks are elided. Bug: 30568568 Change-Id: Id1f2555ef43984b616e01f8596701ccba77895b3 --- .../java/com/android/server/pm/OtaDexoptService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index c5f3cfd3bc7ea..836b588c76215 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -50,6 +50,9 @@ public class OtaDexoptService extends IOtaDexopt.Stub { private final static String TAG = "OTADexopt"; private final static boolean DEBUG_DEXOPT = true; + // The synthetic library dependencies denoting "no checks." + private final static String[] NO_LIBRARIES = new String[] { "&" }; + private final Context mContext; private final PackageManagerService mPackageManagerService; @@ -202,7 +205,13 @@ public class OtaDexoptService extends IOtaDexopt.Stub { PackageDexOptimizer optimizer = new OTADexoptPackageDexOptimizer( collectingInstaller, mPackageManagerService.mInstallLock, mContext); - optimizer.performDexOpt(pkg, pkg.usesLibraryFiles, + String[] libraryDependencies = pkg.usesLibraryFiles; + if (pkg.isSystemApp()) { + // For system apps, we want to avoid classpaths checks. + libraryDependencies = NO_LIBRARIES; + } + + optimizer.performDexOpt(pkg, libraryDependencies, null /* ISAs */, false /* checkProfiles */, getCompilerFilterForReason(compilationReason), null /* CompilerStats.PackageStats */);