diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-04-23 16:55:31 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-23 16:55:32 +0000 |
commit | 7fadb2f5428e0b8a1a327cd300c0ade8a6fdc348 (patch) | |
tree | 97726342651f4e16e1df527e3c883a64ecd64d5b /services | |
parent | 4d7c8e04a29a0c473e5bf08e7a3ae8c8e45c7aaf (diff) | |
parent | 94056d1cb8183bde3e942336735b289b9654deb1 (diff) | |
download | frameworks_base-7fadb2f5428e0b8a1a327cd300c0ade8a6fdc348.zip frameworks_base-7fadb2f5428e0b8a1a327cd300c0ade8a6fdc348.tar.gz frameworks_base-7fadb2f5428e0b8a1a327cd300c0ade8a6fdc348.tar.bz2 |
Merge "Do not create oat directory for an app in ASEC container"
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/pm/PackageDexOptimizer.java | 3 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 28 |
2 files changed, 18 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 4c36fa6..a42e4e7 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -199,7 +199,8 @@ final class PackageDexOptimizer { @Nullable private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet) throws IOException { - if (pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) { + if ((pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) || pkg.isForwardLocked() + || pkg.applicationInfo.isExternalAsec()) { return null; } File codePath = new File(pkg.codePath); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 24cc909..1c339f5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -11067,7 +11067,7 @@ public class PackageManagerService extends IPackageManager.Stub { final boolean onExternal = (((installFlags & PackageManager.INSTALL_EXTERNAL) != 0) || (args.volumeUuid != null)); boolean replace = false; - final int scanFlags = SCAN_NEW_INSTALL | SCAN_FORCE_DEX | SCAN_UPDATE_SIGNATURE; + int scanFlags = SCAN_NEW_INSTALL | SCAN_FORCE_DEX | SCAN_UPDATE_SIGNATURE; // Result object to be returned res.returnCode = PackageManager.INSTALL_SUCCEEDED; @@ -11234,13 +11234,18 @@ public class PackageManagerService extends IPackageManager.Stub { return; } - // Run dexopt before old package gets removed, to minimize time when app is not available - int result = mPackageDexOptimizer - .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, - false /* defer */, false /* inclDependencies */); - if (result == PackageDexOptimizer.DEX_OPT_FAILED) { - res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); - return; + // If app directory is not writable, dexopt will be called after the rename + if (!forwardLocked && !pkg.applicationInfo.isExternalAsec()) { + // Enable SCAN_NO_DEX flag to skip dexopt at a later stage + scanFlags |= SCAN_NO_DEX; + // Run dexopt before old package gets removed, to minimize time when app is unavailable + int result = mPackageDexOptimizer + .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, + false /* defer */, false /* inclDependencies */); + if (result == PackageDexOptimizer.DEX_OPT_FAILED) { + res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); + return; + } } if (!args.doRename(res.returnCode, pkg, oldCodePath)) { @@ -11250,13 +11255,12 @@ public class PackageManagerService extends IPackageManager.Stub { startIntentFilterVerifications(args.user.getIdentifier(), pkg); - // Call with SCAN_NO_DEX, since dexopt has already been made if (replace) { - replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING | SCAN_NO_DEX, args.user, + replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING, args.user, installerPackageName, volumeUuid, res); } else { - installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES - | SCAN_NO_DEX, args.user, installerPackageName, volumeUuid, res); + installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES, + args.user, installerPackageName, volumeUuid, res); } synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(pkgName); |