Loading core/java/android/content/pm/ApplicationInfo.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -916,6 +916,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; } } /** @hide */ public boolean isInternal() { return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0; } /** /** * @hide * @hide */ */ Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -199,7 +199,8 @@ final class PackageDexOptimizer { @Nullable @Nullable private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet) private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet) throws IOException { throws IOException { if (pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) { if ((pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) || pkg.isForwardLocked() || (!pkg.applicationInfo.isInternal())) { return null; return null; } } File codePath = new File(pkg.codePath); File codePath = new File(pkg.codePath); Loading services/core/java/com/android/server/pm/PackageManagerService.java +16 −12 Original line number Original line Diff line number Diff line Loading @@ -10254,7 +10254,7 @@ public class PackageManagerService extends IPackageManager.Stub { boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); boolean onSd = ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0); boolean onSd = ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0); boolean replace = false; 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 // Result object to be returned res.returnCode = PackageManager.INSTALL_SUCCEEDED; res.returnCode = PackageManager.INSTALL_SUCCEEDED; Loading Loading @@ -10421,7 +10421,11 @@ public class PackageManagerService extends IPackageManager.Stub { return; return; } } // Run dexopt before old package gets removed, to minimize time when app is not available // If app directory is not writable, dexopt will be called after the rename if (!forwardLocked && pkg.applicationInfo.isInternal()) { // 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 int result = mPackageDexOptimizer .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, false /* defer */, false /* inclDependencies */); false /* defer */, false /* inclDependencies */); Loading @@ -10429,19 +10433,19 @@ public class PackageManagerService extends IPackageManager.Stub { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); return; return; } } } if (!args.doRename(res.returnCode, pkg, oldCodePath)) { if (!args.doRename(res.returnCode, pkg, oldCodePath)) { res.setError(INSTALL_FAILED_INSUFFICIENT_STORAGE, "Failed rename"); res.setError(INSTALL_FAILED_INSUFFICIENT_STORAGE, "Failed rename"); return; return; } } // Call with SCAN_NO_DEX, since dexopt has already been made if (replace) { if (replace) { replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING | SCAN_NO_DEX, args.user, replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING, args.user, installerPackageName, res); installerPackageName, res); } else { } else { installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES, | SCAN_NO_DEX, args.user, installerPackageName, res); args.user, installerPackageName, res); } } synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(pkgName); final PackageSetting ps = mSettings.mPackages.get(pkgName); Loading Loading
core/java/android/content/pm/ApplicationInfo.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -916,6 +916,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; } } /** @hide */ public boolean isInternal() { return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0; } /** /** * @hide * @hide */ */ Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -199,7 +199,8 @@ final class PackageDexOptimizer { @Nullable @Nullable private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet) private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet) throws IOException { throws IOException { if (pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) { if ((pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) || pkg.isForwardLocked() || (!pkg.applicationInfo.isInternal())) { return null; return null; } } File codePath = new File(pkg.codePath); File codePath = new File(pkg.codePath); Loading
services/core/java/com/android/server/pm/PackageManagerService.java +16 −12 Original line number Original line Diff line number Diff line Loading @@ -10254,7 +10254,7 @@ public class PackageManagerService extends IPackageManager.Stub { boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0); boolean onSd = ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0); boolean onSd = ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0); boolean replace = false; 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 // Result object to be returned res.returnCode = PackageManager.INSTALL_SUCCEEDED; res.returnCode = PackageManager.INSTALL_SUCCEEDED; Loading Loading @@ -10421,7 +10421,11 @@ public class PackageManagerService extends IPackageManager.Stub { return; return; } } // Run dexopt before old package gets removed, to minimize time when app is not available // If app directory is not writable, dexopt will be called after the rename if (!forwardLocked && pkg.applicationInfo.isInternal()) { // 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 int result = mPackageDexOptimizer .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */, false /* defer */, false /* inclDependencies */); false /* defer */, false /* inclDependencies */); Loading @@ -10429,19 +10433,19 @@ public class PackageManagerService extends IPackageManager.Stub { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); return; return; } } } if (!args.doRename(res.returnCode, pkg, oldCodePath)) { if (!args.doRename(res.returnCode, pkg, oldCodePath)) { res.setError(INSTALL_FAILED_INSUFFICIENT_STORAGE, "Failed rename"); res.setError(INSTALL_FAILED_INSUFFICIENT_STORAGE, "Failed rename"); return; return; } } // Call with SCAN_NO_DEX, since dexopt has already been made if (replace) { if (replace) { replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING | SCAN_NO_DEX, args.user, replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING, args.user, installerPackageName, res); installerPackageName, res); } else { } else { installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES, | SCAN_NO_DEX, args.user, installerPackageName, res); args.user, installerPackageName, res); } } synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(pkgName); final PackageSetting ps = mSettings.mPackages.get(pkgName); Loading