am 52af2ca9: DO NOT MERGE - Remove data dirs if a new install fails dexopt.

* commit '52af2ca919c068f1c9389fa4c979d2fe3105af40':
  DO NOT MERGE - Remove data dirs if a new install fails dexopt.
This commit is contained in:
Narayan Kamath
2014-03-11 23:18:18 +00:00
committed by Android Git Automerger

View File

@@ -217,6 +217,7 @@ public class PackageManagerService extends IPackageManager.Stub {
static final int SCAN_UPDATE_TIME = 1<<6;
static final int SCAN_DEFER_DEX = 1<<7;
static final int SCAN_BOOTING = 1<<8;
static final int SCAN_DELETE_DATA_ON_FAILURES = 1<<9;
static final int REMOVE_CHATTY = 1<<16;
@@ -332,7 +333,6 @@ public class PackageManagerService extends IPackageManager.Stub {
new HashMap<String, PackageParser.Package>();
// Information for the parser to write more useful error messages.
File mScanningPath;
int mLastScanError;
// ----------------------------------------------------------------
@@ -4144,7 +4144,6 @@ public class PackageManagerService extends IPackageManager.Stub {
mLastScanError = PackageManager.INSTALL_FAILED_INVALID_APK;
return null;
}
mScanningPath = scanFile;
if ((parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0) {
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
@@ -4164,7 +4163,7 @@ public class PackageManagerService extends IPackageManager.Stub {
if (mAndroidApplication != null) {
Slog.w(TAG, "*************************************************");
Slog.w(TAG, "Core android package being redefined. Skipping.");
Slog.w(TAG, " file=" + mScanningPath);
Slog.w(TAG, " file=" + scanFile);
Slog.w(TAG, "*************************************************");
mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
return null;
@@ -4644,6 +4643,10 @@ public class PackageManagerService extends IPackageManager.Stub {
if ((scanMode&SCAN_NO_DEX) == 0) {
if (performDexOptLI(pkg, forceDex, (scanMode&SCAN_DEFER_DEX) != 0, false)
== DEX_OPT_FAILED) {
if ((scanMode & SCAN_DELETE_DATA_ON_FAILURES) != 0) {
removeDataDirsLI(pkg.packageName);
}
mLastScanError = PackageManager.INSTALL_FAILED_DEXOPT;
return null;
}
@@ -4721,6 +4724,10 @@ public class PackageManagerService extends IPackageManager.Stub {
PackageParser.Package clientPkg = clientLibPkgs.get(i);
if (performDexOptLI(clientPkg, forceDex, (scanMode&SCAN_DEFER_DEX) != 0, false)
== DEX_OPT_FAILED) {
if ((scanMode & SCAN_DELETE_DATA_ON_FAILURES) != 0) {
removeDataDirsLI(pkg.packageName);
}
mLastScanError = PackageManager.INSTALL_FAILED_DEXOPT;
return null;
}
@@ -9075,7 +9082,7 @@ public class PackageManagerService extends IPackageManager.Stub {
replacePackageLI(pkg, parseFlags, scanMode, args.user,
installerPackageName, res);
} else {
installNewPackageLI(pkg, parseFlags, scanMode, args.user,
installNewPackageLI(pkg, parseFlags, scanMode | SCAN_DELETE_DATA_ON_FAILURES, args.user,
installerPackageName, res);
}
synchronized (mPackages) {