From caad01b23b16b3c2f88c123bac4a981306d7f22f Mon Sep 17 00:00:00 2001 From: Song Pan Date: Fri, 24 Apr 2020 12:36:31 +0100 Subject: [PATCH] Skip apk verification when collecting certificates. Bug: 154486093 Test: verified locally that this reduces 99% of the time taken to parse APK. Change-Id: I6e1e5bc76c3e6b8e169c47847512b30aa1fe264e --- .../server/integrity/AppIntegrityManagerServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java index 393e8db96c015..2cae1d64ca343 100644 --- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java +++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java @@ -360,7 +360,7 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub { * Verify the UID and return the installer package name. * * @return the package name of the installer, or null if it cannot be determined or it is - * installed via adb. + * installed via adb. */ @Nullable private String getInstallerPackageName(Intent intent) { @@ -568,7 +568,10 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub { try (PackageParser2 parser = mParserSupplier.get()) { ParsedPackage pkg = parser.parsePackage(installationPath, 0, false); int flags = PackageManager.GET_SIGNING_CERTIFICATES | PackageManager.GET_META_DATA; - pkg.setSigningDetails(ParsingPackageUtils.collectCertificates(pkg, false)); + // APK signatures is already verified elsewhere in PackageManager. We do not need to + // verify it again since it could cause a timeout for large APKs. + pkg.setSigningDetails( + ParsingPackageUtils.collectCertificates(pkg, /* skipVerify= */ true)); return PackageInfoUtils.generate( pkg, null, @@ -709,7 +712,7 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub { // Filter out the rule provider packages that are not system apps. List systemAppRuleProviders = new ArrayList<>(); - for (String ruleProvider: integrityRuleProviders) { + for (String ruleProvider : integrityRuleProviders) { if (isSystemApp(ruleProvider)) { systemAppRuleProviders.add(ruleProvider); }