Merge "Installation fail for mismatched certificates."
This commit is contained in:
committed by
Android (Google) Code Review
commit
8ddb283a68
@@ -1207,17 +1207,33 @@ final class InstallPackageHelper {
|
||||
}
|
||||
|
||||
PackageSetting ps = mPm.mSettings.getPackageLPr(pkgName);
|
||||
if (ps != null) {
|
||||
if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
|
||||
PackageSetting signatureCheckPs = ps;
|
||||
|
||||
// SDK libs can have other major versions with different package names.
|
||||
if (signatureCheckPs == null && parsedPackage.isSdkLibrary()) {
|
||||
WatchedLongSparseArray<SharedLibraryInfo> libraryInfos =
|
||||
mSharedLibraries.getSharedLibraryInfos(
|
||||
parsedPackage.getSdkLibName());
|
||||
if (libraryInfos != null && libraryInfos.size() > 0) {
|
||||
// Any existing version would do.
|
||||
SharedLibraryInfo libraryInfo = libraryInfos.valueAt(0);
|
||||
signatureCheckPs = mPm.mSettings.getPackageLPr(libraryInfo.getPackageName());
|
||||
}
|
||||
}
|
||||
|
||||
if (signatureCheckPs != null) {
|
||||
if (DEBUG_INSTALL) {
|
||||
Slog.d(TAG,
|
||||
"Existing package for signature checking: " + signatureCheckPs);
|
||||
}
|
||||
|
||||
// Static shared libs have same package with different versions where
|
||||
// we internally use a synthetic package name to allow multiple versions
|
||||
// of the same package, therefore we need to compare signatures against
|
||||
// the package setting for the latest library version.
|
||||
PackageSetting signatureCheckPs = ps;
|
||||
if (parsedPackage.isStaticSharedLibrary()) {
|
||||
SharedLibraryInfo libraryInfo = mSharedLibraries.getLatestSharedLibraVersionLPr(
|
||||
parsedPackage);
|
||||
SharedLibraryInfo libraryInfo =
|
||||
mSharedLibraries.getLatestStaticSharedLibraVersionLPr(parsedPackage);
|
||||
if (libraryInfo != null) {
|
||||
signatureCheckPs = mPm.mSettings.getPackageLPr(
|
||||
libraryInfo.getPackageName());
|
||||
@@ -1256,6 +1272,10 @@ final class InstallPackageHelper {
|
||||
throw new PrepareFailure(e.error, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ps != null) {
|
||||
if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
|
||||
|
||||
if (ps.getPkg() != null) {
|
||||
systemApp = ps.getPkg().isSystem();
|
||||
|
||||
@@ -384,7 +384,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
|
||||
* @return The latest version of shared library info.
|
||||
*/
|
||||
@GuardedBy("mPm.mLock")
|
||||
@Nullable SharedLibraryInfo getLatestSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
|
||||
@Nullable SharedLibraryInfo getLatestStaticSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
|
||||
WatchedLongSparseArray<SharedLibraryInfo> versionedLib = mSharedLibraries.get(
|
||||
pkg.getStaticSharedLibName());
|
||||
if (versionedLib == null) {
|
||||
@@ -416,7 +416,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
|
||||
PackageSetting sharedLibPackage = null;
|
||||
synchronized (mPm.mLock) {
|
||||
final SharedLibraryInfo latestSharedLibraVersionLPr =
|
||||
getLatestSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
|
||||
getLatestStaticSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
|
||||
if (latestSharedLibraVersionLPr != null) {
|
||||
sharedLibPackage = mPm.mSettings.getPackageLPr(
|
||||
latestSharedLibraVersionLPr.getPackageName());
|
||||
|
||||
@@ -196,7 +196,8 @@ class SharedLibrariesImplTest {
|
||||
val newLibSetting = addPackage(STATIC_LIB_PACKAGE_NAME + "_" + 10, 10L,
|
||||
staticLibrary = STATIC_LIB_NAME, staticLibraryVersion = 10L)
|
||||
|
||||
val latestInfo = mSharedLibrariesImpl.getLatestSharedLibraVersionLPr(newLibSetting.pkg)!!
|
||||
val latestInfo =
|
||||
mSharedLibrariesImpl.getLatestStaticSharedLibraVersionLPr(newLibSetting.pkg)!!
|
||||
|
||||
assertThat(latestInfo).isNotNull()
|
||||
assertThat(latestInfo.name).isEqualTo(STATIC_LIB_NAME)
|
||||
|
||||
Reference in New Issue
Block a user