Merge "Always populate the ApplicationInfo object" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bb6653c404
@@ -8938,9 +8938,12 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean updatedPkgBetter = false;
|
final boolean isUpdatedPkg = updatedPkg != null;
|
||||||
|
final boolean isUpdatedSystemPkg = isUpdatedPkg
|
||||||
|
&& (policyFlags & PackageParser.PARSE_IS_SYSTEM) != 0;
|
||||||
|
boolean isUpdatedPkgBetter = false;
|
||||||
// First check if this is a system package that may involve an update
|
// First check if this is a system package that may involve an update
|
||||||
if (updatedPkg != null && (policyFlags & PackageParser.PARSE_IS_SYSTEM) != 0) {
|
if (isUpdatedSystemPkg) {
|
||||||
// If new package is not located in "/system/priv-app" (e.g. due to an OTA),
|
// If new package is not located in "/system/priv-app" (e.g. due to an OTA),
|
||||||
// it needs to drop FLAG_PRIVILEGED.
|
// it needs to drop FLAG_PRIVILEGED.
|
||||||
if (locationIsPrivileged(scanFile)) {
|
if (locationIsPrivileged(scanFile)) {
|
||||||
@@ -8984,10 +8987,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
updatedChildPkg.versionCode = pkg.mVersionCode;
|
updatedChildPkg.versionCode = pkg.mVersionCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new PackageManagerException(Log.WARN, "Package " + ps.name + " at "
|
|
||||||
+ scanFile + " ignored: updated version " + ps.versionCode
|
|
||||||
+ " better than this " + pkg.mVersionCode);
|
|
||||||
} else {
|
} else {
|
||||||
// The current app on the system partition is better than
|
// The current app on the system partition is better than
|
||||||
// what we have updated to on the data partition; switch
|
// what we have updated to on the data partition; switch
|
||||||
@@ -9014,12 +9013,44 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
synchronized (mPackages) {
|
synchronized (mPackages) {
|
||||||
mSettings.enableSystemPackageLPw(ps.name);
|
mSettings.enableSystemPackageLPw(ps.name);
|
||||||
}
|
}
|
||||||
updatedPkgBetter = true;
|
isUpdatedPkgBetter = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updatedPkg != null) {
|
String resourcePath = null;
|
||||||
|
String baseResourcePath = null;
|
||||||
|
if ((policyFlags & PackageParser.PARSE_FORWARD_LOCK) != 0 && !isUpdatedPkgBetter) {
|
||||||
|
if (ps != null && ps.resourcePathString != null) {
|
||||||
|
resourcePath = ps.resourcePathString;
|
||||||
|
baseResourcePath = ps.resourcePathString;
|
||||||
|
} else {
|
||||||
|
// Should not happen at all. Just log an error.
|
||||||
|
Slog.e(TAG, "Resource path not set for package " + pkg.packageName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resourcePath = pkg.codePath;
|
||||||
|
baseResourcePath = pkg.baseCodePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set application objects path explicitly.
|
||||||
|
pkg.setApplicationVolumeUuid(pkg.volumeUuid);
|
||||||
|
pkg.setApplicationInfoCodePath(pkg.codePath);
|
||||||
|
pkg.setApplicationInfoBaseCodePath(pkg.baseCodePath);
|
||||||
|
pkg.setApplicationInfoSplitCodePaths(pkg.splitCodePaths);
|
||||||
|
pkg.setApplicationInfoResourcePath(resourcePath);
|
||||||
|
pkg.setApplicationInfoBaseResourcePath(baseResourcePath);
|
||||||
|
pkg.setApplicationInfoSplitResourcePaths(pkg.splitCodePaths);
|
||||||
|
|
||||||
|
// throw an exception if we have an update to a system application, but, it's not more
|
||||||
|
// recent than the package we've already scanned
|
||||||
|
if (isUpdatedSystemPkg && !isUpdatedPkgBetter) {
|
||||||
|
throw new PackageManagerException(Log.WARN, "Package " + ps.name + " at "
|
||||||
|
+ scanFile + " ignored: updated version " + ps.versionCode
|
||||||
|
+ " better than this " + pkg.mVersionCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUpdatedPkg) {
|
||||||
// An updated system app will not have the PARSE_IS_SYSTEM flag set
|
// An updated system app will not have the PARSE_IS_SYSTEM flag set
|
||||||
// initially
|
// initially
|
||||||
policyFlags |= PackageParser.PARSE_IS_SYSTEM;
|
policyFlags |= PackageParser.PARSE_IS_SYSTEM;
|
||||||
@@ -9039,7 +9070,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
* same name installed earlier.
|
* same name installed earlier.
|
||||||
*/
|
*/
|
||||||
boolean shouldHideSystemApp = false;
|
boolean shouldHideSystemApp = false;
|
||||||
if (updatedPkg == null && ps != null
|
if (!isUpdatedPkg && ps != null
|
||||||
&& (policyFlags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0 && !isSystemApp(ps)) {
|
&& (policyFlags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0 && !isSystemApp(ps)) {
|
||||||
/*
|
/*
|
||||||
* Check to make sure the signatures match first. If they don't,
|
* Check to make sure the signatures match first. If they don't,
|
||||||
@@ -9094,31 +9125,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: extend to support forward-locked splits
|
|
||||||
String resourcePath = null;
|
|
||||||
String baseResourcePath = null;
|
|
||||||
if ((policyFlags & PackageParser.PARSE_FORWARD_LOCK) != 0 && !updatedPkgBetter) {
|
|
||||||
if (ps != null && ps.resourcePathString != null) {
|
|
||||||
resourcePath = ps.resourcePathString;
|
|
||||||
baseResourcePath = ps.resourcePathString;
|
|
||||||
} else {
|
|
||||||
// Should not happen at all. Just log an error.
|
|
||||||
Slog.e(TAG, "Resource path not set for package " + pkg.packageName);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
resourcePath = pkg.codePath;
|
|
||||||
baseResourcePath = pkg.baseCodePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set application objects path explicitly.
|
|
||||||
pkg.setApplicationVolumeUuid(pkg.volumeUuid);
|
|
||||||
pkg.setApplicationInfoCodePath(pkg.codePath);
|
|
||||||
pkg.setApplicationInfoBaseCodePath(pkg.baseCodePath);
|
|
||||||
pkg.setApplicationInfoSplitCodePaths(pkg.splitCodePaths);
|
|
||||||
pkg.setApplicationInfoResourcePath(resourcePath);
|
|
||||||
pkg.setApplicationInfoBaseResourcePath(baseResourcePath);
|
|
||||||
pkg.setApplicationInfoSplitResourcePaths(pkg.splitCodePaths);
|
|
||||||
|
|
||||||
final int userId = ((user == null) ? 0 : user.getIdentifier());
|
final int userId = ((user == null) ? 0 : user.getIdentifier());
|
||||||
if (ps != null && ps.getInstantApp(userId)) {
|
if (ps != null && ps.getInstantApp(userId)) {
|
||||||
scanFlags |= SCAN_AS_INSTANT_APP;
|
scanFlags |= SCAN_AS_INSTANT_APP;
|
||||||
|
|||||||
Reference in New Issue
Block a user