Merge "APEX and system apps can't be installed in a streaming fashion."
This commit is contained in:
committed by
Android (Google) Code Review
commit
6521c74493
@@ -558,10 +558,22 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
mStagedSessionErrorMessage =
|
||||
stagedSessionErrorMessage != null ? stagedSessionErrorMessage : "";
|
||||
|
||||
if (isStreamingInstallation()
|
||||
&& this.params.dataLoaderParams.getComponentName().getPackageName()
|
||||
== SYSTEM_DATA_LOADER_PACKAGE) {
|
||||
assertShellOrSystemCalling("System data loaders");
|
||||
if (isDataLoaderInstallation()) {
|
||||
if (isApexInstallation()) {
|
||||
throw new IllegalArgumentException(
|
||||
"DataLoader installation of APEX modules is not allowed.");
|
||||
}
|
||||
}
|
||||
|
||||
if (isStreamingInstallation()) {
|
||||
if (!isIncrementalInstallationAllowed(mPackageName)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Incremental installation of this package is not allowed.");
|
||||
}
|
||||
if (this.params.dataLoaderParams.getComponentName().getPackageName()
|
||||
== SYSTEM_DATA_LOADER_PACKAGE) {
|
||||
assertShellOrSystemCalling("System data loaders");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1173,6 +1185,19 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
== PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the package can be installed on IncFs.
|
||||
*/
|
||||
private static boolean isIncrementalInstallationAllowed(String packageName) {
|
||||
final PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
|
||||
final AndroidPackage existingPackage = pmi.getPackage(packageName);
|
||||
if (existingPackage == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return !PackageManagerService.isSystemApp(existingPackage);
|
||||
}
|
||||
|
||||
/**
|
||||
* If this was not already called, the session will be sealed.
|
||||
*
|
||||
@@ -1362,14 +1387,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
return false;
|
||||
}
|
||||
|
||||
final PackageInfo pkgInfo = mPm.getPackageInfo(
|
||||
params.appPackageName, PackageManager.GET_SIGNATURES
|
||||
| PackageManager.MATCH_STATIC_SHARED_LIBRARIES /*flags*/, userId);
|
||||
|
||||
if (isApexInstallation()) {
|
||||
validateApexInstallLocked();
|
||||
} else {
|
||||
validateApkInstallLocked(pkgInfo);
|
||||
validateApkInstallLocked();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1786,8 +1807,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
* {@link PackageManagerService}.
|
||||
*/
|
||||
@GuardedBy("mLock")
|
||||
private void validateApkInstallLocked(@Nullable PackageInfo pkgInfo)
|
||||
throws PackageManagerException {
|
||||
private void validateApkInstallLocked() throws PackageManagerException {
|
||||
ApkLite baseApk = null;
|
||||
mPackageName = null;
|
||||
mVersionCode = -1;
|
||||
@@ -1797,6 +1817,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
mResolvedStagedFiles.clear();
|
||||
mResolvedInheritedFiles.clear();
|
||||
|
||||
final PackageInfo pkgInfo = mPm.getPackageInfo(
|
||||
params.appPackageName, PackageManager.GET_SIGNATURES
|
||||
| PackageManager.MATCH_STATIC_SHARED_LIBRARIES /*flags*/, userId);
|
||||
|
||||
// Partial installs must be consistent with existing install
|
||||
if (params.mode == SessionParams.MODE_INHERIT_EXISTING
|
||||
&& (pkgInfo == null || pkgInfo.applicationInfo == null)) {
|
||||
|
||||
Reference in New Issue
Block a user