Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +25 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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(); Loading services/core/java/com/android/server/pm/SharedLibrariesImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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()); Loading services/tests/mockingservicestests/src/com/android/server/pm/SharedLibrariesImplTest.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +25 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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(); Loading
services/core/java/com/android/server/pm/SharedLibrariesImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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()); Loading
services/tests/mockingservicestests/src/com/android/server/pm/SharedLibrariesImplTest.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading