From efbb31963003ab91aeef618a291a9f9d07d0767b Mon Sep 17 00:00:00 2001 From: Winson <chiuwinson@google.com> Date: Thu, 6 Jan 2022 17:01:37 -0800 Subject: [PATCH] Move package parsing to services.jar This facilitates exposing the Parsed_ classes as @SystemApi(client = SYSTEM_SERVER) while keeping everything inside services.jar rather than having it split across both jars. This reverts getPackageArchiveInfo to use legacy PackageParser, since framework.jar can no longer access the moved classes. Bug: 214038417 Test: presubmit, no logic changes Change-Id: I152d70fb4f643d32efb012cfb20b0fbc5f88f2d8 --- .../perftests/packagemanager/Android.bp | 6 +- .../src/android/os/PackageParsingPerfTest.kt | 27 +- .../app/ApplicationPackageManager.java | 38 +- .../android/content/pm/PackageManager.java | 30 +- .../android/content/pm/PackageParser.java | 219 ++++++- .../content/pm/parsing/ApkLiteParseUtils.java | 82 +-- .../parsing/FrameworkParsingPackageUtils.java | 397 +++++++++++++ .../pm/parsing/result/ParseTypeImpl.java | 11 +- .../pm/pkg/FrameworkPackageUserState.java | 5 +- .../pkg/FrameworkPackageUserStateDefault.java | 8 +- core/java/android/content/pm/split/OWNERS | 5 - .../util/apk/ApkSignatureVerifier.java | 8 +- .../internal/content/om/OverlayConfig.java | 20 +- .../internal/content/om/OverlayScanner.java | 10 +- core/tests/coretests/Android.bp | 26 +- core/tests/coretests/AndroidManifest.xml | 7 - .../apks/install_loc_sdcard/Android.bp | 15 - .../apks/install_loc_unspecified/Android.bp | 15 - .../apks/install_use_perm_good/Android.bp | 15 - .../apks/install_uses_feature/Android.bp | 15 - core/tests/coretests/apks/keyset/Android.bp | 129 ---- core/tests/coretests/certs/Android.bp | 10 - .../res/OverlayConfigIterationRule.java | 12 +- .../content/pm/PackageManagerInternal.java | 2 +- .../server/am/ActivityManagerService.java | 4 +- .../android/server/appop/AppOpsService.java | 2 +- .../AppIntegrityManagerServiceImpl.java | 2 +- .../server/om/OverlayManagerServiceImpl.java | 4 +- .../com/android/server/pm/ApexManager.java | 6 +- .../com/android/server/pm/AppDataHelper.java | 2 +- .../com/android/server/pm/AppsFilter.java | 10 +- .../android/server/pm/ComponentResolver.java | 16 +- .../com/android/server/pm/ComputerEngine.java | 16 +- .../server/pm/InitAndSystemPackageHelper.java | 2 +- .../server/pm/InstallPackageHelper.java | 10 +- .../server/pm/KeySetManagerService.java | 9 +- .../server/pm/PackageInstallerSession.java | 2 +- .../server/pm/PackageManagerService.java | 7 +- .../server/pm/PackageManagerServiceUtils.java | 2 +- .../android/server/pm/PackageProperty.java | 2 +- .../server/pm/PackageSessionVerifier.java | 2 +- .../server/pm/ReconcilePackageUtils.java | 2 +- .../server/pm/RemovePackageHelper.java | 2 +- .../android/server/pm/ScanPackageUtils.java | 14 +- .../com/android/server/pm/ScanRequest.java | 2 +- .../java/com/android/server/pm/Settings.java | 14 +- .../android/server/pm/SharedUserSetting.java | 6 +- .../android/server/pm/StorageEventHelper.java | 2 +- .../server/pm/dex/ArtManagerService.java | 2 +- .../android/server/pm/dex/ViewCompiler.java | 2 +- .../server/pm/parsing/PackageInfoUtils.java | 26 +- .../server/pm/parsing/PackageParser2.java | 6 +- .../pm/parsing/ParsedComponentStateUtils.java | 3 +- .../library/PackageBackwardCompatibility.java | 2 +- .../server/pm/parsing/pkg/AndroidPackage.java | 8 +- .../pm/parsing/pkg/AndroidPackageUtils.java | 12 +- .../server/pm/parsing/pkg/PackageImpl.java | 14 +- .../server/pm/parsing/pkg/PkgAppInfo.java | 2 +- .../server/pm/parsing/pkg/PkgPackageInfo.java | 2 +- .../CompatibilityPermissionInfo.java | 5 +- .../server/pm/permission/Permission.java | 2 +- .../PermissionManagerServiceImpl.java | 10 +- .../pm/permission/PermissionRegistry.java | 2 +- .../server/pm/pkg/PackageStateUtils.java | 4 +- .../server/pm/pkg/PackageUserState.java | 3 +- .../server}/pm/pkg/PackageUserStateUtils.java | 25 +- .../android/server/pm/pkg}/SELinuxUtil.java | 8 +- .../pkg}/component/ComponentMutateUtils.java | 4 +- .../pkg}/component/ComponentParseUtils.java | 28 +- .../pm/pkg}/component/ParsedActivity.java | 4 +- .../pm/pkg}/component/ParsedActivityImpl.java | 8 +- .../pkg}/component/ParsedActivityUtils.java | 20 +- .../component/ParsedApexSystemService.java | 2 +- .../ParsedApexSystemServiceImpl.java | 4 +- .../ParsedApexSystemServiceUtils.java | 4 +- .../pm/pkg}/component/ParsedAttribution.java | 8 +- .../pkg}/component/ParsedAttributionImpl.java | 6 +- .../component/ParsedAttributionUtils.java | 4 +- .../pm/pkg}/component/ParsedComponent.java | 2 +- .../pkg}/component/ParsedComponentImpl.java | 8 +- .../pkg}/component/ParsedComponentUtils.java | 12 +- .../pkg}/component/ParsedInstrumentation.java | 4 +- .../component/ParsedInstrumentationImpl.java | 6 +- .../component/ParsedInstrumentationUtils.java | 8 +- .../pm/pkg}/component/ParsedIntentInfo.java | 10 +- .../pkg}/component/ParsedIntentInfoImpl.java | 13 +- .../pkg}/component/ParsedIntentInfoUtils.java | 12 +- .../pkg}/component/ParsedMainComponent.java | 4 +- .../component/ParsedMainComponentImpl.java | 6 +- .../component/ParsedMainComponentUtils.java | 10 +- .../pm/pkg}/component/ParsedPermission.java | 4 +- .../pkg}/component/ParsedPermissionGroup.java | 4 +- .../component/ParsedPermissionGroupImpl.java | 4 +- .../pkg}/component/ParsedPermissionImpl.java | 9 +- .../pkg}/component/ParsedPermissionUtils.java | 10 +- .../pm/pkg}/component/ParsedProcess.java | 2 +- .../pm/pkg}/component/ParsedProcessImpl.java | 4 +- .../pm/pkg}/component/ParsedProcessUtils.java | 8 +- .../pm/pkg}/component/ParsedProvider.java | 4 +- .../pm/pkg}/component/ParsedProviderImpl.java | 6 +- .../pkg}/component/ParsedProviderUtils.java | 12 +- .../pm/pkg}/component/ParsedService.java | 4 +- .../pm/pkg}/component/ParsedServiceImpl.java | 6 +- .../pm/pkg}/component/ParsedServiceUtils.java | 10 +- .../pkg}/component/ParsedUsesPermission.java | 2 +- .../component/ParsedUsesPermissionImpl.java | 4 +- .../parsing/PackageInfoWithoutStateUtils.java | 82 +-- .../pm/pkg}/parsing/ParsingPackage.java | 26 +- .../pm/pkg}/parsing/ParsingPackageHidden.java | 4 +- .../pm/pkg}/parsing/ParsingPackageImpl.java | 53 +- .../pkg}/parsing/ParsingPackageInternal.java | 4 +- .../pm/pkg}/parsing/ParsingPackageRead.java | 24 +- .../pm/pkg}/parsing/ParsingPackageUtils.java | 491 +++------------ .../server/pm/pkg}/parsing/ParsingUtils.java | 12 +- .../pkg}/parsing/PkgWithoutStateAppInfo.java | 4 +- .../parsing/PkgWithoutStatePackageInfo.java | 24 +- .../pm/split/DefaultSplitAssetLoader.java | 8 +- .../pm/split/SplitAssetDependencyLoader.java | 10 +- .../server}/pm/split/SplitAssetLoader.java | 4 +- .../domain/DomainVerificationCollector.java | 4 +- .../domain/DomainVerificationService.java | 4 +- ...geManagerComponentLabelIconOverrideTest.kt | 2 +- .../test-apps/UsesStaticLibrary/Android.bp | 2 +- .../parsing/parcelling/AndroidPackageTest.kt | 60 +- .../parsing/parcelling/ParsedActivityTest.kt | 7 +- .../parcelling/ParsedAttributionTest.kt | 14 +- .../parsing/parcelling/ParsedComponentTest.kt | 10 +- .../parcelling/ParsedInstrumentationTest.kt | 7 +- .../parcelling/ParsedIntentInfoTest.kt | 10 +- .../parcelling/ParsedMainComponentTest.kt | 5 +- .../parcelling/ParsedPermissionGroupTest.kt | 7 +- .../parcelling/ParsedPermissionTest.kt | 14 +- .../parsing/parcelling/ParsedProcessTest.kt | 7 +- .../parsing/parcelling/ParsedProviderTest.kt | 7 +- .../parsing/parcelling/ParsedServiceTest.kt | 7 +- .../parcelling/ParsedUsesPermissionTest.kt | 10 +- .../domain/DomainVerificationCollectorTest.kt | 37 +- .../domain/DomainVerificationEnforcerTest.kt | 7 +- .../DomainVerificationManagerApiTest.kt | 7 +- .../domain/DomainVerificationPackageTest.kt | 7 +- .../DomainVerificationSettingsMutationTest.kt | 7 +- ...inVerificationUserSelectionOverrideTest.kt | 10 +- .../src/com/android/server/pm/MockSystem.kt | 4 +- services/tests/servicestests/Android.bp | 27 +- .../tests/servicestests/AndroidManifest.xml | 9 + .../servicestests}/apks/install/Android.bp | 4 +- .../apks/install/AndroidManifest.xml | 0 .../apks/install/res/values/strings.xml | 0 .../apks/install_bad_dex/Android.bp | 12 +- .../apks/install_bad_dex/AndroidManifest.xml | 0 .../apks/install_bad_dex/classes.dex | 0 .../install_bad_dex/res/values/strings.xml | 0 .../frameworks/coretests/TestActivity.java | 0 .../install_complete_package_info/Android.bp | 15 + .../AndroidManifest.xml | 0 .../frameworks/coretests/TestActivity.java | 0 .../frameworks/coretests/TestProvider.java | 0 .../frameworks/coretests/TestReceiver.java | 0 .../frameworks/coretests/TestService.java | 0 .../apks/install_decl_perm}/Android.bp | 4 +- .../install_decl_perm/AndroidManifest.xml | 0 .../install_decl_perm/res/values/strings.xml | 0 .../apks/install_loc_auto}/Android.bp | 4 +- .../apks/install_loc_auto/AndroidManifest.xml | 0 .../install_loc_auto/res/values/strings.xml | 0 .../apks/install_loc_internal/Android.bp | 15 + .../install_loc_internal/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_loc_sdcard}/Android.bp | 4 +- .../install_loc_sdcard/AndroidManifest.xml | 0 .../install_loc_sdcard/res/values/strings.xml | 0 .../apks/install_loc_unspecified/Android.bp | 15 + .../AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_use_perm_good}/Android.bp | 4 +- .../install_use_perm_good/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../apks/install_uses_feature/Android.bp | 15 + .../install_uses_feature/AndroidManifest.xml | 0 .../res/values/strings.xml | 0 .../servicestests/apks/keyset/Android.bp | 129 ++++ .../apks/keyset/api_test/AndroidManifest.xml | 0 .../apks/keyset/permDef/AndroidManifest.xml | 0 .../apks/keyset/permUse/AndroidManifest.xml | 0 .../apks/keyset/res/values/strings.xml | 0 .../apks/keyset/uA/AndroidManifest.xml | 0 .../apks/keyset/uAB/AndroidManifest.xml | 0 .../apks/keyset/uAuB/AndroidManifest.xml | 0 .../apks/keyset/uB/AndroidManifest.xml | 0 .../apks/keyset/uNone/AndroidManifest.xml | 0 services/tests/servicestests/certs/Android.bp | 20 + services/tests/servicestests/certs/README | 4 + .../tests/servicestests}/certs/keyset_A.pk8 | Bin .../servicestests}/certs/keyset_A.x509.pem | 0 .../tests/servicestests}/certs/keyset_B.pk8 | Bin .../servicestests}/certs/keyset_B.x509.pem | 0 .../servicestests}/res/raw/install_app1_cert1 | Bin .../res/raw/install_app1_cert1_cert2 | Bin .../servicestests}/res/raw/install_app1_cert2 | Bin .../servicestests}/res/raw/install_app1_cert3 | Bin .../res/raw/install_app1_cert3_cert4 | Bin .../servicestests}/res/raw/install_app1_cert5 | Bin .../res/raw/install_app1_cert5_rotated_cert6 | Bin .../servicestests}/res/raw/install_app1_cert6 | Bin .../res/raw/install_app1_unsigned | Bin .../servicestests}/res/raw/install_app2_cert1 | Bin .../res/raw/install_app2_cert1_cert2 | Bin .../servicestests}/res/raw/install_app2_cert2 | Bin .../servicestests}/res/raw/install_app2_cert3 | Bin .../res/raw/install_app2_cert5_rotated_cert6 | Bin .../res/raw/install_app2_unsigned | Bin .../res/raw/install_shared1_cert1 | Bin .../res/raw/install_shared1_cert1_cert2 | Bin .../res/raw/install_shared1_cert2 | Bin .../res/raw/install_shared1_unsigned | Bin .../res/raw/install_shared2_cert1 | Bin .../res/raw/install_shared2_cert1_cert2 | Bin .../res/raw/install_shared2_cert2 | Bin .../res/raw/install_shared2_unsigned | Bin .../com/android/server/pm/AppsFilterTest.java | 12 +- .../server/pm/CompatibilityModeTest.java | 4 +- .../server/pm/KeySetManagerServiceTest.java | 2 +- .../pm/PackageManagerSettingsTests.java | 3 +- .../server}/pm/PackageManagerTests.java | 18 +- .../android/server/pm/PackageParserTest.java | 44 +- .../src/com/android/server/pm/ScanTests.java | 4 +- .../server/pm/dex/DexoptUtilsTest.java | 2 +- .../AndroidPackageInfoFlagBehaviorTest.kt | 147 ----- .../AndroidPackageParsingEquivalenceTest.kt | 158 ----- .../parsing/AndroidPackageParsingTestBase.kt | 557 ------------------ .../pm/parsing/PackageInfoUserFieldsTest.kt | 145 ----- .../parsing/PackageParserLegacyCoreTest.java | 64 +- .../parsing/PackageParsingDeferErrorTest.kt | 4 +- .../pm/parsing/SystemPartitionParseTest.kt | 2 +- .../PackageBackwardCompatibilityTest.java | 2 +- 235 files changed, 1746 insertions(+), 2375 deletions(-) rename apct-tests/perftests/{core => packagemanager}/src/android/os/PackageParsingPerfTest.kt (92%) create mode 100644 core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java delete mode 100644 core/java/android/content/pm/split/OWNERS delete mode 100644 core/tests/coretests/apks/install_loc_sdcard/Android.bp delete mode 100644 core/tests/coretests/apks/install_loc_unspecified/Android.bp delete mode 100644 core/tests/coretests/apks/install_use_perm_good/Android.bp delete mode 100644 core/tests/coretests/apks/install_uses_feature/Android.bp delete mode 100644 core/tests/coretests/apks/keyset/Android.bp rename {core/java/android/content => services/core/java/com/android/server}/pm/permission/CompatibilityPermissionInfo.java (96%) rename {core/java/android/content => services/core/java/com/android/server}/pm/pkg/PackageUserStateUtils.java (87%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/SELinuxUtil.java (83%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ComponentMutateUtils.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ComponentParseUtils.java (88%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedActivity.java (95%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedActivityImpl.java (99%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedActivityUtils.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedApexSystemService.java (95%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedApexSystemServiceImpl.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedApexSystemServiceUtils.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedAttribution.java (86%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedAttributionImpl.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedAttributionUtils.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedComponent.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedComponentImpl.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedComponentUtils.java (93%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedInstrumentation.java (89%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedInstrumentationImpl.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedInstrumentationUtils.java (93%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedIntentInfo.java (80%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedIntentInfoImpl.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedIntentInfoUtils.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedMainComponent.java (91%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedMainComponentImpl.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedMainComponentUtils.java (95%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedPermission.java (90%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedPermissionGroup.java (89%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedPermissionGroupImpl.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedPermissionImpl.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedPermissionUtils.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProcess.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProcessImpl.java (99%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProcessUtils.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProvider.java (92%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProviderImpl.java (98%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedProviderUtils.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedService.java (88%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedServiceImpl.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedServiceUtils.java (96%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedUsesPermission.java (97%) rename {core/java/android/content/pm/parsing => services/core/java/com/android/server/pm/pkg}/component/ParsedUsesPermissionImpl.java (98%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/PackageInfoWithoutStateUtils.java (94%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackage.java (94%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackageHidden.java (93%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackageImpl.java (98%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackageInternal.java (95%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackageRead.java (93%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingPackageUtils.java (88%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/ParsingUtils.java (93%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/PkgWithoutStateAppInfo.java (99%) rename {core/java/android/content/pm => services/core/java/com/android/server/pm/pkg}/parsing/PkgWithoutStatePackageInfo.java (92%) rename {core/java/android/content => services/core/java/com/android/server}/pm/split/DefaultSplitAssetLoader.java (93%) rename {core/java/android/content => services/core/java/com/android/server}/pm/split/SplitAssetDependencyLoader.java (94%) rename {core/java/android/content => services/core/java/com/android/server}/pm/split/SplitAssetLoader.java (91%) rename {core/tests/coretests => services/tests/servicestests}/apks/install/Android.bp (79%) rename {core/tests/coretests => services/tests/servicestests}/apks/install/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install/res/values/strings.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_bad_dex/Android.bp (68%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_bad_dex/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_bad_dex/classes.dex (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_bad_dex/res/values/strings.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java (100%) create mode 100644 services/tests/servicestests/apks/install_complete_package_info/Android.bp rename {core/tests/coretests => services/tests/servicestests}/apks/install_complete_package_info/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java (100%) rename {core/tests/coretests/apks/install_loc_auto => services/tests/servicestests/apks/install_decl_perm}/Android.bp (77%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_decl_perm/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_decl_perm/res/values/strings.xml (100%) rename {core/tests/coretests/apks/install_decl_perm => services/tests/servicestests/apks/install_loc_auto}/Android.bp (77%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_auto/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_auto/res/values/strings.xml (100%) create mode 100644 services/tests/servicestests/apks/install_loc_internal/Android.bp rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_internal/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_internal/res/values/strings.xml (100%) rename {core/tests/coretests/apks/install_loc_internal => services/tests/servicestests/apks/install_loc_sdcard}/Android.bp (77%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_sdcard/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_sdcard/res/values/strings.xml (100%) create mode 100644 services/tests/servicestests/apks/install_loc_unspecified/Android.bp rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_unspecified/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_loc_unspecified/res/values/strings.xml (100%) rename {core/tests/coretests/apks/install_complete_package_info => services/tests/servicestests/apks/install_use_perm_good}/Android.bp (77%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_use_perm_good/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_use_perm_good/res/values/strings.xml (100%) create mode 100644 services/tests/servicestests/apks/install_uses_feature/Android.bp rename {core/tests/coretests => services/tests/servicestests}/apks/install_uses_feature/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/install_uses_feature/res/values/strings.xml (100%) create mode 100644 services/tests/servicestests/apks/keyset/Android.bp rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/api_test/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/permDef/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/permUse/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/res/values/strings.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/uA/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/uAB/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/uAuB/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/uB/AndroidManifest.xml (100%) rename {core/tests/coretests => services/tests/servicestests}/apks/keyset/uNone/AndroidManifest.xml (100%) create mode 100644 services/tests/servicestests/certs/Android.bp create mode 100644 services/tests/servicestests/certs/README rename {core/tests/coretests => services/tests/servicestests}/certs/keyset_A.pk8 (100%) rename {core/tests/coretests => services/tests/servicestests}/certs/keyset_A.x509.pem (100%) rename {core/tests/coretests => services/tests/servicestests}/certs/keyset_B.pk8 (100%) rename {core/tests/coretests => services/tests/servicestests}/certs/keyset_B.x509.pem (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert1 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert3 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert3_cert4 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert5 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert5_rotated_cert6 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_cert6 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app1_unsigned (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_cert1 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_cert1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_cert3 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_cert5_rotated_cert6 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_app2_unsigned (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared1_cert1 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared1_cert1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared1_unsigned (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared2_cert1 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared2_cert1_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared2_cert2 (100%) rename {core/tests/coretests => services/tests/servicestests}/res/raw/install_shared2_unsigned (100%) rename {core/tests/coretests/src/android/content => services/tests/servicestests/src/com/android/server}/pm/PackageManagerTests.java (99%) delete mode 100644 services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt delete mode 100644 services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt delete mode 100644 services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt delete mode 100644 services/tests/servicestests/src/com/android/server/pm/parsing/PackageInfoUserFieldsTest.kt diff --git a/apct-tests/perftests/packagemanager/Android.bp b/apct-tests/perftests/packagemanager/Android.bp index fc70219d2aeb..81cec9111b88 100644 --- a/apct-tests/perftests/packagemanager/Android.bp +++ b/apct-tests/perftests/packagemanager/Android.bp @@ -10,7 +10,10 @@ package { android_test { name: "PackageManagerPerfTests", - srcs: ["src/**/*.java"], + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], static_libs: [ "platform-compat-test-rules", @@ -21,6 +24,7 @@ android_test { "apct-perftests-utils", "collector-device-lib-platform", "cts-install-lib-java", + "services.core", ], libs: ["android.test.base"], diff --git a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt b/apct-tests/perftests/packagemanager/src/android/os/PackageParsingPerfTest.kt similarity index 92% rename from apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt rename to apct-tests/perftests/packagemanager/src/android/os/PackageParsingPerfTest.kt index f9ddf9a9a59a..e873514f11a0 100644 --- a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt +++ b/apct-tests/perftests/packagemanager/src/android/os/PackageParsingPerfTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,9 +19,6 @@ package android.os import android.content.pm.PackageParser import android.content.pm.PackageParserCacheHelper.ReadHelper import android.content.pm.PackageParserCacheHelper.WriteHelper -import android.content.pm.parsing.ParsingPackageImpl -import android.content.pm.parsing.ParsingPackageRead -import android.content.pm.parsing.ParsingPackageUtils import android.content.pm.parsing.result.ParseInput import android.content.pm.parsing.result.ParseTypeImpl import android.content.res.TypedArray @@ -29,6 +26,8 @@ import android.perftests.utils.BenchmarkState import android.perftests.utils.PerfStatusReporter import androidx.test.filters.LargeTest import com.android.internal.util.ConcurrentUtils +import com.android.server.pm.pkg.parsing.ParsingPackageImpl +import com.android.server.pm.pkg.parsing.ParsingPackageUtils import libcore.io.IoUtils import org.junit.Rule import org.junit.Test @@ -42,7 +41,7 @@ import java.util.concurrent.TimeUnit @LargeTest @RunWith(Parameterized::class) -class PackageParsingPerfTest { +public class PackageParsingPerfTest { companion object { private const val PARALLEL_QUEUE_CAPACITY = 10 @@ -196,8 +195,12 @@ class PackageParsingPerfTest { // For testing, just disable enforcement to avoid hooking up to compat framework ParseTypeImpl(ParseInput.Callback { _, _, _ -> false }) } - val parser = ParsingPackageUtils(false, null, null, emptyList(), - object : ParsingPackageUtils.Callback { + val parser = ParsingPackageUtils(false, + null, + null, + emptyList(), + object : + ParsingPackageUtils.Callback { override fun hasFeature(feature: String) = true override fun startParsingPackage( @@ -206,7 +209,12 @@ class PackageParsingPerfTest { path: String, manifestArray: TypedArray, isCoreApp: Boolean - ) = ParsingPackageImpl(packageName, baseApkPath, path, manifestArray) + ) = ParsingPackageImpl( + packageName, + baseApkPath, + path, + manifestArray + ) }) override fun parseImpl(file: File) = @@ -268,6 +276,7 @@ class PackageParsingPerfTest { * Re-implementation of the server side PackageCacher, as it's inaccessible here. */ class PackageCacher2(cacheDir: File) : PackageCacher<ParsingPackageImpl>(cacheDir) { - override fun fromParcel(parcel: Parcel) = ParsingPackageImpl(parcel) + override fun fromParcel(parcel: Parcel) = + ParsingPackageImpl(parcel) } } diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 49c75c49b2d7..7b55b6c0e458 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -62,6 +62,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageParser; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; @@ -73,12 +74,6 @@ import android.content.pm.SuspendDialogInfo; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VersionedPackage; import android.content.pm.dex.ArtManager; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.result.ParseInput; -import android.content.pm.parsing.result.ParseResult; -import android.content.pm.parsing.result.ParseTypeImpl; import android.content.pm.pkg.FrameworkPackageUserState; import android.content.res.Configuration; import android.content.res.Resources; @@ -2335,37 +2330,6 @@ public class ApplicationPackageManager extends PackageManager { return info.loadLabel(this); } - @Nullable - public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, int flags) { - return getPackageArchiveInfo(archiveFilePath, PackageInfoFlags.of(flags)); - } - - @Nullable - public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, - PackageInfoFlags flags) { - long flagsBits = flags.getValue(); - if ((flagsBits & (PackageManager.MATCH_DIRECT_BOOT_UNAWARE - | PackageManager.MATCH_DIRECT_BOOT_AWARE)) == 0) { - // Caller expressed no opinion about what encryption - // aware/unaware components they want to see, so match both - flagsBits |= PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE; - } - - boolean collectCertificates = (flagsBits & PackageManager.GET_SIGNATURES) != 0 - || (flagsBits & PackageManager.GET_SIGNING_CERTIFICATES) != 0; - - ParseInput input = ParseTypeImpl.forParsingWithoutPlatformCompat().reset(); - ParseResult<ParsingPackage> result = ParsingPackageUtils.parseDefault(input, - new File(archiveFilePath), 0, getPermissionManager().getSplitPermissions(), - collectCertificates); - if (result.isError()) { - return null; - } - return PackageInfoWithoutStateUtils.generate(result.getResult(), null, flagsBits, 0, 0, - null, FrameworkPackageUserState.DEFAULT, UserHandle.getCallingUserId()); - } - @Override public int installExistingPackage(String packageName) throws NameNotFoundException { return installExistingPackage(packageName, INSTALL_REASON_UNKNOWN); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index d817f1e3baf4..c8f88f2edc62 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -50,6 +50,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.dex.ArtManager; +import android.content.pm.pkg.FrameworkPackageUserState; import android.content.pm.verify.domain.DomainVerificationManager; import android.content.res.Configuration; import android.content.res.Resources; @@ -88,6 +89,7 @@ import com.android.internal.util.DataClass; import dalvik.system.VMRuntime; +import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.security.cert.Certificate; @@ -7891,8 +7893,7 @@ public abstract class PackageManager { @Deprecated @Nullable public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, int flags) { - throw new UnsupportedOperationException( - "getPackageArchiveInfo() not implemented in subclass"); + return getPackageArchiveInfo(archiveFilePath, PackageInfoFlags.of(flags)); } /** @@ -7901,8 +7902,29 @@ public abstract class PackageManager { @Nullable public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, @NonNull PackageInfoFlags flags) { - throw new UnsupportedOperationException( - "getPackageArchiveInfo() not implemented in subclass"); + long flagsBits = flags.getValue(); + final PackageParser parser = new PackageParser(); + parser.setCallback(new PackageParser.CallbackImpl(this)); + final File apkFile = new File(archiveFilePath); + try { + if ((flagsBits & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) { + // Caller expressed an explicit opinion about what encryption + // aware/unaware components they want to see, so fall through and + // give them what they want + } else { + // Caller expressed no opinion, so match everything + flagsBits |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE; + } + + PackageParser.Package pkg = parser.parsePackage(apkFile, 0, false); + if ((flagsBits & GET_SIGNATURES) != 0) { + PackageParser.collectCertificates(pkg, false /* skipVerify */); + } + return PackageParser.generatePackageInfo(pkg, null, (int) flagsBits, 0, 0, null, + FrameworkPackageUserState.DEFAULT); + } catch (PackageParser.PackageParserException e) { + return null; + } } /** diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index e2c91a4b1bea..701c5461362a 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,8 @@ import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTEN import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NOT_APK; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION; +import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS; +import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS; import static android.os.Build.VERSION_CODES.O; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED; @@ -55,11 +57,9 @@ import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.pkg.FrameworkPackageUserState; -import android.content.pm.pkg.PackageUserStateUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; +import android.content.pm.pkg.FrameworkPackageUserState; import android.content.res.ApkAssets; import android.content.res.AssetManager; import android.content.res.Configuration; @@ -68,6 +68,7 @@ import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.os.Build; import android.os.Bundle; +import android.os.Debug; import android.os.FileUtils; import android.os.Parcel; import android.os.Parcelable; @@ -83,6 +84,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.AttributeSet; import android.util.Base64; +import android.util.DebugUtils; import android.util.DisplayMetrics; import android.util.IntArray; import android.util.Log; @@ -128,6 +130,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -148,7 +151,7 @@ import java.util.UUID; * </ul> * * @deprecated This class is mostly unused and no new changes should be added to it. Use - * {@link android.content.pm.parsing.ParsingPackageUtils} and related parsing v2 infrastructure in + * ParsingPackageUtils and related parsing v2 infrastructure in * the core/services parsing subpackages. Or for a quick parse of a provided APK, use * {@link PackageManager#getPackageArchiveInfo(String, int)}. * @@ -655,7 +658,7 @@ public class PackageParser { // If available for the target user, or trying to match uninstalled packages and it's // a system app. - return PackageUserStateUtils.isAvailable(state, flags) + return isAvailable(state, flags) || (appInfo != null && appInfo.isSystemApp() && ((flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0 || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0)); @@ -765,7 +768,7 @@ public class PackageParser { final ActivityInfo[] res = new ActivityInfo[N]; for (int i = 0; i < N; i++) { final Activity a = p.activities.get(i); - if (PackageUserStateUtils.isMatch(state, a.info, flags)) { + if (isMatch(state, a.info, flags)) { if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(a.className)) { continue; } @@ -782,7 +785,7 @@ public class PackageParser { final ActivityInfo[] res = new ActivityInfo[N]; for (int i = 0; i < N; i++) { final Activity a = p.receivers.get(i); - if (PackageUserStateUtils.isMatch(state, a.info, flags)) { + if (isMatch(state, a.info, flags)) { res[num++] = generateActivityInfo(a, flags, state, userId); } } @@ -796,7 +799,7 @@ public class PackageParser { final ServiceInfo[] res = new ServiceInfo[N]; for (int i = 0; i < N; i++) { final Service s = p.services.get(i); - if (PackageUserStateUtils.isMatch(state, s.info, flags)) { + if (isMatch(state, s.info, flags)) { res[num++] = generateServiceInfo(s, flags, state, userId); } } @@ -810,7 +813,7 @@ public class PackageParser { final ProviderInfo[] res = new ProviderInfo[N]; for (int i = 0; i < N; i++) { final Provider pr = p.providers.get(i); - if (PackageUserStateUtils.isMatch(state, pr.info, flags)) { + if (isMatch(state, pr.info, flags)) { res[num++] = generateProviderInfo(pr, flags, state, userId); } } @@ -7428,7 +7431,7 @@ public class PackageParser { mCompileSdkVersionCodename = dest.readString(); mUpgradeKeySets = (ArraySet<String>) dest.readArraySet(boot); - mKeySetMapping = ParsingPackageUtils.readKeySetMapping(dest); + mKeySetMapping = readKeySetMapping(dest); cpuAbiOverride = dest.readString(); use32bitAbi = (dest.readInt() == 1); @@ -7554,7 +7557,7 @@ public class PackageParser { dest.writeInt(mCompileSdkVersion); dest.writeString(mCompileSdkVersionCodename); dest.writeArraySet(mUpgradeKeySets); - ParsingPackageUtils.writeKeySetMapping(dest, mKeySetMapping); + writeKeySetMapping(dest, mKeySetMapping); dest.writeString(cpuAbiOverride); dest.writeInt(use32bitAbi ? 1 : 0); dest.writeByteArray(restrictUpdateHash); @@ -7977,7 +7980,7 @@ public class PackageParser { if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) { ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName); } - ai.seInfoUser = SELinuxUtil.getSeinfoUser(state); + ai.seInfoUser = getSeinfoUser(state); final OverlayPaths overlayPaths = state.getAllOverlayPaths(); if (overlayPaths != null) { ai.resourceDirs = overlayPaths.getResourceDirs().toArray(new String[0]); @@ -9074,4 +9077,194 @@ public class PackageParser { return mCachedSplitApks[0][0]; } } + + + + public static boolean isMatch(@NonNull FrameworkPackageUserState state, + ComponentInfo componentInfo, long flags) { + return isMatch(state, componentInfo.applicationInfo.isSystemApp(), + componentInfo.applicationInfo.enabled, componentInfo.enabled, + componentInfo.directBootAware, componentInfo.name, flags); + } + + public static boolean isMatch(@NonNull FrameworkPackageUserState state, boolean isSystem, + boolean isPackageEnabled, ComponentInfo component, long flags) { + return isMatch(state, isSystem, isPackageEnabled, component.isEnabled(), + component.directBootAware, component.name, flags); + } + + /** + * Test if the given component is considered installed, enabled and a match for the given + * flags. + * + * <p> + * Expects at least one of {@link PackageManager#MATCH_DIRECT_BOOT_AWARE} and {@link + * PackageManager#MATCH_DIRECT_BOOT_UNAWARE} are specified in {@code flags}. + * </p> + */ + public static boolean isMatch(@NonNull FrameworkPackageUserState state, boolean isSystem, + boolean isPackageEnabled, boolean isComponentEnabled, + boolean isComponentDirectBootAware, String componentName, long flags) { + final boolean matchUninstalled = (flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0; + if (!isAvailable(state, flags) && !(isSystem && matchUninstalled)) { + return reportIfDebug(false, flags); + } + + if (!isEnabled(state, isPackageEnabled, isComponentEnabled, componentName, flags)) { + return reportIfDebug(false, flags); + } + + if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) { + if (!isSystem) { + return reportIfDebug(false, flags); + } + } + + final boolean matchesUnaware = ((flags & PackageManager.MATCH_DIRECT_BOOT_UNAWARE) != 0) + && !isComponentDirectBootAware; + final boolean matchesAware = ((flags & PackageManager.MATCH_DIRECT_BOOT_AWARE) != 0) + && isComponentDirectBootAware; + return reportIfDebug(matchesUnaware || matchesAware, flags); + } + + public static boolean isAvailable(@NonNull FrameworkPackageUserState state, long flags) { + // True if it is installed for this user and it is not hidden. If it is hidden, + // still return true if the caller requested MATCH_UNINSTALLED_PACKAGES + final boolean matchAnyUser = (flags & PackageManager.MATCH_ANY_USER) != 0; + final boolean matchUninstalled = (flags & PackageManager.MATCH_UNINSTALLED_PACKAGES) != 0; + return matchAnyUser + || (state.isInstalled() + && (!state.isHidden() || matchUninstalled)); + } + + public static boolean reportIfDebug(boolean result, long flags) { + if (DEBUG_PARSER && !result) { + Slog.i(TAG, "No match!; flags: " + + DebugUtils.flagsToString(PackageManager.class, "MATCH_", flags) + " " + + Debug.getCaller()); + } + return result; + } + + public static boolean isEnabled(@NonNull FrameworkPackageUserState state, ComponentInfo componentInfo, + long flags) { + return isEnabled(state, componentInfo.applicationInfo.enabled, componentInfo.enabled, + componentInfo.name, flags); + } + + public static boolean isEnabled(@NonNull FrameworkPackageUserState state, boolean isPackageEnabled, + ComponentInfo parsedComponent, long flags) { + return isEnabled(state, isPackageEnabled, parsedComponent.isEnabled(), + parsedComponent.name, flags); + } + + /** + * Test if the given component is considered enabled. + */ + public static boolean isEnabled(@NonNull FrameworkPackageUserState state, + boolean isPackageEnabled, boolean isComponentEnabled, String componentName, + long flags) { + if ((flags & MATCH_DISABLED_COMPONENTS) != 0) { + return true; + } + + // First check if the overall package is disabled; if the package is + // enabled then fall through to check specific component + switch (state.getEnabledState()) { + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED: + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER: + return false; + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED: + if ((flags & MATCH_DISABLED_UNTIL_USED_COMPONENTS) == 0) { + return false; + } + // fallthrough + case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT: + if (!isPackageEnabled) { + return false; + } + // fallthrough + case PackageManager.COMPONENT_ENABLED_STATE_ENABLED: + break; + } + + // Check if component has explicit state before falling through to + // the manifest default + if (state.isComponentEnabled(componentName)) { + return true; + } else if (state.isComponentDisabled(componentName)) { + return false; + } + + return isComponentEnabled; + } + + /** + * Writes the keyset mapping to the provided package. {@code null} mappings are permitted. + */ + public static void writeKeySetMapping(@NonNull Parcel dest, + @NonNull Map<String, ArraySet<PublicKey>> keySetMapping) { + if (keySetMapping == null) { + dest.writeInt(-1); + return; + } + + final int N = keySetMapping.size(); + dest.writeInt(N); + + for (String key : keySetMapping.keySet()) { + dest.writeString(key); + ArraySet<PublicKey> keys = keySetMapping.get(key); + if (keys == null) { + dest.writeInt(-1); + continue; + } + + final int M = keys.size(); + dest.writeInt(M); + for (int j = 0; j < M; j++) { + dest.writeSerializable(keys.valueAt(j)); + } + } + } + + /** + * Reads a keyset mapping from the given parcel at the given data position. May return + * {@code null} if the serialized mapping was {@code null}. + */ + @NonNull + public static ArrayMap<String, ArraySet<PublicKey>> readKeySetMapping(@NonNull Parcel in) { + final int N = in.readInt(); + if (N == -1) { + return null; + } + + ArrayMap<String, ArraySet<PublicKey>> keySetMapping = new ArrayMap<>(); + for (int i = 0; i < N; ++i) { + String key = in.readString(); + final int M = in.readInt(); + if (M == -1) { + keySetMapping.put(key, null); + continue; + } + + ArraySet<PublicKey> keys = new ArraySet<>(M); + for (int j = 0; j < M; ++j) { + PublicKey pk = + in.readSerializable(PublicKey.class.getClassLoader(), PublicKey.class); + keys.add(pk); + } + + keySetMapping.put(key, keys); + } + + return keySetMapping; + } + + public static String getSeinfoUser(FrameworkPackageUserState userState) { + if (userState.isInstantApp()) { + return ":ephemeralapp:complete"; + } + return ":complete"; + } } diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java index 1639ee92b882..d5498a0dc8cd 100644 --- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java +++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java @@ -18,13 +18,6 @@ package android.content.pm.parsing; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; -import static android.content.pm.parsing.ParsingPackageUtils.PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY; -import static android.content.pm.parsing.ParsingPackageUtils.checkRequiredSystemProperties; -import static android.content.pm.parsing.ParsingPackageUtils.parsePublicKey; -import static android.content.pm.parsing.ParsingPackageUtils.validateName; -import static android.content.pm.parsing.ParsingUtils.ANDROID_RES_NAMESPACE; -import static android.content.pm.parsing.ParsingUtils.DEFAULT_MIN_SDK_VERSION; -import static android.content.pm.parsing.ParsingUtils.DEFAULT_TARGET_SDK_VERSION; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import android.annotation.NonNull; @@ -37,6 +30,7 @@ import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.ApkAssets; import android.content.res.XmlResourceParser; +import android.os.Build; import android.os.Trace; import android.text.TextUtils; import android.util.ArrayMap; @@ -66,7 +60,7 @@ import java.util.Set; /** @hide */ public class ApkLiteParseUtils { - private static final String TAG = ParsingUtils.TAG; + private static final String TAG = "ApkLiteParseUtils"; private static final int PARSE_DEFAULT_INSTALL_LOCATION = PackageInfo.INSTALL_LOCATION_UNSPECIFIED; @@ -75,6 +69,26 @@ public class ApkLiteParseUtils { public static final String APK_FILE_EXTENSION = ".apk"; + + // Constants copied from services.jar side since they're not accessible + private static final String ANDROID_RES_NAMESPACE = + "http://schemas.android.com/apk/res/android"; + private static final int DEFAULT_MIN_SDK_VERSION = 1; + private static final int DEFAULT_TARGET_SDK_VERSION = 0; + public static final String ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml"; + private static final int PARSE_IS_SYSTEM_DIR = 1 << 4; + private static final int PARSE_COLLECT_CERTIFICATES = 1 << 5; + private static final String TAG_APPLICATION = "application"; + private static final String TAG_PACKAGE_VERIFIER = "package-verifier"; + private static final String TAG_PROFILEABLE = "profileable"; + private static final String TAG_RECEIVER = "receiver"; + private static final String TAG_OVERLAY = "overlay"; + private static final String TAG_USES_SDK = "uses-sdk"; + private static final String TAG_USES_SPLIT = "uses-split"; + private static final String TAG_MANIFEST = "manifest"; + private static final int SDK_VERSION = Build.VERSION.SDK_INT; + private static final String[] SDK_CODENAMES = Build.VERSION.ACTIVE_CODENAMES; + /** * Parse only lightweight details about the package at the given location. * Automatically detects if the package is a monolithic style (single APK @@ -312,15 +326,16 @@ public class ApkLiteParseUtils { "Failed to parse " + apkPath, e); } - parser = apkAssets.openXml(ParsingPackageUtils.ANDROID_MANIFEST_FILENAME); + parser = apkAssets.openXml(ANDROID_MANIFEST_FILENAME); final SigningDetails signingDetails; - if ((flags & ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES) != 0) { - final boolean skipVerify = (flags & ParsingPackageUtils.PARSE_IS_SYSTEM_DIR) != 0; + if ((flags & PARSE_COLLECT_CERTIFICATES) != 0) { + final boolean skipVerify = (flags & PARSE_IS_SYSTEM_DIR) != 0; Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "collectCertificates"); try { final ParseResult<SigningDetails> result = - ParsingPackageUtils.getSigningDetails(input, apkFile.getAbsolutePath(), + FrameworkParsingPackageUtils.getSigningDetails(input, + apkFile.getAbsolutePath(), skipVerify, /* isStaticSharedLibrary */ false, SigningDetails.UNKNOWN, DEFAULT_TARGET_SDK_VERSION); if (result.isError()) { @@ -417,12 +432,12 @@ public class ApkLiteParseUtils { continue; } - if (ParsingPackageUtils.TAG_PACKAGE_VERIFIER.equals(parser.getName())) { + if (TAG_PACKAGE_VERIFIER.equals(parser.getName())) { final VerifierInfo verifier = parseVerifier(parser); if (verifier != null) { verifiers.add(verifier); } - } else if (ParsingPackageUtils.TAG_APPLICATION.equals(parser.getName())) { + } else if (TAG_APPLICATION.equals(parser.getName())) { debuggable = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, "debuggable", false); multiArch = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, "multiArch", @@ -453,15 +468,15 @@ public class ApkLiteParseUtils { continue; } - if (ParsingPackageUtils.TAG_PROFILEABLE.equals(parser.getName())) { + if (TAG_PROFILEABLE.equals(parser.getName())) { profilableByShell = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, "shell", profilableByShell); - } else if (ParsingPackageUtils.TAG_RECEIVER.equals(parser.getName())) { + } else if (TAG_RECEIVER.equals(parser.getName())) { hasDeviceAdminReceiver |= isDeviceAdminReceiver( parser, hasBindDeviceAdminPermission); } } - } else if (ParsingPackageUtils.TAG_OVERLAY.equals(parser.getName())) { + } else if (TAG_OVERLAY.equals(parser.getName())) { requiredSystemPropertyName = parser.getAttributeValue(ANDROID_RES_NAMESPACE, "requiredSystemPropertyName"); requiredSystemPropertyValue = parser.getAttributeValue(ANDROID_RES_NAMESPACE, @@ -470,7 +485,7 @@ public class ApkLiteParseUtils { overlayIsStatic = parser.getAttributeBooleanValue(ANDROID_RES_NAMESPACE, "isStatic", false); overlayPriority = parser.getAttributeIntValue(ANDROID_RES_NAMESPACE, "priority", 0); - } else if (ParsingPackageUtils.TAG_USES_SPLIT.equals(parser.getName())) { + } else if (TAG_USES_SPLIT.equals(parser.getName())) { if (usesSplitName != null) { Slog.w(TAG, "Only one <uses-split> permitted. Ignoring others."); continue; @@ -481,8 +496,8 @@ public class ApkLiteParseUtils { return input.error(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, "<uses-split> tag requires 'android:name' attribute"); } - } else if (ParsingPackageUtils.TAG_USES_SDK.equals(parser.getName())) { - // Mirrors ParsingPackageUtils#parseUsesSdk until lite and full parsing is combined + } else if (TAG_USES_SDK.equals(parser.getName())) { + // Mirrors FrameworkParsingPackageUtils#parseUsesSdk until lite and full parsing is combined String minSdkVersionString = parser.getAttributeValue(ANDROID_RES_NAMESPACE, "minSdkVersion"); String targetSdkVersionString = parser.getAttributeValue(ANDROID_RES_NAMESPACE, @@ -515,16 +530,15 @@ public class ApkLiteParseUtils { targetCode = minCode; } - ParseResult<Integer> targetResult = ParsingPackageUtils.computeTargetSdkVersion( - targetVer, targetCode, ParsingPackageUtils.SDK_CODENAMES, input); + ParseResult<Integer> targetResult = FrameworkParsingPackageUtils.computeTargetSdkVersion( + targetVer, targetCode, SDK_CODENAMES, input); if (targetResult.isError()) { return input.error(targetResult); } targetSdkVersion = targetResult.getResult(); - ParseResult<Integer> minResult = ParsingPackageUtils.computeMinSdkVersion( - minVer, minCode, ParsingPackageUtils.SDK_VERSION, - ParsingPackageUtils.SDK_CODENAMES, input); + ParseResult<Integer> minResult = FrameworkParsingPackageUtils.computeMinSdkVersion( + minVer, minCode, SDK_VERSION, SDK_CODENAMES, input); if (minResult.isError()) { return input.error(minResult); } @@ -533,9 +547,9 @@ public class ApkLiteParseUtils { } // Check to see if overlay should be excluded based on system property condition - if ((flags & PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY) == 0 - && !checkRequiredSystemProperties( - requiredSystemPropertyName, requiredSystemPropertyValue)) { + if ((flags & FrameworkParsingPackageUtils.PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY) + == 0 && !FrameworkParsingPackageUtils.checkRequiredSystemProperties( + requiredSystemPropertyName, requiredSystemPropertyValue)) { String message = "Skipping target and overlay pair " + targetPackage + " and " + codePath + ": overlay ignored due to required system property: " + requiredSystemPropertyName + " with value: " + requiredSystemPropertyValue; @@ -600,14 +614,15 @@ public class ApkLiteParseUtils { return input.error(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, "No start tag found"); } - if (!parser.getName().equals(ParsingPackageUtils.TAG_MANIFEST)) { + if (!parser.getName().equals(TAG_MANIFEST)) { return input.error(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, "No <manifest> tag"); } final String packageName = parser.getAttributeValue(null, "package"); if (!"android".equals(packageName)) { - final ParseResult<?> nameResult = validateName(input, packageName, true, true); + final ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, + packageName, true, true); if (nameResult.isError()) { return input.error(INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME, "Invalid manifest package: " + nameResult.getErrorMessage()); @@ -619,7 +634,8 @@ public class ApkLiteParseUtils { if (splitName.length() == 0) { splitName = null; } else { - final ParseResult<?> nameResult = validateName(input, splitName, false, false); + final ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, + splitName, false, false); if (nameResult.isError()) { return input.error(INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME, "Invalid manifest split: " + nameResult.getErrorMessage()); @@ -666,7 +682,7 @@ public class ApkLiteParseUtils { final String type = value.trim(); // Using requireFilename as true because it limits length of the name to the // {@link #MAX_FILE_NAME_SIZE}. - final ParseResult<?> nameResult = validateName(input, type, + final ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, type, false /* requireSeparator */, true /* requireFilename */); if (nameResult.isError()) { return input.error(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, @@ -688,7 +704,7 @@ public class ApkLiteParseUtils { return null; } - final PublicKey publicKey = parsePublicKey(encodedPublicKey); + final PublicKey publicKey = FrameworkParsingPackageUtils.parsePublicKey(encodedPublicKey); if (publicKey == null) { Slog.i(TAG, "Unable to parse verifier public key for " + packageName); return null; diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java new file mode 100644 index 000000000000..8b86a16075e9 --- /dev/null +++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java @@ -0,0 +1,397 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm.parsing; + +import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES; + +import android.annotation.CheckResult; +import android.annotation.IntRange; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.pm.PackageManager; +import android.content.pm.Signature; +import android.content.pm.SigningDetails; +import android.content.pm.parsing.result.ParseInput; +import android.content.pm.parsing.result.ParseResult; +import android.os.Build; +import android.os.FileUtils; +import android.os.SystemProperties; +import android.text.TextUtils; +import android.util.Base64; +import android.util.Slog; +import android.util.apk.ApkSignatureVerifier; + +import com.android.internal.util.ArrayUtils; + +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.spec.EncodedKeySpec; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.Arrays; + +/** @hide */ +public class FrameworkParsingPackageUtils { + + private static final String TAG = "FrameworkParsingPackageUtils"; + + /** + * For those names would be used as a part of the file name. Limits size to 223 and reserves 32 + * for the OS. + */ + private static final int MAX_FILE_NAME_SIZE = 223; + + public static final int PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY = 1 << 7; + + /** + * Check if the given name is valid. + * + * @param name The name to check. + * @param requireSeparator {@code true} if the name requires containing a separator at least. + * @param requireFilename {@code true} to apply file name validation to the given name. It also + * limits length of the name to the {@link #MAX_FILE_NAME_SIZE}. + * @return Success if it's valid. + */ + public static String validateName(String name, boolean requireSeparator, + boolean requireFilename) { + final int N = name.length(); + boolean hasSep = false; + boolean front = true; + for (int i = 0; i < N; i++) { + final char c = name.charAt(i); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + front = false; + continue; + } + if (!front) { + if ((c >= '0' && c <= '9') || c == '_') { + continue; + } + } + if (c == '.') { + hasSep = true; + front = true; + continue; + } + return "bad character '" + c + "'"; + } + if (requireFilename) { + if (!FileUtils.isValidExtFilename(name)) { + return "Invalid filename"; + } else if (N > MAX_FILE_NAME_SIZE) { + return "the length of the name is greater than " + MAX_FILE_NAME_SIZE; + } + } + return hasSep || !requireSeparator ? null : "must have at least one '.' separator"; + } + + /** + * @see #validateName(String, boolean, boolean) + */ + public static ParseResult validateName(ParseInput input, String name, boolean requireSeparator, + boolean requireFilename) { + final String errorMessage = validateName(name, requireSeparator, requireFilename); + if (errorMessage != null) { + return input.error(errorMessage); + } + return input.success(null); + } + + /** + * @return {@link PublicKey} of a given encoded public key. + */ + public static PublicKey parsePublicKey(final String encodedPublicKey) { + if (encodedPublicKey == null) { + Slog.w(TAG, "Could not parse null public key"); + return null; + } + + try { + return parsePublicKey(Base64.decode(encodedPublicKey, Base64.DEFAULT)); + } catch (IllegalArgumentException e) { + Slog.w(TAG, "Could not parse verifier public key; invalid Base64"); + return null; + } + } + + /** + * @return {@link PublicKey} of the given byte array of a public key. + */ + public static PublicKey parsePublicKey(final byte[] publicKey) { + if (publicKey == null) { + Slog.w(TAG, "Could not parse null public key"); + return null; + } + + final EncodedKeySpec keySpec; + try { + keySpec = new X509EncodedKeySpec(publicKey); + } catch (IllegalArgumentException e) { + Slog.w(TAG, "Could not parse verifier public key; invalid Base64"); + return null; + } + + /* First try the key as an RSA key. */ + try { + final KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } catch (NoSuchAlgorithmException e) { + Slog.wtf(TAG, "Could not parse public key: RSA KeyFactory not included in build"); + } catch (InvalidKeySpecException e) { + // Not a RSA public key. + } + + /* Now try it as a ECDSA key. */ + try { + final KeyFactory keyFactory = KeyFactory.getInstance("EC"); + return keyFactory.generatePublic(keySpec); + } catch (NoSuchAlgorithmException e) { + Slog.wtf(TAG, "Could not parse public key: EC KeyFactory not included in build"); + } catch (InvalidKeySpecException e) { + // Not a ECDSA public key. + } + + /* Now try it as a DSA key. */ + try { + final KeyFactory keyFactory = KeyFactory.getInstance("DSA"); + return keyFactory.generatePublic(keySpec); + } catch (NoSuchAlgorithmException e) { + Slog.wtf(TAG, "Could not parse public key: DSA KeyFactory not included in build"); + } catch (InvalidKeySpecException e) { + // Not a DSA public key. + } + + /* Not a supported key type */ + return null; + } + + /** + * Returns {@code true} if both the property name and value are empty or if the given system + * property is set to the specified value. Properties can be one or more, and if properties are + * more than one, they must be separated by comma, and count of names and values must be equal, + * and also every given system property must be set to the corresponding value. + * In all other cases, returns {@code false} + */ + public static boolean checkRequiredSystemProperties(@Nullable String rawPropNames, + @Nullable String rawPropValues) { + if (TextUtils.isEmpty(rawPropNames) || TextUtils.isEmpty(rawPropValues)) { + if (!TextUtils.isEmpty(rawPropNames) || !TextUtils.isEmpty(rawPropValues)) { + // malformed condition - incomplete + Slog.w(TAG, "Disabling overlay - incomplete property :'" + rawPropNames + + "=" + rawPropValues + "' - require both requiredSystemPropertyName" + + " AND requiredSystemPropertyValue to be specified."); + return false; + } + // no valid condition set - so no exclusion criteria, overlay will be included. + return true; + } + + final String[] propNames = rawPropNames.split(","); + final String[] propValues = rawPropValues.split(","); + + if (propNames.length != propValues.length) { + Slog.w(TAG, "Disabling overlay - property :'" + rawPropNames + + "=" + rawPropValues + "' - require both requiredSystemPropertyName" + + " AND requiredSystemPropertyValue lists to have the same size."); + return false; + } + for (int i = 0; i < propNames.length; i++) { + // Check property value: make sure it is both set and equal to expected value + final String currValue = SystemProperties.get(propNames[i]); + if (!TextUtils.equals(currValue, propValues[i])) { + return false; + } + } + return true; + } + + @CheckResult + public static ParseResult<SigningDetails> getSigningDetails(ParseInput input, + String baseCodePath, boolean skipVerify, boolean isStaticSharedLibrary, + @NonNull SigningDetails existingSigningDetails, int targetSdk) { + int minSignatureScheme = ApkSignatureVerifier.getMinimumSignatureSchemeVersionForTargetSdk( + targetSdk); + if (isStaticSharedLibrary) { + // must use v2 signing scheme + minSignatureScheme = SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V2; + } + final ParseResult<SigningDetails> verified; + if (skipVerify) { + // systemDir APKs are already trusted, save time by not verifying; since the + // signature is not verified and some system apps can have their V2+ signatures + // stripped allow pulling the certs from the jar signature. + verified = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(input, baseCodePath, + SigningDetails.SignatureSchemeVersion.JAR); + } else { + verified = ApkSignatureVerifier.verify(input, baseCodePath, minSignatureScheme); + } + + if (verified.isError()) { + return input.error(verified); + } + + // Verify that entries are signed consistently with the first pkg + // we encountered. Note that for splits, certificates may have + // already been populated during an earlier parse of a base APK. + if (existingSigningDetails == SigningDetails.UNKNOWN) { + return verified; + } else { + if (!Signature.areExactMatch(existingSigningDetails.getSignatures(), + verified.getResult().getSignatures())) { + return input.error(INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES, + baseCodePath + " has mismatched certificates"); + } + + return input.success(existingSigningDetails); + } + } + + /** + * Computes the minSdkVersion to use at runtime. If the package is not compatible with this + * platform, populates {@code outError[0]} with an error message. + * <p> + * If {@code minCode} is not specified, e.g. the value is {@code null}, then behavior varies + * based on the {@code platformSdkVersion}: + * <ul> + * <li>If the platform SDK version is greater than or equal to the + * {@code minVers}, returns the {@code mniVers} unmodified. + * <li>Otherwise, returns -1 to indicate that the package is not + * compatible with this platform. + * </ul> + * <p> + * Otherwise, the behavior varies based on whether the current platform + * is a pre-release version, e.g. the {@code platformSdkCodenames} array + * has length > 0: + * <ul> + * <li>If this is a pre-release platform and the value specified by + * {@code targetCode} is contained within the array of allowed pre-release + * codenames, this method will return {@link Build.VERSION_CODES#CUR_DEVELOPMENT}. + * <li>If this is a released platform, this method will return -1 to + * indicate that the package is not compatible with this platform. + * </ul> + * + * @param minVers minSdkVersion number, if specified in the application manifest, + * or 1 otherwise + * @param minCode minSdkVersion code, if specified in the application manifest, or + * {@code null} otherwise + * @param platformSdkVersion platform SDK version number, typically Build.VERSION.SDK_INT + * @param platformSdkCodenames array of allowed prerelease SDK codenames for this platform + * @return the minSdkVersion to use at runtime if successful + */ + public static ParseResult<Integer> computeMinSdkVersion(@IntRange(from = 1) int minVers, + @Nullable String minCode, @IntRange(from = 1) int platformSdkVersion, + @NonNull String[] platformSdkCodenames, @NonNull ParseInput input) { + // If it's a release SDK, make sure we meet the minimum SDK requirement. + if (minCode == null) { + if (minVers <= platformSdkVersion) { + return input.success(minVers); + } + + // We don't meet the minimum SDK requirement. + return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, + "Requires newer sdk version #" + minVers + + " (current version is #" + platformSdkVersion + ")"); + } + + // If it's a pre-release SDK and the codename matches this platform, we + // definitely meet the minimum SDK requirement. + if (matchTargetCode(platformSdkCodenames, minCode)) { + return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT); + } + + // Otherwise, we're looking at an incompatible pre-release SDK. + if (platformSdkCodenames.length > 0) { + return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, + "Requires development platform " + minCode + + " (current platform is any of " + + Arrays.toString(platformSdkCodenames) + ")"); + } else { + return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, + "Requires development platform " + minCode + + " but this is a release platform."); + } + } + + /** + * Computes the targetSdkVersion to use at runtime. If the package is not compatible with this + * platform, populates {@code outError[0]} with an error message. + * <p> + * If {@code targetCode} is not specified, e.g. the value is {@code null}, then the {@code + * targetVers} will be returned unmodified. + * <p> + * Otherwise, the behavior varies based on whether the current platform is a pre-release + * version, e.g. the {@code platformSdkCodenames} array has length > 0: + * <ul> + * <li>If this is a pre-release platform and the value specified by + * {@code targetCode} is contained within the array of allowed pre-release + * codenames, this method will return {@link Build.VERSION_CODES#CUR_DEVELOPMENT}. + * <li>If this is a released platform, this method will return -1 to + * indicate that the package is not compatible with this platform. + * </ul> + * + * @param targetVers targetSdkVersion number, if specified in the application + * manifest, or 0 otherwise + * @param targetCode targetSdkVersion code, if specified in the application manifest, + * or {@code null} otherwise + * @param platformSdkCodenames array of allowed pre-release SDK codenames for this platform + * @return the targetSdkVersion to use at runtime if successful + */ + public static ParseResult<Integer> computeTargetSdkVersion(@IntRange(from = 0) int targetVers, + @Nullable String targetCode, @NonNull String[] platformSdkCodenames, + @NonNull ParseInput input) { + // If it's a release SDK, return the version number unmodified. + if (targetCode == null) { + return input.success(targetVers); + } + + // If it's a pre-release SDK and the codename matches this platform, it + // definitely targets this SDK. + if (matchTargetCode(platformSdkCodenames, targetCode)) { + return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT); + } + + // Otherwise, we're looking at an incompatible pre-release SDK. + if (platformSdkCodenames.length > 0) { + return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, + "Requires development platform " + targetCode + + " (current platform is any of " + + Arrays.toString(platformSdkCodenames) + ")"); + } else { + return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, + "Requires development platform " + targetCode + + " but this is a release platform."); + } + } + + /** + * Matches a given {@code targetCode} against a set of release codeNames. Target codes can + * either be of the form {@code [codename]}" (e.g {@code "Q"}) or of the form {@code + * [codename].[fingerprint]} (e.g {@code "Q.cafebc561"}). + */ + private static boolean matchTargetCode(@NonNull String[] codeNames, + @NonNull String targetCode) { + final String targetCodeName; + final int targetCodeIdx = targetCode.indexOf('.'); + if (targetCodeIdx == -1) { + targetCodeName = targetCode; + } else { + targetCodeName = targetCode.substring(0, targetCodeIdx); + } + return ArrayUtils.contains(codeNames, targetCodeName); + } +} diff --git a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java index 1a3fc850243e..c32370441e97 100644 --- a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java +++ b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java @@ -16,14 +16,11 @@ package android.content.pm.parsing.result; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; - import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.content.pm.parsing.ParsingUtils; import android.os.ServiceManager; import android.util.ArrayMap; import android.util.Log; @@ -35,7 +32,7 @@ import com.android.internal.util.CollectionUtils; /** @hide */ public class ParseTypeImpl implements ParseInput, ParseResult<Object> { - private static final String TAG = ParsingUtils.TAG; + private static final String TAG = "ParseTypeImpl"; public static final boolean DEBUG_FILL_STACK_TRACE = false; @@ -64,7 +61,7 @@ public class ParseTypeImpl implements ParseInput, ParseResult<Object> { private ArrayMap<Long, String> mDeferredErrors = null; private String mPackageName; - private int mTargetSdkVersion = NOT_SET; + private int mTargetSdkVersion = -1; /** * Specifically for {@link PackageManager#getPackageArchiveInfo(String, int)} where @@ -121,7 +118,7 @@ public class ParseTypeImpl implements ParseInput, ParseResult<Object> { // how many APKs they're going through. mDeferredErrors.erase(); } - mTargetSdkVersion = NOT_SET; + mTargetSdkVersion = -1; return this; } @@ -141,7 +138,7 @@ public class ParseTypeImpl implements ParseInput, ParseResult<Object> { if (DEBUG_THROW_ALL_ERRORS) { return error(parseError); } - if (mTargetSdkVersion != NOT_SET) { + if (mTargetSdkVersion != -1) { if (mDeferredErrors != null && mDeferredErrors.containsKey(deferredError)) { // If the map already contains the key, that means it's already been checked and // found to be disabled. Otherwise it would've failed when mTargetSdkVersion was diff --git a/core/java/android/content/pm/pkg/FrameworkPackageUserState.java b/core/java/android/content/pm/pkg/FrameworkPackageUserState.java index 0daf6cf4319a..bac29b49217c 100644 --- a/core/java/android/content/pm/pkg/FrameworkPackageUserState.java +++ b/core/java/android/content/pm/pkg/FrameworkPackageUserState.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,8 +31,9 @@ import java.util.Set; * See the services variant for method documentation. * * @hide - * @deprecated Unless you know exactly what you're doing, you probably want the services variant. + * @deprecated Unused by framework. */ +@Deprecated public interface FrameworkPackageUserState { FrameworkPackageUserState DEFAULT = new FrameworkPackageUserStateDefault(); diff --git a/core/java/android/content/pm/pkg/FrameworkPackageUserStateDefault.java b/core/java/android/content/pm/pkg/FrameworkPackageUserStateDefault.java index 27255da1e64a..359062064ebf 100644 --- a/core/java/android/content/pm/pkg/FrameworkPackageUserStateDefault.java +++ b/core/java/android/content/pm/pkg/FrameworkPackageUserStateDefault.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,11 @@ import java.util.Collections; import java.util.Map; import java.util.Set; -/** @hide */ +/** + * @hide + * @deprecated Unused by framework. + */ +@Deprecated class FrameworkPackageUserStateDefault implements FrameworkPackageUserState { @Override diff --git a/core/java/android/content/pm/split/OWNERS b/core/java/android/content/pm/split/OWNERS deleted file mode 100644 index 3d126d297e60..000000000000 --- a/core/java/android/content/pm/split/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -# Bug component: 36137 - -toddke@android.com -toddke@google.com -patb@google.com diff --git a/core/java/android/util/apk/ApkSignatureVerifier.java b/core/java/android/util/apk/ApkSignatureVerifier.java index 41b749eb5f40..bff5426f9c64 100644 --- a/core/java/android/util/apk/ApkSignatureVerifier.java +++ b/core/java/android/util/apk/ApkSignatureVerifier.java @@ -27,7 +27,7 @@ import static android.util.apk.ApkSignatureSchemeV4Verifier.APK_SIGNATURE_SCHEME import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.SigningDetails.SignatureSchemeVersion; -import android.content.pm.parsing.ParsingPackageUtils; +import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.os.Build; @@ -380,7 +380,7 @@ public class ApkSignatureVerifier { // Gather certs from AndroidManifest.xml, which every APK must have, as an optimization // to not need to verify the whole APK when verifyFUll == false. final ZipEntry manifestEntry = jarFile.findEntry( - ParsingPackageUtils.ANDROID_MANIFEST_FILENAME); + ApkLiteParseUtils.ANDROID_MANIFEST_FILENAME); if (manifestEntry == null) { return input.error(INSTALL_PARSE_FAILED_BAD_MANIFEST, "Package " + apkPath + " has no manifest"); @@ -394,7 +394,7 @@ public class ApkSignatureVerifier { if (ArrayUtils.isEmpty(lastCerts)) { return input.error(INSTALL_PARSE_FAILED_NO_CERTIFICATES, "Package " + apkPath + " has no certificates at entry " - + ParsingPackageUtils.ANDROID_MANIFEST_FILENAME); + + ApkLiteParseUtils.ANDROID_MANIFEST_FILENAME); } lastSigs = convertToSignatures(lastCerts); @@ -407,7 +407,7 @@ public class ApkSignatureVerifier { final String entryName = entry.getName(); if (entryName.startsWith("META-INF/")) continue; - if (entryName.equals(ParsingPackageUtils.ANDROID_MANIFEST_FILENAME)) continue; + if (entryName.equals(ApkLiteParseUtils.ANDROID_MANIFEST_FILENAME)) continue; toVerify.add(entry); } diff --git a/core/java/com/android/internal/content/om/OverlayConfig.java b/core/java/com/android/internal/content/om/OverlayConfig.java index 29b31d37e862..b786526ce676 100644 --- a/core/java/com/android/internal/content/om/OverlayConfig.java +++ b/core/java/com/android/internal/content/om/OverlayConfig.java @@ -19,7 +19,6 @@ package com.android.internal.content.om; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackagePartitions; -import android.content.pm.parsing.ParsingPackageRead; import android.os.Build; import android.os.Trace; import android.util.ArrayMap; @@ -82,7 +81,22 @@ public class OverlayConfig { public interface PackageProvider { /** Performs the given action for each package. */ - void forEachPackage(TriConsumer<ParsingPackageRead, Boolean, File> p); + void forEachPackage(TriConsumer<Package, Boolean, File> p); + + interface Package { + + String getBaseApkPath(); + + int getOverlayPriority(); + + String getOverlayTarget(); + + String getPackageName(); + + int getTargetSdkVersion(); + + boolean isOverlayIsStatic(); + } } private static final Comparator<ParsedConfiguration> sStaticOverlayComparator = (c1, c2) -> { @@ -304,7 +318,7 @@ public class OverlayConfig { private static Map<String, ParsedOverlayInfo> getOverlayPackageInfos( @NonNull PackageProvider packageManager) { final HashMap<String, ParsedOverlayInfo> overlays = new HashMap<>(); - packageManager.forEachPackage((ParsingPackageRead p, Boolean isSystem, + packageManager.forEachPackage((PackageProvider.Package p, Boolean isSystem, @Nullable File preInstalledApexPath) -> { if (p.getOverlayTarget() != null && isSystem) { overlays.put(p.getPackageName(), new ParsedOverlayInfo(p.getPackageName(), diff --git a/core/java/com/android/internal/content/om/OverlayScanner.java b/core/java/com/android/internal/content/om/OverlayScanner.java index e4e0228a0429..0fafd1063ed1 100644 --- a/core/java/com/android/internal/content/om/OverlayScanner.java +++ b/core/java/com/android/internal/content/om/OverlayScanner.java @@ -16,15 +16,13 @@ package com.android.internal.content.om; -import static android.content.pm.parsing.ParsingPackageUtils.PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY; -import static android.content.pm.parsing.ParsingPackageUtils.checkRequiredSystemProperties; - import static com.android.internal.content.om.OverlayConfig.TAG; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.parsing.ApkLite; import android.content.pm.parsing.ApkLiteParseUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.text.TextUtils; @@ -183,7 +181,8 @@ public class OverlayScanner { List<Pair<String, File>> outExcludedOverlayPackages) { final ParseTypeImpl input = ParseTypeImpl.forParsingWithoutPlatformCompat(); final ParseResult<ApkLite> ret = ApkLiteParseUtils.parseApkLite(input.reset(), - overlayApk, PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY); + overlayApk, + FrameworkParsingPackageUtils.PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY); if (ret.isError()) { Log.w(TAG, "Got exception loading overlay.", ret.getException()); return null; @@ -196,7 +195,8 @@ public class OverlayScanner { final String propName = apkLite.getRequiredSystemPropertyName(); final String propValue = apkLite.getRequiredSystemPropertyValue(); if ((!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) - && !checkRequiredSystemProperties(propName, propValue)) { + && !FrameworkParsingPackageUtils.checkRequiredSystemProperties(propName, + propValue)) { // The overlay package should be excluded. Adds it into the outExcludedOverlayPackages // for overlay configuration parser to ignore it. outExcludedOverlayPackages.add(Pair.create(apkLite.getPackageName(), overlayApk)); diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp index c18a70c5dd2a..c1f3c4fc12c7 100644 --- a/core/tests/coretests/Android.bp +++ b/core/tests/coretests/Android.bp @@ -93,33 +93,9 @@ android_test { java_genrule { name: "FrameworksCoreTests_apks_as_resources", srcs: [ - ":FrameworksCoreTests_install", - ":FrameworksCoreTests_install_bad_dex", - ":FrameworksCoreTests_install_complete_package_info", - ":FrameworksCoreTests_install_decl_perm", ":FrameworksCoreTests_install_jni_lib_open_from_apk", - ":FrameworksCoreTests_install_loc_auto", - ":FrameworksCoreTests_install_loc_internal", - ":FrameworksCoreTests_install_loc_sdcard", - ":FrameworksCoreTests_install_loc_unspecified", - ":FrameworksCoreTests_install_use_perm_good", - ":FrameworksCoreTests_install_uses_feature", ":FrameworksCoreTests_install_verifier_bad", ":FrameworksCoreTests_install_verifier_good", - ":FrameworksCoreTests_keyset_permdef_sa_unone", - ":FrameworksCoreTests_keyset_permuse_sa_ua_ub", - ":FrameworksCoreTests_keyset_permuse_sb_ua_ub", - ":FrameworksCoreTests_keyset_sab_ua", - ":FrameworksCoreTests_keyset_sa_ua", - ":FrameworksCoreTests_keyset_sa_uab", - ":FrameworksCoreTests_keyset_sa_ua_ub", - ":FrameworksCoreTests_keyset_sa_ub", - ":FrameworksCoreTests_keyset_sa_unone", - ":FrameworksCoreTests_keyset_sau_ub", - ":FrameworksCoreTests_keyset_sb_ua", - ":FrameworksCoreTests_keyset_sb_ub", - ":FrameworksCoreTests_keyset_splata_api", - ":FrameworksCoreTests_keyset_splat_api", ":FrameworksCoreTests_locales", ":FrameworksCoreTests_overlay_config", ":FrameworksCoreTests_version_1", @@ -173,4 +149,4 @@ android_library { "framework", "framework-res", ], -} \ No newline at end of file +} diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml index 14a3a01630ab..f2b35c72a567 100644 --- a/core/tests/coretests/AndroidManifest.xml +++ b/core/tests/coretests/AndroidManifest.xml @@ -1670,11 +1670,4 @@ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="com.android.frameworks.coretests" android:label="Frameworks Core Tests" /> - <key-sets> - <key-set android:name="A" > - <public-key android:name="keyA" - android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB"/> - </key-set> - <upgrade-key-set android:name="A"/> - </key-sets> </manifest> diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.bp b/core/tests/coretests/apks/install_loc_sdcard/Android.bp deleted file mode 100644 index 708e655e07db..000000000000 --- a/core/tests/coretests/apks/install_loc_sdcard/Android.bp +++ /dev/null @@ -1,15 +0,0 @@ -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "frameworks_base_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["frameworks_base_license"], -} - -android_test_helper_app { - name: "FrameworksCoreTests_install_loc_sdcard", - defaults: ["FrameworksCoreTests_apks_defaults"], - - srcs: ["**/*.java"], -} diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.bp b/core/tests/coretests/apks/install_loc_unspecified/Android.bp deleted file mode 100644 index 76869e9b9ed5..000000000000 --- a/core/tests/coretests/apks/install_loc_unspecified/Android.bp +++ /dev/null @@ -1,15 +0,0 @@ -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "frameworks_base_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["frameworks_base_license"], -} - -android_test_helper_app { - name: "FrameworksCoreTests_install_loc_unspecified", - defaults: ["FrameworksCoreTests_apks_defaults"], - - srcs: ["**/*.java"], -} diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.bp b/core/tests/coretests/apks/install_use_perm_good/Android.bp deleted file mode 100644 index 89700ddb94be..000000000000 --- a/core/tests/coretests/apks/install_use_perm_good/Android.bp +++ /dev/null @@ -1,15 +0,0 @@ -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "frameworks_base_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["frameworks_base_license"], -} - -android_test_helper_app { - name: "FrameworksCoreTests_install_use_perm_good", - defaults: ["FrameworksCoreTests_apks_defaults"], - - srcs: ["**/*.java"], -} diff --git a/core/tests/coretests/apks/install_uses_feature/Android.bp b/core/tests/coretests/apks/install_uses_feature/Android.bp deleted file mode 100644 index 913a96a1cd27..000000000000 --- a/core/tests/coretests/apks/install_uses_feature/Android.bp +++ /dev/null @@ -1,15 +0,0 @@ -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "frameworks_base_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["frameworks_base_license"], -} - -android_test_helper_app { - name: "FrameworksCoreTests_install_uses_feature", - defaults: ["FrameworksCoreTests_apks_defaults"], - - srcs: ["**/*.java"], -} diff --git a/core/tests/coretests/apks/keyset/Android.bp b/core/tests/coretests/apks/keyset/Android.bp deleted file mode 100644 index 93c3b1f60327..000000000000 --- a/core/tests/coretests/apks/keyset/Android.bp +++ /dev/null @@ -1,129 +0,0 @@ -//apks signed by keyset_A -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "frameworks_base_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["frameworks_base_license"], -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sa_unone", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "uNone/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sa_ua", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "uA/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sa_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "uB/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sa_uab", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "uAB/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sa_ua_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "uAuB/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_permdef_sa_unone", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "permDef/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_permuse_sa_ua_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - manifest: "permUse/AndroidManifest.xml", -} - -//apks signed by keyset_B -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sb_ua", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_B_cert", - manifest: "uA/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sb_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_B_cert", - manifest: "uB/AndroidManifest.xml", -} - -android_test_helper_app { - name: "FrameworksCoreTests_keyset_permuse_sb_ua_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_B_cert", - manifest: "permUse/AndroidManifest.xml", -} - -//apks signed by keyset_A and keyset_B -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sab_ua", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], - manifest: "uA/AndroidManifest.xml", -} - -//apks signed by keyset_A and unit_test -android_test_helper_app { - name: "FrameworksCoreTests_keyset_sau_ub", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: ":FrameworksCoreTests_keyset_A_cert", - additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], - manifest: "uB/AndroidManifest.xml", -} - -//apks signed by platform only -android_test_helper_app { - name: "FrameworksCoreTests_keyset_splat_api", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: "platform", - manifest: "api_test/AndroidManifest.xml", -} - -//apks signed by platform and keyset_A -android_test_helper_app { - name: "FrameworksCoreTests_keyset_splata_api", - defaults: ["FrameworksCoreTests_apks_defaults"], - srcs: ["**/*.java"], - certificate: "platform", - additional_certificates: [":FrameworksCoreTests_keyset_A_cert"], - manifest: "api_test/AndroidManifest.xml", -} diff --git a/core/tests/coretests/certs/Android.bp b/core/tests/coretests/certs/Android.bp index 8411183c3335..8d4ecf4253c3 100644 --- a/core/tests/coretests/certs/Android.bp +++ b/core/tests/coretests/certs/Android.bp @@ -9,16 +9,6 @@ package { default_applicable_licenses: ["frameworks_base_license"], } -android_app_certificate { - name: "FrameworksCoreTests_keyset_A_cert", - certificate: "keyset_A", -} - -android_app_certificate { - name: "FrameworksCoreTests_keyset_B_cert", - certificate: "keyset_B", -} - android_app_certificate { name: "FrameworksCoreTests_unit_test_cert", certificate: "unit_test", diff --git a/core/tests/coretests/src/com/android/internal/content/res/OverlayConfigIterationRule.java b/core/tests/coretests/src/com/android/internal/content/res/OverlayConfigIterationRule.java index 2c31b08bebdc..187803c90084 100644 --- a/core/tests/coretests/src/com/android/internal/content/res/OverlayConfigIterationRule.java +++ b/core/tests/coretests/src/com/android/internal/content/res/OverlayConfigIterationRule.java @@ -20,8 +20,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.when; -import android.content.pm.parsing.ParsingPackageRead; -import android.content.pm.parsing.ParsingPackageUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.os.Build; import android.text.TextUtils; import android.util.ArrayMap; @@ -80,7 +79,7 @@ public class OverlayConfigIterationRule implements TestRule { } public boolean isMatchRequiredSystemProperty() { - return ParsingPackageUtils.checkRequiredSystemProperties( + return FrameworkParsingPackageUtils.checkRequiredSystemProperties( requiredSystemPropertyName, requiredSystemPropertyValue); } } @@ -174,11 +173,12 @@ public class OverlayConfigIterationRule implements TestRule { mIteration = Iteration.SYSTEM_SERVER; doAnswer((InvocationOnMock invocation) -> { final Object[] args = invocation.getArguments(); - final TriConsumer<ParsingPackageRead, Boolean, File> f = - (TriConsumer<ParsingPackageRead, Boolean, File>) args[0]; + final TriConsumer<PackageProvider.Package, Boolean, File> f = + (TriConsumer<PackageProvider.Package, Boolean, File>) args[0]; for (Map.Entry<File, TestOverlayInfo> overlay : mTestOverlayInfos.entrySet()) { - final ParsingPackageRead a = Mockito.mock(ParsingPackageRead.class); + final PackageProvider.Package a = + Mockito.mock(PackageProvider.Package.class); final TestOverlayInfo info = overlay.getValue(); if ((!TextUtils.isEmpty(info.requiredSystemPropertyName) || !TextUtils.isEmpty(info.requiredSystemPropertyValue)) diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 9b2948f42ed8..60cae4d67f5a 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -30,7 +30,6 @@ import android.content.Intent; import android.content.IntentSender; import android.content.pm.SigningDetails.CertCapabilities; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.component.ParsedMainComponent; import android.os.Bundle; import android.os.Handler; import android.os.HandlerExecutor; @@ -50,6 +49,7 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.AndroidPackageApi; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; +import com.android.server.pm.pkg.component.ParsedMainComponent; import com.android.server.pm.pkg.mutate.PackageStateMutator; import java.io.IOException; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e933526b1aa3..ab0879aab29d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -233,11 +233,11 @@ import android.content.pm.ProcessInfo; import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfoList; import android.content.pm.ResolveInfo; -import android.content.pm.SELinuxUtil; +import com.android.server.pm.pkg.SELinuxUtil; import android.content.pm.ServiceInfo; import android.content.pm.TestUtilityService; import android.content.pm.UserInfo; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 3c557d0cc35c..40fda4cbec5e 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -113,7 +113,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.PermissionInfo; import android.content.pm.UserInfo; -import android.content.pm.parsing.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedAttribution; import android.database.ContentObserver; import android.hardware.camera2.CameraDevice.CAMERA_AUDIO_RESTRICTION; import android.net.Uri; diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java index 09780f3f6f40..667698767818 100644 --- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java +++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java @@ -45,7 +45,7 @@ import android.content.pm.ParceledListSlice; import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.SigningInfo; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.net.Uri; diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index 047a70170587..38781fad76fd 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -33,7 +33,7 @@ import android.content.om.CriticalOverlayInfo; import android.content.om.OverlayIdentifier; import android.content.om.OverlayInfo; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.ParsingPackageUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.os.FabricatedOverlayInfo; import android.os.FabricatedOverlayInternal; import android.text.TextUtils; @@ -492,7 +492,7 @@ final class OverlayManagerServiceImpl { Set<PackageAndUser> registerFabricatedOverlay( @NonNull final FabricatedOverlayInternal overlay) throws OperationFailedException { - if (ParsingPackageUtils.validateName(overlay.overlayName, + if (FrameworkParsingPackageUtils.validateName(overlay.overlayName, false /* requireSeparator */, true /* requireFilename */) != null) { throw new OperationFailedException( "overlay name can only consist of alphanumeric characters, '_', and '.'"); diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index c285e2795510..6f10a6bbb9ca 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -32,9 +32,9 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.SigningDetails; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ParsedApexSystemService; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.component.ParsedApexSystemService; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Binder; diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java index 22cd06dfd16b..a66af3cf7603 100644 --- a/services/core/java/com/android/server/pm/AppDataHelper.java +++ b/services/core/java/com/android/server/pm/AppDataHelper.java @@ -24,7 +24,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackageManager; -import android.content.pm.SELinuxUtil; +import com.android.server.pm.pkg.SELinuxUtil; import android.content.pm.UserInfo; import android.os.CreateAppDataArgs; import android.os.Environment; diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java index 6f54625224bf..b916de328038 100644 --- a/services/core/java/com/android/server/pm/AppsFilter.java +++ b/services/core/java/com/android/server/pm/AppsFilter.java @@ -33,11 +33,11 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.SigningDetails; import android.content.pm.UserInfo; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedProvider; import android.os.Binder; import android.os.Process; import android.os.Trace; diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java index 6ec3405727eb..cd4244bf1c50 100644 --- a/services/core/java/com/android/server/pm/ComponentResolver.java +++ b/services/core/java/com/android/server/pm/ComponentResolver.java @@ -36,14 +36,14 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedProviderImpl; -import android.content.pm.parsing.component.ParsedService; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedProviderImpl; +import com.android.server.pm.pkg.component.ParsedService; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArraySet; diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index e37aaa5a9509..2aa0e0174d0d 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -92,14 +92,14 @@ import android.content.pm.SigningDetails; import android.content.pm.SigningInfo; import android.content.pm.UserInfo; import android.content.pm.VersionedPackage; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.PackageUserStateUtils; import android.os.Binder; import android.os.Build; import android.os.IBinder; diff --git a/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java index dfa6c6655c45..9efe81aed24d 100644 --- a/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java +++ b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java @@ -32,7 +32,6 @@ import static com.android.server.pm.PackageManagerService.SYSTEM_PARTITIONS; import static com.android.server.pm.PackageManagerService.TAG; import android.annotation.Nullable; -import android.content.pm.parsing.ParsingPackageUtils; import android.os.Environment; import android.os.SystemClock; import android.os.Trace; @@ -47,6 +46,7 @@ import com.android.server.EventLogTags; import com.android.server.pm.parsing.PackageCacher; import com.android.server.pm.parsing.PackageParser2; import com.android.server.pm.parsing.pkg.AndroidPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.android.server.utils.WatchedArrayMap; import java.io.File; diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index f696b3f7ba17..920903318287 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -112,11 +112,6 @@ import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.VerifierInfo; import android.content.pm.dex.DexMetadataHelper; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.net.Uri; @@ -162,6 +157,11 @@ import com.android.server.pm.parsing.pkg.ParsedPackage; import com.android.server.pm.permission.Permission; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.pm.pkg.PackageStateInternal; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.android.server.rollback.RollbackManagerInternal; import com.android.server.utils.WatchedArrayMap; import com.android.server.utils.WatchedLongSparseArray; diff --git a/services/core/java/com/android/server/pm/KeySetManagerService.java b/services/core/java/com/android/server/pm/KeySetManagerService.java index 1e1d169f4830..db346dabaa2b 100644 --- a/services/core/java/com/android/server/pm/KeySetManagerService.java +++ b/services/core/java/com/android/server/pm/KeySetManagerService.java @@ -17,11 +17,11 @@ package com.android.server.pm; import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK; -import static android.content.pm.parsing.ParsingPackageUtils.parsePublicKey; import static com.android.server.pm.PackageManagerService.SCAN_INITIAL; import android.annotation.NonNull; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Base64; @@ -340,9 +340,10 @@ public class KeySetManagerService { if (p == null || p.getKeySetData() == null) { return null; } - Long keySetId = p.getKeySetData().getAliases().get(alias); + final ArrayMap<String, Long> aliases = p.getKeySetData().getAliases(); + Long keySetId = aliases.get(alias); if (keySetId == null) { - throw new IllegalArgumentException("Unknown KeySet alias: " + alias); + throw new IllegalArgumentException("Unknown KeySet alias: " + alias + ", aliases = " + aliases); } return mKeySets.get(keySetId); } @@ -811,7 +812,7 @@ public class KeySetManagerService { long identifier = parser.getAttributeLong(null, "identifier"); int refCount = 0; byte[] publicKey = parser.getAttributeBytesBase64(null, "value", null); - PublicKey pub = parsePublicKey(publicKey); + PublicKey pub = FrameworkParsingPackageUtils.parsePublicKey(publicKey); if (pub != null) { PublicKeyHandle pkh = new PublicKeyHandle(identifier, refCount, pub); mPublicKeys.put(identifier, pkh); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index c8133174b6db..00483b63a759 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -91,7 +91,7 @@ import android.content.pm.dex.DexMetadataHelper; import android.content.pm.parsing.ApkLite; import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.graphics.Bitmap; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 248944e476ad..13f91e0dca62 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -130,9 +130,6 @@ import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VersionedPackage; import android.content.pm.dex.IArtManager; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedMainComponent; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; @@ -239,9 +236,11 @@ import com.android.server.pm.pkg.PackageStateUtils; import com.android.server.pm.pkg.PackageUserState; import com.android.server.pm.pkg.PackageUserStateInternal; import com.android.server.pm.pkg.SuspendParams; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedMainComponent; import com.android.server.pm.pkg.mutate.PackageStateMutator; import com.android.server.pm.pkg.mutate.PackageStateWrite; -import com.android.server.pm.pkg.mutate.PackageUserStateWrite; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; import com.android.server.pm.verify.domain.DomainVerificationService; import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy; diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index 898f67345031..d8f0cc340884 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -51,7 +51,7 @@ import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; -import android.content.pm.parsing.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedMainComponent; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Binder; diff --git a/services/core/java/com/android/server/pm/PackageProperty.java b/services/core/java/com/android/server/pm/PackageProperty.java index ee9ed3b90599..2055537b4cc8 100644 --- a/services/core/java/com/android/server/pm/PackageProperty.java +++ b/services/core/java/com/android/server/pm/PackageProperty.java @@ -27,7 +27,7 @@ import android.annotation.Nullable; import android.content.pm.PackageManager; import android.content.pm.PackageManager.Property; import android.content.pm.PackageManager.PropertyLocation; -import android.content.pm.parsing.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedComponent; import android.os.Binder; import android.os.UserHandle; import android.util.ArrayMap; diff --git a/services/core/java/com/android/server/pm/PackageSessionVerifier.java b/services/core/java/com/android/server/pm/PackageSessionVerifier.java index ccabce719402..9bfb7d19eee1 100644 --- a/services/core/java/com/android/server/pm/PackageSessionVerifier.java +++ b/services/core/java/com/android/server/pm/PackageSessionVerifier.java @@ -28,7 +28,7 @@ import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.SigningDetails; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.content.rollback.RollbackInfo; diff --git a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java index 67f6b123d99b..f3d88edf40dd 100644 --- a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java +++ b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java @@ -28,7 +28,7 @@ import android.content.pm.PackageManager; import android.content.pm.SharedLibraryInfo; import android.content.pm.Signature; import android.content.pm.SigningDetails; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.os.SystemProperties; import android.util.ArrayMap; import android.util.Log; diff --git a/services/core/java/com/android/server/pm/RemovePackageHelper.java b/services/core/java/com/android/server/pm/RemovePackageHelper.java index d60d01971534..b0e03403b653 100644 --- a/services/core/java/com/android/server/pm/RemovePackageHelper.java +++ b/services/core/java/com/android/server/pm/RemovePackageHelper.java @@ -29,7 +29,7 @@ import static com.android.server.pm.PackageManagerService.TAG; import android.annotation.NonNull; import android.content.pm.PackageManager; -import android.content.pm.parsing.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedInstrumentation; import android.os.UserHandle; import android.os.incremental.IncrementalManager; import android.util.Log; diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java index 6d2ec0da896a..79ab563e4e6e 100644 --- a/services/core/java/com/android/server/pm/ScanPackageUtils.java +++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java @@ -52,13 +52,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.SharedLibraryInfo; import android.content.pm.SigningDetails; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Build; @@ -85,6 +78,13 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.ParsedPackage; import com.android.server.pm.pkg.PackageStateUtils; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import dalvik.system.VMRuntime; diff --git a/services/core/java/com/android/server/pm/ScanRequest.java b/services/core/java/com/android/server/pm/ScanRequest.java index 482b79cf8378..34abdb108068 100644 --- a/services/core/java/com/android/server/pm/ScanRequest.java +++ b/services/core/java/com/android/server/pm/ScanRequest.java @@ -18,12 +18,12 @@ package com.android.server.pm; import android.annotation.NonNull; import android.annotation.Nullable; -import android.content.pm.parsing.ParsingPackageUtils; import android.os.UserHandle; import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.ParsedPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; /** A package to be scanned */ @VisibleForTesting diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 7085682662e6..4583771794ba 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -50,13 +50,13 @@ import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.PackageUserStateUtils; import android.net.Uri; import android.os.Binder; import android.os.Build; diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java index 9df0edb211f1..bc484618bb25 100644 --- a/services/core/java/com/android/server/pm/SharedUserSetting.java +++ b/services/core/java/com/android/server/pm/SharedUserSetting.java @@ -18,9 +18,9 @@ package com.android.server.pm; import android.annotation.NonNull; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProcessImpl; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProcessImpl; import android.service.pm.PackageServiceDumpProto; import android.util.ArrayMap; import android.util.ArraySet; diff --git a/services/core/java/com/android/server/pm/StorageEventHelper.java b/services/core/java/com/android/server/pm/StorageEventHelper.java index 1433abd1b6c9..bb7e55a4bf40 100644 --- a/services/core/java/com/android/server/pm/StorageEventHelper.java +++ b/services/core/java/com/android/server/pm/StorageEventHelper.java @@ -32,7 +32,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackagePartitions; import android.content.pm.UserInfo; import android.content.pm.VersionedPackage; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.os.Environment; import android.os.FileUtils; import android.os.UserHandle; diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java index 01bf63483829..e28a6ea8ea6b 100644 --- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java +++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java @@ -31,7 +31,7 @@ import android.content.pm.dex.ArtManagerInternal; import android.content.pm.dex.DexMetadataHelper; import android.content.pm.dex.ISnapshotRuntimeProfileCallback; import android.content.pm.dex.PackageOptimizationInfo; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; import android.os.Binder; import android.os.Build; import android.os.Handler; diff --git a/services/core/java/com/android/server/pm/dex/ViewCompiler.java b/services/core/java/com/android/server/pm/dex/ViewCompiler.java index 8afe62aabd59..61aedd8bd1cf 100644 --- a/services/core/java/com/android/server/pm/dex/ViewCompiler.java +++ b/services/core/java/com/android/server/pm/dex/ViewCompiler.java @@ -16,7 +16,7 @@ package com.android.server.pm.dex; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; import android.os.Binder; import android.os.UserHandle; import android.util.Log; diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java index 07cc3d0e42af..0fa0dc39b8bd 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -34,19 +34,19 @@ import android.content.pm.ProcessInfo; import android.content.pm.ProviderInfo; import android.content.pm.ServiceInfo; import android.content.pm.SharedLibraryInfo; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.ParsingUtils; -import android.content.pm.parsing.component.ComponentParseUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; +import com.android.server.pm.pkg.component.ComponentParseUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.PackageUserStateUtils; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArraySet; diff --git a/services/core/java/com/android/server/pm/parsing/PackageParser2.java b/services/core/java/com/android/server/pm/parsing/PackageParser2.java index f467a7f2023f..08e2f7da1ebf 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageParser2.java +++ b/services/core/java/com/android/server/pm/parsing/PackageParser2.java @@ -22,9 +22,9 @@ import android.annotation.Nullable; import android.app.ActivityThread; import android.content.Context; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; diff --git a/services/core/java/com/android/server/pm/parsing/ParsedComponentStateUtils.java b/services/core/java/com/android/server/pm/parsing/ParsedComponentStateUtils.java index 3a4921644175..564585b4cbe9 100644 --- a/services/core/java/com/android/server/pm/parsing/ParsedComponentStateUtils.java +++ b/services/core/java/com/android/server/pm/parsing/ParsedComponentStateUtils.java @@ -18,10 +18,9 @@ package com.android.server.pm.parsing; import android.annotation.NonNull; import android.annotation.Nullable; -import android.content.pm.parsing.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedComponent; import android.util.Pair; -import com.android.server.pm.PackageSetting; import com.android.server.pm.pkg.PackageStateInternal; /** diff --git a/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java b/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java index bbf584df0405..dc3bf781034c 100644 --- a/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java +++ b/services/core/java/com/android/server/pm/parsing/library/PackageBackwardCompatibility.java @@ -21,7 +21,7 @@ import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_T import static com.android.server.pm.parsing.library.SharedLibraryNames.ANDROID_TEST_RUNNER; import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY; -import android.content.pm.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackage; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java index bf7d897ac3e6..b357ba0a6b4b 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java @@ -17,7 +17,9 @@ package com.android.server.pm.parsing.pkg; import android.annotation.NonNull; -import android.content.pm.parsing.ParsingPackageRead; + +import com.android.internal.content.om.OverlayConfig; +import com.android.server.pm.pkg.parsing.ParsingPackageRead; import com.android.server.pm.pkg.AndroidPackageApi; @@ -31,8 +33,8 @@ import com.android.server.pm.pkg.AndroidPackageApi; * * @hide */ -public interface AndroidPackage extends ParsingPackageRead, AndroidPackageApi { - +public interface AndroidPackage extends ParsingPackageRead, AndroidPackageApi, + OverlayConfig.PackageProvider.Package { /** * The package name as declared in the manifest, since the package can be renamed. For example, diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java index 8b2c3a12eda7..7e59bd669824 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java @@ -23,12 +23,12 @@ import android.content.pm.PackageManager; import android.content.pm.SharedLibraryInfo; import android.content.pm.VersionedPackage; import android.content.pm.dex.DexMetadataHelper; -import android.content.pm.parsing.ParsingPackageRead; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; +import com.android.server.pm.pkg.parsing.ParsingPackageRead; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.incremental.IncrementalManager; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java index 6846ac5cbb0a..193e1a22d787 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java @@ -22,14 +22,8 @@ import android.annotation.Nullable; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; -import android.content.pm.SELinuxUtil; +import com.android.server.pm.pkg.SELinuxUtil; import android.content.pm.SigningDetails; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageImpl; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; import android.content.res.TypedArray; import android.os.Environment; import android.os.Parcel; @@ -41,6 +35,12 @@ import com.android.internal.util.CollectionUtils; import com.android.internal.util.DataClass; import com.android.internal.util.Parcelling.BuiltIn.ForInternedString; import com.android.server.pm.parsing.PackageInfoUtils; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageImpl; import java.io.File; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java index a13f2975da8d..6ddae9bf4f8f 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java @@ -18,7 +18,7 @@ package com.android.server.pm.parsing.pkg; import android.annotation.Nullable; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.PkgWithoutStateAppInfo; +import com.android.server.pm.pkg.parsing.PkgWithoutStateAppInfo; import com.android.server.pm.PackageManagerService; import com.android.server.pm.pkg.PackageState; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java index e2efbe1482c3..da7f1dc0f47e 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java @@ -17,7 +17,7 @@ package com.android.server.pm.parsing.pkg; import android.content.pm.PackageInfo; -import android.content.pm.parsing.PkgWithoutStatePackageInfo; +import com.android.server.pm.pkg.parsing.PkgWithoutStatePackageInfo; import com.android.server.pm.PackageManagerService; diff --git a/core/java/android/content/pm/permission/CompatibilityPermissionInfo.java b/services/core/java/com/android/server/pm/permission/CompatibilityPermissionInfo.java similarity index 96% rename from core/java/android/content/pm/permission/CompatibilityPermissionInfo.java rename to services/core/java/com/android/server/pm/permission/CompatibilityPermissionInfo.java index b70353a4023c..d9625050d28c 100644 --- a/core/java/android/content/pm/permission/CompatibilityPermissionInfo.java +++ b/services/core/java/com/android/server/pm/permission/CompatibilityPermissionInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,10 @@ * limitations under the License. */ -package android.content.pm.permission; +package com.android.server.pm.permission; import android.Manifest; import android.annotation.NonNull; -import android.content.pm.parsing.component.ParsedUsesPermission; import com.android.internal.util.DataClass; diff --git a/services/core/java/com/android/server/pm/permission/Permission.java b/services/core/java/com/android/server/pm/permission/Permission.java index 041c4fea587e..d5456e3c8dc3 100644 --- a/services/core/java/com/android/server/pm/permission/Permission.java +++ b/services/core/java/com/android/server/pm/permission/Permission.java @@ -23,7 +23,7 @@ import android.annotation.UserIdInt; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.PermissionInfo; -import android.content.pm.parsing.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermission; import android.os.Build; import android.os.UserHandle; import android.util.Log; diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java index 7833c4341a94..981fd8e9e789 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java @@ -73,11 +73,11 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.SigningDetails; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedPermissionUtils; -import android.content.pm.permission.CompatibilityPermissionInfo; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedPermissionUtils; + import android.content.pm.permission.SplitPermissionInfoParcelable; import android.metrics.LogMaker; import android.os.AsyncTask; diff --git a/services/core/java/com/android/server/pm/permission/PermissionRegistry.java b/services/core/java/com/android/server/pm/permission/PermissionRegistry.java index 0e3fda7b937a..3a617041d55e 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionRegistry.java +++ b/services/core/java/com/android/server/pm/permission/PermissionRegistry.java @@ -18,7 +18,7 @@ package com.android.server.pm.permission; import android.annotation.NonNull; import android.annotation.Nullable; -import android.content.pm.parsing.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; import android.util.ArrayMap; import android.util.ArraySet; diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java b/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java index 6c8e0b72198d..656c445a0ed5 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java @@ -20,8 +20,8 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.component.ParsedMainComponent; + import android.util.SparseArray; import com.android.server.pm.parsing.pkg.AndroidPackage; diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserState.java b/services/core/java/com/android/server/pm/pkg/PackageUserState.java index 03b16929bed8..d47c5eca18ea 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageUserState.java +++ b/services/core/java/com/android/server/pm/pkg/PackageUserState.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackageManager; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.pkg.FrameworkPackageUserState; import android.os.UserHandle; import java.util.Map; @@ -34,7 +33,7 @@ import java.util.Set; */ // TODO(b/173807334): Expose API //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) -public interface PackageUserState extends FrameworkPackageUserState { +public interface PackageUserState { PackageUserState DEFAULT = PackageUserStateInternal.DEFAULT; diff --git a/core/java/android/content/pm/pkg/PackageUserStateUtils.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateUtils.java similarity index 87% rename from core/java/android/content/pm/pkg/PackageUserStateUtils.java rename to services/core/java/com/android/server/pm/pkg/PackageUserStateUtils.java index 468bff1b53ec..917c4af017d2 100644 --- a/core/java/android/content/pm/pkg/PackageUserStateUtils.java +++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.pkg; +package com.android.server.pm.pkg; import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS; import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS; @@ -22,26 +22,27 @@ import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPON import android.annotation.NonNull; import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; -import android.content.pm.parsing.ParsingPackageRead; -import android.content.pm.parsing.component.ParsedMainComponent; import android.os.Debug; import android.util.DebugUtils; import android.util.Slog; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.parsing.ParsingPackageRead; + /** @hide */ public class PackageUserStateUtils { private static final boolean DEBUG = false; private static final String TAG = "PackageUserStateUtils"; - public static boolean isMatch(@NonNull FrameworkPackageUserState state, + public static boolean isMatch(@NonNull PackageUserState state, ComponentInfo componentInfo, long flags) { return isMatch(state, componentInfo.applicationInfo.isSystemApp(), componentInfo.applicationInfo.enabled, componentInfo.enabled, componentInfo.directBootAware, componentInfo.name, flags); } - public static boolean isMatch(@NonNull FrameworkPackageUserState state, boolean isSystem, + public static boolean isMatch(@NonNull PackageUserState state, boolean isSystem, boolean isPackageEnabled, ParsedMainComponent component, long flags) { return isMatch(state, isSystem, isPackageEnabled, component.isEnabled(), component.isDirectBootAware(), component.getName(), flags); @@ -56,7 +57,7 @@ public class PackageUserStateUtils { * PackageManager#MATCH_DIRECT_BOOT_UNAWARE} are specified in {@code flags}. * </p> */ - public static boolean isMatch(@NonNull FrameworkPackageUserState state, boolean isSystem, + public static boolean isMatch(@NonNull PackageUserState state, boolean isSystem, boolean isPackageEnabled, boolean isComponentEnabled, boolean isComponentDirectBootAware, String componentName, long flags) { final boolean matchUninstalled = (flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0; @@ -81,7 +82,7 @@ public class PackageUserStateUtils { return reportIfDebug(matchesUnaware || matchesAware, flags); } - public static boolean isAvailable(@NonNull FrameworkPackageUserState state, long flags) { + public static boolean isAvailable(@NonNull PackageUserState state, long flags) { // True if it is installed for this user and it is not hidden. If it is hidden, // still return true if the caller requested MATCH_UNINSTALLED_PACKAGES final boolean matchAnyUser = (flags & PackageManager.MATCH_ANY_USER) != 0; @@ -100,13 +101,13 @@ public class PackageUserStateUtils { return result; } - public static boolean isEnabled(@NonNull FrameworkPackageUserState state, ComponentInfo componentInfo, + public static boolean isEnabled(@NonNull PackageUserState state, ComponentInfo componentInfo, long flags) { return isEnabled(state, componentInfo.applicationInfo.enabled, componentInfo.enabled, componentInfo.name, flags); } - public static boolean isEnabled(@NonNull FrameworkPackageUserState state, boolean isPackageEnabled, + public static boolean isEnabled(@NonNull PackageUserState state, boolean isPackageEnabled, ParsedMainComponent parsedComponent, long flags) { return isEnabled(state, isPackageEnabled, parsedComponent.isEnabled(), parsedComponent.getName(), flags); @@ -115,7 +116,7 @@ public class PackageUserStateUtils { /** * Test if the given component is considered enabled. */ - public static boolean isEnabled(@NonNull FrameworkPackageUserState state, + public static boolean isEnabled(@NonNull PackageUserState state, boolean isPackageEnabled, boolean isComponentEnabled, String componentName, long flags) { if ((flags & MATCH_DISABLED_COMPONENTS) != 0) { @@ -153,7 +154,7 @@ public class PackageUserStateUtils { return isComponentEnabled; } - public static boolean isPackageEnabled(@NonNull FrameworkPackageUserState state, + public static boolean isPackageEnabled(@NonNull PackageUserState state, @NonNull ParsingPackageRead pkg) { switch (state.getEnabledState()) { case PackageManager.COMPONENT_ENABLED_STATE_ENABLED: diff --git a/core/java/android/content/pm/SELinuxUtil.java b/services/core/java/com/android/server/pm/pkg/SELinuxUtil.java similarity index 83% rename from core/java/android/content/pm/SELinuxUtil.java rename to services/core/java/com/android/server/pm/pkg/SELinuxUtil.java index 898dddf45d04..6cbc1de75010 100644 --- a/core/java/android/content/pm/SELinuxUtil.java +++ b/services/core/java/com/android/server/pm/pkg/SELinuxUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,7 @@ * limitations under the License. */ -package android.content.pm; - -import android.content.pm.pkg.FrameworkPackageUserState; +package com.android.server.pm.pkg; /** * Utility methods that need to be used in application space. @@ -31,7 +29,7 @@ public final class SELinuxUtil { public static final String COMPLETE_STR = ":complete"; /** @hide */ - public static String getSeinfoUser(FrameworkPackageUserState userState) { + public static String getSeinfoUser(PackageUserState userState) { if (userState.isInstantApp()) { return INSTANT_APP_STR + COMPLETE_STR; } diff --git a/core/java/android/content/pm/parsing/component/ComponentMutateUtils.java b/services/core/java/com/android/server/pm/pkg/component/ComponentMutateUtils.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ComponentMutateUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ComponentMutateUtils.java index 73d0b9fd8504..1deb8d055e20 100644 --- a/core/java/android/content/pm/parsing/component/ComponentMutateUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ComponentMutateUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ComponentParseUtils.java b/services/core/java/com/android/server/pm/pkg/component/ComponentParseUtils.java similarity index 88% rename from core/java/android/content/pm/parsing/component/ComponentParseUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ComponentParseUtils.java index 0334601a0a06..a8fb79a52837 100644 --- a/core/java/android/content/pm/parsing/component/ComponentParseUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ComponentParseUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,27 +14,27 @@ * limitations under the License. */ -package android.content.pm.parsing.component; - -import static android.content.pm.parsing.ParsingPackageUtils.validateName; +package com.android.server.pm.pkg.component; import android.annotation.AttrRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; -import android.content.pm.pkg.FrameworkPackageUserState; -import android.content.pm.pkg.PackageUserStateUtils; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.text.TextUtils; +import com.android.server.pm.pkg.PackageUserState; +import com.android.server.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -125,7 +125,8 @@ public class ComponentParseUtils { + ": must be at least two characters"); } String subName = proc.substring(1); - final ParseResult<?> nameResult = validateName(input, subName, false, false); + final ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, + subName, false, false); if (nameResult.isError()) { return input.error("Invalid " + type + " name " + proc + " in package " + pkg + ": " + nameResult.getErrorMessage()); @@ -133,7 +134,8 @@ public class ComponentParseUtils { return input.success(pkg + proc); } if (!"system".equals(proc)) { - final ParseResult<?> nameResult = validateName(input, proc, true, false); + final ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, proc, + true, false); if (nameResult.isError()) { return input.error("Invalid " + type + " name " + proc + " in package " + pkg + ": " + nameResult.getErrorMessage()); @@ -169,13 +171,13 @@ public class ComponentParseUtils { return component.getIcon(); } - public static boolean isMatch(FrameworkPackageUserState state, boolean isSystem, + public static boolean isMatch(PackageUserState state, boolean isSystem, boolean isPackageEnabled, ParsedMainComponent component, long flags) { return PackageUserStateUtils.isMatch(state, isSystem, isPackageEnabled, component.isEnabled(), component.isDirectBootAware(), component.getName(), flags); } - public static boolean isEnabled(FrameworkPackageUserState state, boolean isPackageEnabled, + public static boolean isEnabled(PackageUserState state, boolean isPackageEnabled, ParsedMainComponent parsedComponent, long flags) { return PackageUserStateUtils.isEnabled(state, isPackageEnabled, parsedComponent.isEnabled(), parsedComponent.getName(), flags); diff --git a/core/java/android/content/pm/parsing/component/ParsedActivity.java b/services/core/java/com/android/server/pm/pkg/component/ParsedActivity.java similarity index 95% rename from core/java/android/content/pm/parsing/component/ParsedActivity.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedActivity.java index a661b51dbf81..6d978c40454d 100644 --- a/core/java/android/content/pm/parsing/component/ParsedActivity.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedActivity.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedActivityImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedActivityImpl.java similarity index 99% rename from core/java/android/content/pm/parsing/component/ParsedActivityImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedActivityImpl.java index 93dc5a4ce317..ff97c13a998b 100644 --- a/core/java/android/content/pm/parsing/component/ParsedActivityImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedActivityImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,13 +14,13 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE; import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED; import android.annotation.NonNull; @@ -29,7 +29,7 @@ import android.app.ActivityTaskManager; import android.content.ComponentName; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; diff --git a/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedActivityUtils.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedActivityUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedActivityUtils.java index 2ddf923d7dd9..db8815e6555c 100644 --- a/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedActivityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE_PER_TASK; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; -import static android.content.pm.parsing.component.ComponentParseUtils.flag; +import static com.android.server.pm.pkg.parsing.ParsingUtils.NOT_SET; +import static com.android.server.pm.pkg.component.ComponentParseUtils.flag; import android.annotation.NonNull; import android.annotation.Nullable; @@ -27,9 +27,9 @@ import android.app.ActivityTaskManager; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseInput.DeferredError; import android.content.pm.parsing.result.ParseResult; @@ -58,7 +58,9 @@ import java.util.List; import java.util.Objects; import java.util.Set; -/** @hide */ +/** + * @hide + */ public class ParsedActivityUtils { private static final String TAG = ParsingUtils.TAG; @@ -601,7 +603,7 @@ public class ParsedActivityUtils { * AndroidManifest.xml. * @hide */ - static int getActivityConfigChanges(int configChanges, int recreateOnConfigChanges) { + public static int getActivityConfigChanges(int configChanges, int recreateOnConfigChanges) { return configChanges | ((~recreateOnConfigChanges) & RECREATE_ON_CONFIG_CHANGES_MASK); } } diff --git a/core/java/android/content/pm/parsing/component/ParsedApexSystemService.java b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemService.java similarity index 95% rename from core/java/android/content/pm/parsing/component/ParsedApexSystemService.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemService.java index fe821e04958f..7690818bf4f1 100644 --- a/core/java/android/content/pm/parsing/component/ParsedApexSystemService.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedApexSystemServiceImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceImpl.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedApexSystemServiceImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceImpl.java index 54196fddb1fb..8c4d8f0e8da4 100644 --- a/core/java/android/content/pm/parsing/component/ParsedApexSystemServiceImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; diff --git a/core/java/android/content/pm/parsing/component/ParsedApexSystemServiceUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceUtils.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedApexSystemServiceUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceUtils.java index 26abf48ee391..38a6f5a356e7 100644 --- a/core/java/android/content/pm/parsing/component/ParsedApexSystemServiceUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedApexSystemServiceUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.R; import android.annotation.NonNull; diff --git a/core/java/android/content/pm/parsing/component/ParsedAttribution.java b/services/core/java/com/android/server/pm/pkg/component/ParsedAttribution.java similarity index 86% rename from core/java/android/content/pm/parsing/component/ParsedAttribution.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedAttribution.java index ac7a9284d89b..3b91f289fe4c 100644 --- a/core/java/android/content/pm/parsing/component/ParsedAttribution.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedAttribution.java @@ -14,18 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.StringRes; -import android.os.Parcel; import android.os.Parcelable; -import android.util.ArraySet; -import com.android.internal.util.DataClass; - -import java.util.ArrayList; import java.util.List; /** diff --git a/core/java/android/content/pm/parsing/component/ParsedAttributionImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedAttributionImpl.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedAttributionImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedAttributionImpl.java index 510425fd8584..a4eb4f19c8b5 100644 --- a/core/java/android/content/pm/parsing/component/ParsedAttributionImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedAttributionImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.StringRes; import android.os.Parcel; import android.os.Parcelable; -import android.util.ArraySet; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DataClass; diff --git a/core/java/android/content/pm/parsing/component/ParsedAttributionUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedAttributionUtils.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedAttributionUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedAttributionUtils.java index 84f1d44b2a84..98e94c5214f0 100644 --- a/core/java/android/content/pm/parsing/component/ParsedAttributionUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedAttributionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedComponent.java b/services/core/java/com/android/server/pm/pkg/component/ParsedComponent.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedComponent.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedComponent.java index c1372f6234ad..1a8230dcfb86 100644 --- a/core/java/android/content/pm/parsing/component/ParsedComponent.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedComponent.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedComponentImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedComponentImpl.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedComponentImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedComponentImpl.java index 1c46a107d118..9125e8c0f3f2 100644 --- a/core/java/android/content/pm/parsing/component/ParsedComponentImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedComponentImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import static java.util.Collections.emptyMap; @@ -25,7 +25,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.content.pm.PackageManager.Property; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.os.Bundle; import android.os.Parcel; import android.text.TextUtils; diff --git a/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedComponentUtils.java similarity index 93% rename from core/java/android/content/pm/parsing/component/ParsedComponentUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedComponentUtils.java index 5c33cfd5192d..e208854f2637 100644 --- a/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedComponentUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,16 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; +import static com.android.server.pm.pkg.parsing.ParsingUtils.NOT_SET; import android.annotation.NonNull; import android.content.pm.PackageManager; import android.content.pm.PackageManager.Property; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentation.java similarity index 89% rename from core/java/android/content/pm/parsing/component/ParsedInstrumentation.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentation.java index e8fcc00a05bc..a0eae8c4c8ff 100644 --- a/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentation.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentationImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationImpl.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedInstrumentationImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationImpl.java index d2b536893012..c8baa9e1b504 100644 --- a/core/java/android/content/pm/parsing/component/ParsedInstrumentationImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationUtils.java similarity index 93% rename from core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationUtils.java index df5e73e26f17..51e14280ffe4 100644 --- a/core/java/android/content/pm/parsing/component/ParsedInstrumentationUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedInstrumentationUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; +import static com.android.server.pm.pkg.parsing.ParsingUtils.NOT_SET; import android.annotation.NonNull; -import android.content.pm.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackage; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfo.java similarity index 80% rename from core/java/android/content/pm/parsing/component/ParsedIntentInfo.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfo.java index 1e36cccae45f..57b486abdfd7 100644 --- a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfo.java @@ -14,20 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; -import android.os.Parcel; import android.os.Parcelable; -import android.util.Pair; - -import com.android.internal.util.DataClass; -import com.android.internal.util.Parcelling; - -import java.util.ArrayList; -import java.util.List; /** @hide **/ public interface ParsedIntentInfo extends Parcelable { diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfoImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoImpl.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedIntentInfoImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoImpl.java index 9ff7a167c093..1c816da34019 100644 --- a/core/java/android/content/pm/parsing/component/ParsedIntentInfoImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,23 +14,20 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; import android.os.Parcel; import android.os.Parcelable; -import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DataClass; -import com.android.internal.util.Parcelling; -import java.util.ArrayList; -import java.util.List; - -/** @hide **/ +/** + * @hide + **/ @DataClass(genGetters = true, genSetters = true, genParcelable = true, genAidl = false, genBuilder = false, genConstructor = false) @DataClass.Suppress({"setIntentFilter"}) diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoUtils.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoUtils.java index cb72c2b11189..1e6f6306258c 100644 --- a/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedIntentInfoUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,16 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingUtils.ANDROID_RES_NAMESPACE; +import static com.android.server.pm.pkg.parsing.ParsingUtils.ANDROID_RES_NAMESPACE; import android.annotation.NonNull; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponent.java b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponent.java similarity index 91% rename from core/java/android/content/pm/parsing/component/ParsedMainComponent.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedMainComponent.java index 2507205df257..8c1d6c8ebaf8 100644 --- a/core/java/android/content/pm/parsing/component/ParsedMainComponent.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponentImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentImpl.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedMainComponentImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentImpl.java index 6051435bf8f9..9b57f4830671 100644 --- a/core/java/android/content/pm/parsing/component/ParsedMainComponentImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import android.annotation.Nullable; import android.os.Parcel; diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentUtils.java similarity index 95% rename from core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentUtils.java index 87f75b06f9fd..2a3e6534c1e2 100644 --- a/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedMainComponentUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,15 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; +import static com.android.server.pm.pkg.parsing.ParsingUtils.NOT_SET; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Configuration; diff --git a/core/java/android/content/pm/parsing/component/ParsedPermission.java b/services/core/java/com/android/server/pm/pkg/component/ParsedPermission.java similarity index 90% rename from core/java/android/content/pm/parsing/component/ParsedPermission.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedPermission.java index 6acdb6e872ae..4a6d2c3ac80d 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermission.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroup.java similarity index 89% rename from core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroup.java index 22aa0854f2a3..73b5ffaa298d 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermissionGroup.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroup.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; /** @hide */ public interface ParsedPermissionGroup extends ParsedComponent { diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionGroupImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroupImpl.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedPermissionGroupImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroupImpl.java index 1fa04cfd065c..f47fb75e9d92 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermissionGroupImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionGroupImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.os.Parcel; diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionImpl.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedPermissionImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedPermissionImpl.java index 2145e441553a..98007ff94972 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermissionImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.annotation.Nullable; @@ -109,14 +109,13 @@ public class ParsedPermissionImpl extends ParsedComponentImpl implements ParsedP protected ParsedPermissionImpl(Parcel in) { super(in); - // We use the boot classloader for all classes that we load. - final ClassLoader boot = Object.class.getClassLoader(); this.backgroundPermission = in.readString(); this.group = TextUtils.safeIntern(in.readString()); this.requestRes = in.readInt(); this.protectionLevel = in.readInt(); this.tree = in.readBoolean(); - this.parsedPermissionGroup = in.readParcelable(boot); + this.parsedPermissionGroup = in.readParcelable(ParsedPermissionGroup.class.getClassLoader(), + ParsedPermissionGroup.class); this.knownCerts = sForStringSet.unparcel(in); } diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionUtils.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedPermissionUtils.java index 86c8f02f9fd9..8562fdfe2571 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedPermissionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,14 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingUtils.NOT_SET; +import static com.android.server.pm.pkg.parsing.ParsingUtils.NOT_SET; import android.annotation.NonNull; import android.content.pm.PermissionInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedProcess.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProcess.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedProcess.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProcess.java index 27a540d25891..ff391ff97fcc 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcess.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProcess.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.content.pm.ApplicationInfo; diff --git a/core/java/android/content/pm/parsing/component/ParsedProcessImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProcessImpl.java similarity index 99% rename from core/java/android/content/pm/parsing/component/ParsedProcessImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProcessImpl.java index d404ecfd38c7..96560c7d66ae 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcessImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProcessImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import static java.util.Collections.emptySet; diff --git a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProcessUtils.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedProcessUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProcessUtils.java index 5e4cf661b194..d03f15338f7e 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProcessUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,12 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedProvider.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java similarity index 92% rename from core/java/android/content/pm/parsing/component/ParsedProvider.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java index 1211ce274aea..8cc6fc745efb 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProvider.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.Nullable; import android.content.pm.PathPermission; diff --git a/core/java/android/content/pm/parsing/component/ParsedProviderImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProviderImpl.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedProviderImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProviderImpl.java index 774c3fca1cf0..e04fc868e350 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProviderImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProviderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProviderUtils.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedProviderUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedProviderUtils.java index de9dd44b3b8f..9d3129be4e78 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProviderUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,18 +14,18 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageUtils.RIGID_PARSER; -import static android.content.pm.parsing.component.ComponentParseUtils.flag; +import static com.android.server.pm.pkg.parsing.ParsingPackageUtils.RIGID_PARSER; +import static com.android.server.pm.pkg.component.ComponentParseUtils.flag; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; import android.content.pm.PathPermission; import android.content.pm.ProviderInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; diff --git a/core/java/android/content/pm/parsing/component/ParsedService.java b/services/core/java/com/android/server/pm/pkg/component/ParsedService.java similarity index 88% rename from core/java/android/content/pm/parsing/component/ParsedService.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedService.java index 6736afaa8714..11696be89367 100644 --- a/core/java/android/content/pm/parsing/component/ParsedService.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedServiceImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedServiceImpl.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedServiceImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedServiceImpl.java index a85fb5cfcf46..0171c49f1bef 100644 --- a/core/java/android/content/pm/parsing/component/ParsedServiceImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import static com.android.server.pm.pkg.parsing.ParsingPackageImpl.sForInternedString; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java b/services/core/java/com/android/server/pm/pkg/component/ParsedServiceUtils.java similarity index 96% rename from core/java/android/content/pm/parsing/component/ParsedServiceUtils.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedServiceUtils.java index d27a0ed81a0a..6fe9411a7fb9 100644 --- a/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedServiceUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,17 +14,17 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; -import static android.content.pm.parsing.component.ComponentParseUtils.flag; +import static com.android.server.pm.pkg.component.ComponentParseUtils.flag; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ServiceInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseInput.DeferredError; import android.content.pm.parsing.result.ParseResult; diff --git a/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java b/services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermission.java similarity index 97% rename from core/java/android/content/pm/parsing/component/ParsedUsesPermission.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermission.java index e2f5f14ab725..8e3401ed29bd 100644 --- a/core/java/android/content/pm/parsing/component/ParsedUsesPermission.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermission.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.IntDef; import android.annotation.NonNull; diff --git a/core/java/android/content/pm/parsing/component/ParsedUsesPermissionImpl.java b/services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermissionImpl.java similarity index 98% rename from core/java/android/content/pm/parsing/component/ParsedUsesPermissionImpl.java rename to services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermissionImpl.java index d3c7afbb2012..70d6f24aa81b 100644 --- a/core/java/android/content/pm/parsing/component/ParsedUsesPermissionImpl.java +++ b/services/core/java/com/android/server/pm/pkg/component/ParsedUsesPermissionImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing.component; +package com.android.server.pm.pkg.component; import android.annotation.NonNull; import android.os.Parcel; diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils.java similarity index 94% rename from core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java rename to services/core/java/com/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils.java index 28290d75cdfa..2d6c616d7f76 100644 --- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.CheckResult; import android.annotation.NonNull; @@ -35,29 +35,29 @@ import android.content.pm.PackageManager; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; -import android.content.pm.SELinuxUtil; import android.content.pm.ServiceInfo; import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.SigningInfo; import android.content.pm.overlay.OverlayPaths; -import android.content.pm.parsing.component.ComponentParseUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedAttribution; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.parsing.component.ParsedUsesPermission; -import android.content.pm.pkg.FrameworkPackageUserState; -import android.content.pm.pkg.PackageUserStateUtils; import android.os.Environment; import android.os.UserHandle; import com.android.internal.util.ArrayUtils; +import com.android.server.pm.pkg.PackageUserState; +import com.android.server.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.SELinuxUtil; +import com.android.server.pm.pkg.component.ComponentParseUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.component.ParsedUsesPermission; import libcore.util.EmptyArray; @@ -77,7 +77,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static PackageInfo generate(ParsingPackageRead pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, - long lastUpdateTime, Set<String> grantedPermissions, FrameworkPackageUserState state, + long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId) { return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions, state, userId, null); @@ -86,13 +86,13 @@ public class PackageInfoWithoutStateUtils { @Nullable public static PackageInfo generate(ParsingPackageRead pkg, ApexInfo apexInfo, int flags) { return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(), - FrameworkPackageUserState.DEFAULT, UserHandle.getCallingUserId(), apexInfo); + PackageUserState.DEFAULT, UserHandle.getCallingUserId(), apexInfo); } @Nullable private static PackageInfo generateWithComponents(ParsingPackageRead pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, - long lastUpdateTime, Set<String> grantedPermissions, FrameworkPackageUserState state, + long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId, @Nullable ApexInfo apexInfo) { ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId); if (applicationInfo == null) { @@ -192,7 +192,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static PackageInfo generateWithoutComponents(ParsingPackageRead pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, - long lastUpdateTime, Set<String> grantedPermissions, FrameworkPackageUserState state, + long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId, @Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) { if (!checkUseInstalled(pkg, state, flags)) { return null; @@ -207,12 +207,12 @@ public class PackageInfoWithoutStateUtils { * server. * <p> * Prefer {@link #generateWithoutComponents(ParsingPackageRead, int[], int, long, long, Set, - * FrameworkPackageUserState, int, ApexInfo, ApplicationInfo)}. + * PackageUserState, int, ApexInfo, ApplicationInfo)}. */ @NonNull public static PackageInfo generateWithoutComponentsUnchecked(ParsingPackageRead pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, - long lastUpdateTime, Set<String> grantedPermissions, FrameworkPackageUserState state, + long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId, @Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) { PackageInfo pi = new PackageInfo(); pi.packageName = pkg.getPackageName(); @@ -366,7 +366,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ApplicationInfo generateApplicationInfo(ParsingPackageRead pkg, - @PackageManager.ApplicationInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ApplicationInfoFlagsBits long flags, PackageUserState state, int userId) { if (pkg == null) { return null; @@ -384,7 +384,7 @@ public class PackageInfoWithoutStateUtils { * This bypasses critical checks that are necessary for usage with data passed outside of system * server. * <p> - * Prefer {@link #generateApplicationInfo(ParsingPackageRead, int, FrameworkPackageUserState, int)}. + * Prefer {@link #generateApplicationInfo(ParsingPackageRead, int, PackageUserState, int)}. * * @param assignUserFields whether to fill the returned {@link ApplicationInfo} with user * specific fields. This can be skipped when building from a system @@ -395,7 +395,7 @@ public class PackageInfoWithoutStateUtils { @NonNull public static ApplicationInfo generateApplicationInfoUnchecked(@NonNull ParsingPackageRead pkg, @PackageManager.ApplicationInfoFlagsBits long flags, - @NonNull FrameworkPackageUserState state, int userId, boolean assignUserFields) { + @NonNull PackageUserState state, int userId, boolean assignUserFields) { // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo ai = ((ParsingPackageHidden) pkg).toAppInfoWithoutState(); @@ -409,7 +409,7 @@ public class PackageInfoWithoutStateUtils { } private static void updateApplicationInfo(ApplicationInfo ai, long flags, - FrameworkPackageUserState state) { + PackageUserState state) { if ((flags & PackageManager.GET_META_DATA) == 0) { ai.metaData = null; } @@ -455,7 +455,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ApplicationInfo generateDelegateApplicationInfo(@Nullable ApplicationInfo ai, @PackageManager.ApplicationInfoFlagsBits long flags, - @NonNull FrameworkPackageUserState state, int userId) { + @NonNull PackageUserState state, int userId) { if (ai == null || !checkUseInstalledOrHidden(flags, state, ai)) { return null; } @@ -472,7 +472,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ActivityInfo generateDelegateActivityInfo(@Nullable ActivityInfo a, @PackageManager.ComponentInfoFlagsBits long flags, - @NonNull FrameworkPackageUserState state, int userId) { + @NonNull PackageUserState state, int userId) { if (a == null || !checkUseInstalledOrHidden(flags, state, a.applicationInfo)) { return null; } @@ -486,7 +486,7 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, @Nullable ApplicationInfo applicationInfo, int userId) { if (a == null) return null; if (!checkUseInstalled(pkg, state, flags)) { @@ -507,7 +507,7 @@ public class PackageInfoWithoutStateUtils { * server. * <p> * Prefer {@link #generateActivityInfo(ParsingPackageRead, ParsedActivity, long, - * FrameworkPackageUserState, ApplicationInfo, int)}. + * PackageUserState, ApplicationInfo, int)}. */ @NonNull public static ActivityInfo generateActivityInfoUnchecked(@NonNull ParsedActivity a, @@ -552,14 +552,14 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, int userId) { return generateActivityInfo(pkg, a, flags, state, null, userId); } @Nullable public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, @Nullable ApplicationInfo applicationInfo, int userId) { if (s == null) return null; if (!checkUseInstalled(pkg, state, flags)) { @@ -579,8 +579,8 @@ public class PackageInfoWithoutStateUtils { * This bypasses critical checks that are necessary for usage with data passed outside of system * server. * <p> - * Prefer {@link #generateServiceInfo(ParsingPackageRead, ParsedService, long, - * FrameworkPackageUserState, ApplicationInfo, int)}. + * Prefer {@link #generateServiceInfo(ParsingPackageRead, ParsedService, long, PackageUserState, + * ApplicationInfo, int)}. */ @NonNull public static ServiceInfo generateServiceInfoUnchecked(@NonNull ParsedService s, @@ -603,14 +603,14 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, int userId) { return generateServiceInfo(pkg, s, flags, state, null, userId); } @Nullable public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, @Nullable ApplicationInfo applicationInfo, int userId) { if (p == null) return null; if (!checkUseInstalled(pkg, state, flags)) { @@ -631,7 +631,7 @@ public class PackageInfoWithoutStateUtils { * server. * <p> * Prefer {@link #generateProviderInfo(ParsingPackageRead, ParsedProvider, long, - * FrameworkPackageUserState, ApplicationInfo, int)}. + * PackageUserState, ApplicationInfo, int)}. */ @NonNull public static ProviderInfo generateProviderInfoUnchecked(@NonNull ParsedProvider p, @@ -665,14 +665,14 @@ public class PackageInfoWithoutStateUtils { @Nullable public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p, - @PackageManager.ComponentInfoFlagsBits long flags, FrameworkPackageUserState state, + @PackageManager.ComponentInfoFlagsBits long flags, PackageUserState state, int userId) { return generateProviderInfo(pkg, p, flags, state, null, userId); } /** * @param assignUserFields see {@link #generateApplicationInfoUnchecked(ParsingPackageRead, - * long, FrameworkPackageUserState, int, boolean)} + * long, PackageUserState, int, boolean)} */ @Nullable public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i, @@ -759,7 +759,7 @@ public class PackageInfoWithoutStateUtils { } private static boolean checkUseInstalledOrHidden(long flags, - @NonNull FrameworkPackageUserState state, @Nullable ApplicationInfo appInfo) { + @NonNull PackageUserState state, @Nullable ApplicationInfo appInfo) { // Returns false if the package is hidden system app until installed. if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0 && !state.isInstalled() @@ -888,7 +888,7 @@ public class PackageInfoWithoutStateUtils { } private static boolean checkUseInstalled(ParsingPackageRead pkg, - FrameworkPackageUserState state, @PackageManager.PackageInfoFlagsBits long flags) { + PackageUserState state, @PackageManager.PackageInfoFlagsBits long flags) { // If available for the target user return PackageUserStateUtils.isAvailable(state, flags); } diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java similarity index 94% rename from core/java/android/content/pm/parsing/ParsingPackage.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java index e635e9199cd6..18a6435d17c8 100644 --- a/core/java/android/content/pm/parsing/ParsingPackage.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.CallSuper; import android.annotation.NonNull; @@ -26,17 +26,17 @@ import android.content.pm.FeatureGroupInfo; import android.content.pm.FeatureInfo; import android.content.pm.PackageManager.Property; import android.content.pm.SigningDetails; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedApexSystemService; -import android.content.pm.parsing.component.ParsedAttribution; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.parsing.component.ParsedUsesPermission; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedApexSystemService; +import com.android.server.pm.pkg.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.component.ParsedUsesPermission; import android.os.Bundle; import android.util.SparseArray; import android.util.SparseIntArray; diff --git a/core/java/android/content/pm/parsing/ParsingPackageHidden.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageHidden.java similarity index 93% rename from core/java/android/content/pm/parsing/ParsingPackageHidden.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageHidden.java index c49d11e738a7..66e01a6bfb09 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageHidden.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageHidden.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java similarity index 98% rename from core/java/android/content/pm/parsing/ParsingPackageImpl.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java index fb42804d65a9..c4de862bccd9 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; @@ -33,28 +33,6 @@ import android.content.pm.FeatureInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.Property; import android.content.pm.SigningDetails; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedActivityImpl; -import android.content.pm.parsing.component.ParsedApexSystemService; -import android.content.pm.parsing.component.ParsedApexSystemServiceImpl; -import android.content.pm.parsing.component.ParsedAttribution; -import android.content.pm.parsing.component.ParsedAttributionImpl; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedInstrumentationImpl; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedPermissionGroupImpl; -import android.content.pm.parsing.component.ParsedPermissionImpl; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedProviderImpl; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.parsing.component.ParsedServiceImpl; -import android.content.pm.parsing.component.ParsedUsesPermission; -import android.content.pm.parsing.component.ParsedUsesPermissionImpl; import android.content.res.TypedArray; import android.os.Build; import android.os.Bundle; @@ -81,6 +59,33 @@ import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringList; import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet; import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringValueMap; import com.android.internal.util.Parcelling.BuiltIn.ForStringSet; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedActivityImpl; +import com.android.server.pm.pkg.component.ParsedApexSystemService; +import com.android.server.pm.pkg.component.ParsedApexSystemServiceImpl; +import com.android.server.pm.pkg.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedAttributionImpl; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedInstrumentationImpl; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedPermissionGroupImpl; +import com.android.server.pm.pkg.component.ParsedPermissionImpl; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedProviderImpl; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.component.ParsedServiceImpl; +import com.android.server.pm.pkg.component.ParsedUsesPermission; +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageHidden; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingUtils; import java.security.PublicKey; import java.util.Collections; @@ -1409,7 +1414,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, this.instrumentations = ParsingUtils.createTypedInterfaceList(in, ParsedInstrumentationImpl.CREATOR); this.preferredActivityFilters = sForIntentInfoPairs.unparcel(in); - this.processes = in.readHashMap(boot); + this.processes = in.readHashMap(ParsedProcess.class.getClassLoader()); this.metaData = in.readBundle(boot); this.volumeUuid = sForInternedString.unparcel(in); this.signingDetails = in.readParcelable(boot); diff --git a/core/java/android/content/pm/parsing/ParsingPackageInternal.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageInternal.java similarity index 95% rename from core/java/android/content/pm/parsing/ParsingPackageInternal.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageInternal.java index ca16fa2d97eb..5457785a8519 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageInternal.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageInternal.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.Nullable; import android.content.pm.PackageInfo; diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java similarity index 93% rename from core/java/android/content/pm/parsing/ParsingPackageRead.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java index a5e98d633f13..149711287f32 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageRead.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageRead.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,26 +14,26 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.Property; -import android.content.pm.PackageParser; import android.content.pm.SigningDetails; -import android.content.pm.parsing.component.ParsedApexSystemService; -import android.content.pm.parsing.component.ParsedAttribution; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedUsesPermission; import android.os.Bundle; import android.util.ArraySet; import android.util.Pair; import android.util.SparseIntArray; +import com.android.server.pm.pkg.component.ParsedApexSystemService; +import com.android.server.pm.pkg.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedUsesPermission; + import java.security.PublicKey; import java.util.List; import java.util.Map; @@ -49,7 +49,7 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * The names of packages to adopt ownership of permissions from, parsed under {@link - * PackageParser#TAG_ADOPT_PERMISSIONS}. + * ParsingPackageUtils#TAG_ADOPT_PERMISSIONS}. * * @see R.styleable#AndroidManifestOriginalPackage_name */ @@ -77,7 +77,7 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in {@link - * PackageParser#TAG_KEY_SETS}. + * ParsingPackageUtils#TAG_KEY_SETS}. * * @see R.styleable#AndroidManifestKeySet * @see R.styleable#AndroidManifestPublicKey @@ -226,7 +226,7 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in {@link - * PackageParser#TAG_KEY_SETS}. + * ParsingPackageUtils#TAG_KEY_SETS}. * * @see R.styleable#AndroidManifestUpgradeKeySet */ diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java similarity index 88% rename from core/java/android/content/pm/parsing/ParsingPackageUtils.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index 795e7efa696c..1ce01f633791 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE; import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE; @@ -33,7 +33,6 @@ import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import android.annotation.AnyRes; import android.annotation.CheckResult; import android.annotation.IntDef; -import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StyleableRes; @@ -50,39 +49,13 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.Property; import android.content.pm.Signature; import android.content.pm.SigningDetails; -import android.content.pm.parsing.component.ComponentMutateUtils; -import android.content.pm.parsing.component.ComponentParseUtils; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedActivityUtils; -import android.content.pm.parsing.component.ParsedApexSystemService; -import android.content.pm.parsing.component.ParsedApexSystemServiceUtils; -import android.content.pm.parsing.component.ParsedAttribution; -import android.content.pm.parsing.component.ParsedAttributionUtils; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedInstrumentationUtils; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedIntentInfoUtils; -import android.content.pm.parsing.component.ParsedMainComponent; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedPermissionUtils; -import android.content.pm.parsing.component.ParsedProcess; -import android.content.pm.parsing.component.ParsedProcessUtils; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedProviderUtils; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.parsing.component.ParsedServiceUtils; -import android.content.pm.parsing.component.ParsedUsesPermission; -import android.content.pm.parsing.component.ParsedUsesPermissionImpl; +import android.content.pm.parsing.ApkLiteParseUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; +import android.content.pm.parsing.PackageLite; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseInput.DeferredError; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; -import android.content.pm.permission.CompatibilityPermissionInfo; -import android.content.pm.split.DefaultSplitAssetLoader; -import android.content.pm.split.SplitAssetDependencyLoader; -import android.content.pm.split.SplitAssetLoader; import android.content.res.ApkAssets; import android.content.res.AssetManager; import android.content.res.Configuration; @@ -92,7 +65,6 @@ import android.content.res.XmlResourceParser; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.FileUtils; import android.os.Parcel; import android.os.RemoteException; import android.os.SystemProperties; @@ -104,7 +76,6 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AttributeSet; -import android.util.Base64; import android.util.DisplayMetrics; import android.util.Pair; import android.util.Slog; @@ -117,6 +88,35 @@ import com.android.internal.R; import com.android.internal.os.ClassLoaderFactory; import com.android.internal.util.ArrayUtils; import com.android.internal.util.XmlUtils; +import com.android.server.pm.permission.CompatibilityPermissionInfo; +import com.android.server.pm.pkg.component.ComponentMutateUtils; +import com.android.server.pm.pkg.component.ComponentParseUtils; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedActivityUtils; +import com.android.server.pm.pkg.component.ParsedApexSystemService; +import com.android.server.pm.pkg.component.ParsedApexSystemServiceUtils; +import com.android.server.pm.pkg.component.ParsedAttribution; +import com.android.server.pm.pkg.component.ParsedAttributionUtils; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedInstrumentationUtils; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedIntentInfoUtils; +import com.android.server.pm.pkg.component.ParsedMainComponent; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedPermissionUtils; +import com.android.server.pm.pkg.component.ParsedProcess; +import com.android.server.pm.pkg.component.ParsedProcessUtils; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedProviderUtils; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.component.ParsedServiceUtils; +import com.android.server.pm.pkg.component.ParsedUsesPermission; +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl; +import com.android.server.pm.split.DefaultSplitAssetLoader; +import com.android.server.pm.split.SplitAssetDependencyLoader; +import com.android.server.pm.split.SplitAssetLoader; import libcore.io.IoUtils; import libcore.util.EmptyArray; @@ -129,14 +129,8 @@ import java.io.File; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; import java.security.PublicKey; -import java.security.spec.EncodedKeySpec; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; @@ -158,10 +152,14 @@ public class ParsingPackageUtils { public static final float DEFAULT_PRE_O_MAX_ASPECT_RATIO = 1.86f; public static final float ASPECT_RATIO_NOT_SET = -1f; - /** File name in an APK for the Android manifest. */ + /** + * File name in an APK for the Android manifest. + */ public static final String ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml"; - /** Path prefix for apps on expanded storage */ + /** + * Path prefix for apps on expanded storage + */ public static final String MNT_EXPAND = "/mnt/expand/"; public static final String TAG_ADOPT_PERMISSIONS = "adopt-permissions"; @@ -214,10 +212,11 @@ public class ParsingPackageUtils { PackageInfo.INSTALL_LOCATION_UNSPECIFIED; public static final int PARSE_DEFAULT_TARGET_SANDBOX = 1; - /** If set to true, we will only allow package files that exactly match - * the DTD. Otherwise, we try to get as much from the package as we - * can without failing. This should normally be set to false, to - * support extensions to the DTD in future versions. */ + /** + * If set to true, we will only allow package files that exactly match the DTD. Otherwise, we + * try to get as much from the package as we can without failing. This should normally be set to + * false, to support extensions to the DTD in future versions. + */ public static final boolean RIGID_PARSER = false; public static final int PARSE_MUST_BE_APK = 1 << 0; @@ -227,8 +226,8 @@ public class ParsingPackageUtils { public static final int PARSE_COLLECT_CERTIFICATES = 1 << 5; public static final int PARSE_ENFORCE_CODE = 1 << 6; /** - * This flag is applied in the ApkLiteParser. Used by OverlayConfigParser to ignore the - * checks of required system property within the overlay tag. + * This flag is applied in the ApkLiteParser. Used by OverlayConfigParser to ignore the checks + * of required system property within the overlay tag. */ public static final int PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY = 1 << 7; public static final int PARSE_CHATTY = 1 << 31; @@ -246,12 +245,6 @@ public class ParsingPackageUtils { @Retention(RetentionPolicy.SOURCE) public @interface ParseFlags {} - /** - * For those names would be used as a part of the file name. Limits size to 223 and reserves 32 - * for the OS. - */ - static final int MAX_FILE_NAME_SIZE = 223; - /** * @see #parseDefault(ParseInput, File, int, List, boolean) */ @@ -266,8 +259,8 @@ public class ParsingPackageUtils { /** * For cases outside of PackageManagerService when an APK needs to be parsed as a one-off - * request, without caching the input object and without querying the internal system state - * for feature support. + * request, without caching the input object and without querying the internal system state for + * feature support. */ @NonNull public static ParseResult<ParsingPackage> parseDefault(ParseInput input, File file, @@ -293,8 +286,7 @@ public class ParsingPackageUtils { @NonNull String baseApkPath, @NonNull String path, @NonNull TypedArray manifestArray, boolean isCoreApp) { - return new ParsingPackageImpl(packageName, baseApkPath, path, - manifestArray); + return new ParsingPackageImpl(packageName, baseApkPath, path, manifestArray); } }); result = parser.parsePackage(input, file, parseFlags); @@ -337,21 +329,19 @@ public class ParsingPackageUtils { } /** - * Parse the package at the given location. Automatically detects if the - * package is a monolithic style (single APK file) or cluster style - * (directory of APKs). + * Parse the package at the given location. Automatically detects if the package is a monolithic + * style (single APK file) or cluster style (directory of APKs). * <p> - * This performs validity checking on cluster style packages, such as - * requiring identical package name and version codes, a single base APK, - * and unique split names. + * This performs validity checking on cluster style packages, such as requiring identical + * package name and version codes, a single base APK, and unique split names. * <p> - * Note that this <em>does not</em> perform signature verification; that must - * be done separately in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. - * - * If {@code useCaches} is true, the package parser might return a cached - * result from a previous parse of the same {@code packageFile} with the same - * {@code flags}. Note that this method does not check whether {@code packageFile} - * has changed since the last parse, it's up to callers to do so. + * Note that this <em>does not</em> perform signature verification; that must be done separately + * in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. + * <p> + * If {@code useCaches} is true, the package parser might return a cached result from a previous + * parse of the same {@code packageFile} with the same {@code flags}. Note that this method does + * not check whether {@code packageFile} has changed since the last parse, it's up to callers to + * do so. */ public ParseResult<ParsingPackage> parsePackage(ParseInput input, File packageFile, int flags) { if (packageFile.isDirectory()) { @@ -362,13 +352,12 @@ public class ParsingPackageUtils { } /** - * Parse all APKs contained in the given directory, treating them as a - * single package. This also performs validity checking, such as requiring - * identical package name and version codes, a single base APK, and unique - * split names. + * Parse all APKs contained in the given directory, treating them as a single package. This also + * performs validity checking, such as requiring identical package name and version codes, a + * single base APK, and unique split names. * <p> - * Note that this <em>does not</em> perform signature verification; that must - * be done separately in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. + * Note that this <em>does not</em> perform signature verification; that must be done separately + * in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. */ private ParseResult<ParsingPackage> parseClusterPackage(ParseInput input, File packageDir, int flags) { @@ -439,8 +428,8 @@ public class ParsingPackageUtils { /** * Parse the given APK file, treating it as as a single monolithic package. * <p> - * Note that this <em>does not</em> perform signature verification; that must - * be done separately in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. + * Note that this <em>does not</em> perform signature verification; that must be done separately + * in {@link #getSigningDetails(ParseInput, ParsingPackageRead, boolean)}. */ private ParseResult<ParsingPackage> parseMonolithicPackage(ParseInput input, File apkFile, int flags) { @@ -599,9 +588,8 @@ public class ParsingPackageUtils { } /** - * Parse the manifest of a <em>base APK</em>. When adding new features you - * need to consider whether they should be supported by split APKs and child - * packages. + * Parse the manifest of a <em>base APK</em>. When adding new features you need to consider + * whether they should be supported by split APKs and child packages. * * @param apkPath The package apk file path * @param res The resources from which to resolve values @@ -653,9 +641,8 @@ public class ParsingPackageUtils { /** * Parse the manifest of a <em>split APK</em>. * <p> - * Note that split APKs have many more restrictions on what they're capable - * of doing, so many valid features of a base APK have been carefully - * omitted here. + * Note that split APKs have many more restrictions on what they're capable of doing, so many + * valid features of a base APK have been carefully omitted here. * * @param pkg builder to fill * @return false on failure @@ -718,9 +705,8 @@ public class ParsingPackageUtils { * Parse the {@code application} XML tree at the current parse location in a * <em>split APK</em> manifest. * <p> - * Note that split APKs have many more restrictions on what they're capable - * of doing, so many valid features of a base APK have been carefully - * omitted here. + * Note that split APKs have many more restrictions on what they're capable of doing, so many + * valid features of a base APK have been carefully omitted here. */ private ParseResult<ParsingPackage> parseSplitApplication(ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags, int splitIndex) @@ -1030,7 +1016,8 @@ public class ParsingPackageUtils { } if (!"android".equals(pkg.getPackageName())) { - ParseResult<?> nameResult = validateName(input, str, true, true); + ParseResult<?> nameResult = FrameworkParsingPackageUtils.validateName(input, str, + true, true); if (nameResult.isError()) { return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID, "<manifest> specifies bad sharedUserId name \"" + str + "\": " @@ -1101,7 +1088,8 @@ public class ParsingPackageUtils { + " must define a public-key value on first use at " + parser.getPositionDescription()); } else if (encodedKey != null) { - PublicKey currentKey = parsePublicKey(encodedKey); + PublicKey currentKey = + FrameworkParsingPackageUtils.parsePublicKey(encodedKey); if (currentKey == null) { Slog.w(TAG, "No recognized valid key in 'public-key' tag at " + parser.getPositionDescription() + " key-set " @@ -1534,8 +1522,8 @@ public class ParsingPackageUtils { targetCode = minCode; } - ParseResult<Integer> targetSdkVersionResult = computeTargetSdkVersion( - targetVers, targetCode, SDK_CODENAMES, input); + ParseResult<Integer> targetSdkVersionResult = FrameworkParsingPackageUtils + .computeTargetSdkVersion(targetVers, targetCode, SDK_CODENAMES, input); if (targetSdkVersionResult.isError()) { return input.error(targetSdkVersionResult); } @@ -1548,8 +1536,8 @@ public class ParsingPackageUtils { return input.error(deferResult); } - ParseResult<Integer> minSdkVersionResult = computeMinSdkVersion(minVers, minCode, - SDK_VERSION, SDK_CODENAMES, input); + ParseResult<Integer> minSdkVersionResult = FrameworkParsingPackageUtils + .computeMinSdkVersion(minVers, minCode, SDK_VERSION, SDK_CODENAMES, input); if (minSdkVersionResult.isError()) { return input.error(minSdkVersionResult); } @@ -1644,146 +1632,6 @@ public class ParsingPackageUtils { return input.success(minExtensionVersions); } - /** - * Computes the minSdkVersion to use at runtime. If the package is not - * compatible with this platform, populates {@code outError[0]} with an - * error message. - * <p> - * If {@code minCode} is not specified, e.g. the value is {@code null}, - * then behavior varies based on the {@code platformSdkVersion}: - * <ul> - * <li>If the platform SDK version is greater than or equal to the - * {@code minVers}, returns the {@code mniVers} unmodified. - * <li>Otherwise, returns -1 to indicate that the package is not - * compatible with this platform. - * </ul> - * <p> - * Otherwise, the behavior varies based on whether the current platform - * is a pre-release version, e.g. the {@code platformSdkCodenames} array - * has length > 0: - * <ul> - * <li>If this is a pre-release platform and the value specified by - * {@code targetCode} is contained within the array of allowed pre-release - * codenames, this method will return {@link Build.VERSION_CODES#CUR_DEVELOPMENT}. - * <li>If this is a released platform, this method will return -1 to - * indicate that the package is not compatible with this platform. - * </ul> - * - * @param minVers minSdkVersion number, if specified in the application - * manifest, or 1 otherwise - * @param minCode minSdkVersion code, if specified in the application - * manifest, or {@code null} otherwise - * @param platformSdkVersion platform SDK version number, typically - * Build.VERSION.SDK_INT - * @param platformSdkCodenames array of allowed prerelease SDK codenames - * for this platform - * @return the minSdkVersion to use at runtime if successful - */ - public static ParseResult<Integer> computeMinSdkVersion(@IntRange(from = 1) int minVers, - @Nullable String minCode, @IntRange(from = 1) int platformSdkVersion, - @NonNull String[] platformSdkCodenames, @NonNull ParseInput input) { - // If it's a release SDK, make sure we meet the minimum SDK requirement. - if (minCode == null) { - if (minVers <= platformSdkVersion) { - return input.success(minVers); - } - - // We don't meet the minimum SDK requirement. - return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, - "Requires newer sdk version #" + minVers - + " (current version is #" + platformSdkVersion + ")"); - } - - // If it's a pre-release SDK and the codename matches this platform, we - // definitely meet the minimum SDK requirement. - if (matchTargetCode(platformSdkCodenames, minCode)) { - return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT); - } - - // Otherwise, we're looking at an incompatible pre-release SDK. - if (platformSdkCodenames.length > 0) { - return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, - "Requires development platform " + minCode - + " (current platform is any of " - + Arrays.toString(platformSdkCodenames) + ")"); - } else { - return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, - "Requires development platform " + minCode - + " but this is a release platform."); - } - } - - /** - * Computes the targetSdkVersion to use at runtime. If the package is not - * compatible with this platform, populates {@code outError[0]} with an - * error message. - * <p> - * If {@code targetCode} is not specified, e.g. the value is {@code null}, - * then the {@code targetVers} will be returned unmodified. - * <p> - * Otherwise, the behavior varies based on whether the current platform - * is a pre-release version, e.g. the {@code platformSdkCodenames} array - * has length > 0: - * <ul> - * <li>If this is a pre-release platform and the value specified by - * {@code targetCode} is contained within the array of allowed pre-release - * codenames, this method will return {@link Build.VERSION_CODES#CUR_DEVELOPMENT}. - * <li>If this is a released platform, this method will return -1 to - * indicate that the package is not compatible with this platform. - * </ul> - * - * @param targetVers targetSdkVersion number, if specified in the - * application manifest, or 0 otherwise - * @param targetCode targetSdkVersion code, if specified in the application - * manifest, or {@code null} otherwise - * @param platformSdkCodenames array of allowed pre-release SDK codenames - * for this platform - * @return the targetSdkVersion to use at runtime if successful - */ - public static ParseResult<Integer> computeTargetSdkVersion(@IntRange(from = 0) int targetVers, - @Nullable String targetCode, @NonNull String[] platformSdkCodenames, - @NonNull ParseInput input) { - // If it's a release SDK, return the version number unmodified. - if (targetCode == null) { - return input.success(targetVers); - } - - // If it's a pre-release SDK and the codename matches this platform, it - // definitely targets this SDK. - if (matchTargetCode(platformSdkCodenames, targetCode)) { - return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT); - } - - // Otherwise, we're looking at an incompatible pre-release SDK. - if (platformSdkCodenames.length > 0) { - return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, - "Requires development platform " + targetCode - + " (current platform is any of " - + Arrays.toString(platformSdkCodenames) + ")"); - } else { - return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, - "Requires development platform " + targetCode - + " but this is a release platform."); - } - } - - /** - * Matches a given {@code targetCode} against a set of release codeNames. Target codes can - * either be of the form {@code [codename]}" (e.g {@code "Q"}) or of the form - * {@code [codename].[fingerprint]} (e.g {@code "Q.cafebc561"}). - */ - private static boolean matchTargetCode(@NonNull String[] codeNames, - @NonNull String targetCode) { - final String targetCodeName; - final int targetCodeIdx = targetCode.indexOf('.'); - if (targetCodeIdx == -1) { - targetCodeName = targetCode; - } else { - targetCodeName = targetCode.substring(0, targetCodeIdx); - } - return ArrayUtils.contains(codeNames, targetCodeName); - } - private static ParseResult<ParsingPackage> parseRestrictUpdateHash(int flags, ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser) { if ((flags & PARSE_IS_SYSTEM_DIR) != 0) { @@ -1925,12 +1773,11 @@ public class ParsingPackageUtils { * Parse the {@code application} XML tree at the current parse location in a * <em>base APK</em> manifest. * <p> - * When adding new features, carefully consider if they should also be - * supported by split APKs. - * - * This method should avoid using a getter for fields set by this method. Prefer assigning - * a local variable and using it. Otherwise there's an ordering problem which can be broken - * if any code moves around. + * When adding new features, carefully consider if they should also be supported by split APKs. + * <p> + * This method should avoid using a getter for fields set by this method. Prefer assigning a + * local variable and using it. Otherwise there's an ordering problem which can be broken if any + * code moves around. */ private ParseResult<ParsingPackage> parseBaseApplication(ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags) @@ -2276,7 +2123,7 @@ public class ParsingPackageUtils { /** * Collection of single-line, no (or little) logic assignments. Separated for readability. - * + * <p> * Flags are separated by type and by default value. They are sorted alphabetically within each * section. */ @@ -2893,7 +2740,7 @@ public class ParsingPackageUtils { R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName); String propValue = sa.getString( R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue); - if (!checkRequiredSystemProperties(propName, propValue)) { + if (!FrameworkParsingPackageUtils.checkRequiredSystemProperties(propName, propValue)) { String message = "Skipping target and overlay pair " + target + " and " + pkg.getBaseApkPath() + ": overlay ignored due to required system property: " @@ -3055,60 +2902,6 @@ public class ParsingPackageUtils { } } - /** - * Check if the given name is valid. - * - * @param name The name to check. - * @param requireSeparator {@code true} if the name requires containing a separator at least. - * @param requireFilename {@code true} to apply file name validation to the given name. It also - * limits length of the name to the {@link #MAX_FILE_NAME_SIZE}. - * @return Success if it's valid. - */ - public static String validateName(String name, boolean requireSeparator, - boolean requireFilename) { - final int N = name.length(); - boolean hasSep = false; - boolean front = true; - for (int i = 0; i < N; i++) { - final char c = name.charAt(i); - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { - front = false; - continue; - } - if (!front) { - if ((c >= '0' && c <= '9') || c == '_') { - continue; - } - } - if (c == '.') { - hasSep = true; - front = true; - continue; - } - return "bad character '" + c + "'"; - } - if (requireFilename) { - if (!FileUtils.isValidExtFilename(name)) { - return "Invalid filename"; - } else if (N > MAX_FILE_NAME_SIZE) { - return "the length of the name is greater than " + MAX_FILE_NAME_SIZE; - } - } - return hasSep || !requireSeparator ? null : "must have at least one '.' separator"; - } - - /** - * @see #validateName(String, boolean, boolean) - */ - public static ParseResult validateName(ParseInput input, String name, boolean requireSeparator, - boolean requireFilename) { - final String errorMessage = validateName(name, requireSeparator, requireFilename); - if (errorMessage != null) { - return input.error(errorMessage); - } - return input.success(null); - } - /** * Parse a meta data defined on the enclosing tag. * <p>Meta data can be defined by either <meta-data> or <property> elements. @@ -3168,114 +2961,6 @@ public class ParsingPackageUtils { } } - /** - * @return {@link PublicKey} of a given encoded public key. - */ - public static final PublicKey parsePublicKey(final String encodedPublicKey) { - if (encodedPublicKey == null) { - Slog.w(TAG, "Could not parse null public key"); - return null; - } - - try { - return parsePublicKey(Base64.decode(encodedPublicKey, Base64.DEFAULT)); - } catch (IllegalArgumentException e) { - Slog.w(TAG, "Could not parse verifier public key; invalid Base64"); - return null; - } - } - - /** - * @return {@link PublicKey} of the given byte array of a public key. - */ - public static final PublicKey parsePublicKey(final byte[] publicKey) { - if (publicKey == null) { - Slog.w(TAG, "Could not parse null public key"); - return null; - } - - final EncodedKeySpec keySpec; - try { - keySpec = new X509EncodedKeySpec(publicKey); - } catch (IllegalArgumentException e) { - Slog.w(TAG, "Could not parse verifier public key; invalid Base64"); - return null; - } - - /* First try the key as an RSA key. */ - try { - final KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - return keyFactory.generatePublic(keySpec); - } catch (NoSuchAlgorithmException e) { - Slog.wtf(TAG, "Could not parse public key: RSA KeyFactory not included in build"); - } catch (InvalidKeySpecException e) { - // Not a RSA public key. - } - - /* Now try it as a ECDSA key. */ - try { - final KeyFactory keyFactory = KeyFactory.getInstance("EC"); - return keyFactory.generatePublic(keySpec); - } catch (NoSuchAlgorithmException e) { - Slog.wtf(TAG, "Could not parse public key: EC KeyFactory not included in build"); - } catch (InvalidKeySpecException e) { - // Not a ECDSA public key. - } - - /* Now try it as a DSA key. */ - try { - final KeyFactory keyFactory = KeyFactory.getInstance("DSA"); - return keyFactory.generatePublic(keySpec); - } catch (NoSuchAlgorithmException e) { - Slog.wtf(TAG, "Could not parse public key: DSA KeyFactory not included in build"); - } catch (InvalidKeySpecException e) { - // Not a DSA public key. - } - - /* Not a supported key type */ - return null; - } - - /** - * Returns {@code true} if both the property name and value are empty or if the given system - * property is set to the specified value. Properties can be one or more, and if properties are - * more than one, they must be separated by comma, and count of names and values must be equal, - * and also every given system property must be set to the corresponding value. - * In all other cases, returns {@code false} - */ - public static boolean checkRequiredSystemProperties(@Nullable String rawPropNames, - @Nullable String rawPropValues) { - if (TextUtils.isEmpty(rawPropNames) || TextUtils.isEmpty(rawPropValues)) { - if (!TextUtils.isEmpty(rawPropNames) || !TextUtils.isEmpty(rawPropValues)) { - // malformed condition - incomplete - Slog.w(TAG, "Disabling overlay - incomplete property :'" + rawPropNames - + "=" + rawPropValues + "' - require both requiredSystemPropertyName" - + " AND requiredSystemPropertyValue to be specified."); - return false; - } - // no valid condition set - so no exclusion criteria, overlay will be included. - return true; - } - - final String[] propNames = rawPropNames.split(","); - final String[] propValues = rawPropValues.split(","); - - if (propNames.length != propValues.length) { - Slog.w(TAG, "Disabling overlay - property :'" + rawPropNames - + "=" + rawPropValues + "' - require both requiredSystemPropertyName" - + " AND requiredSystemPropertyValue lists to have the same size."); - return false; - } - for (int i = 0; i < propNames.length; i++) { - // Check property value: make sure it is both set and equal to expected value - final String currValue = SystemProperties.get(propNames[i]); - if (!TextUtils.equals(currValue, propValues[i])) { - return false; - } - } - return true; - } - /** * Collect certificates from all the APKs described in the given package. Also asserts that * all APK contents are signed correctly and consistently. diff --git a/core/java/android/content/pm/parsing/ParsingUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingUtils.java similarity index 93% rename from core/java/android/content/pm/parsing/ParsingUtils.java rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingUtils.java index cce984eb93a7..95fec369b95a 100644 --- a/core/java/android/content/pm/parsing/ParsingUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,14 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; -import static android.content.pm.parsing.ParsingPackageUtils.RIGID_PARSER; +import static com.android.server.pm.pkg.parsing.ParsingPackageUtils.RIGID_PARSER; import android.annotation.NonNull; import android.annotation.Nullable; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedIntentInfoImpl; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.res.XmlResourceParser; @@ -138,7 +138,7 @@ public class ParsingUtils { final List<Pair<String, ParsedIntentInfo>> list = new ArrayList<>(size); for (int i = 0; i < size; ++i) { list.add(Pair.create(source.readString(), source.readParcelable( - ParsedIntentInfoImpl.class.getClassLoader()))); + ParsedIntentInfoImpl.class.getClassLoader(), ParsedIntentInfo.class))); } return list; diff --git a/core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java b/services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo.java similarity index 99% rename from core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java rename to services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo.java index 625b9d1bb479..a323e2098e54 100644 --- a/core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java b/services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo.java similarity index 92% rename from core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java rename to services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo.java index 7d758a858ea5..2bc4ee7cbc9a 100644 --- a/core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm.parsing; +package com.android.server.pm.pkg.parsing; import android.annotation.NonNull; import android.annotation.Nullable; @@ -29,14 +29,14 @@ import android.content.pm.PackageInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ServiceInfo; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.pkg.FrameworkPackageUserState; import com.android.internal.R; +import com.android.server.pm.pkg.PackageUserState; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedService; import java.util.List; @@ -82,7 +82,7 @@ public interface PkgWithoutStatePackageInfo { * provide the same information as {@link ActivityInfo}. Effective state can be queried through * {@link android.content.pm.PackageManager#getActivityInfo(ComponentName, int)} or by * combining state from from com.android.server.pm.pkg.PackageState and - * {@link FrameworkPackageUserState}. + * {@link PackageUserState}. * * @see ActivityInfo * @see PackageInfo#activities @@ -153,7 +153,7 @@ public interface PkgWithoutStatePackageInfo { * provide the same information as {@link ProviderInfo}. Effective state can be queried through * {@link android.content.pm.PackageManager#getProviderInfo(ComponentName, int)} or by * combining state from from com.android.server.pm.pkg.PackageState and - * {@link FrameworkPackageUserState}. + * {@link PackageUserState}. * * @see ProviderInfo * @see PackageInfo#providers @@ -168,7 +168,7 @@ public interface PkgWithoutStatePackageInfo { * provide the same information as {@link ActivityInfo}. Effective state can be queried through * {@link android.content.pm.PackageManager#getReceiverInfo(ComponentName, int)} or by * combining state from from com.android.server.pm.pkg.PackageState and - * {@link FrameworkPackageUserState}. + * {@link PackageUserState}. * * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even * though they represent different functionality. @@ -222,7 +222,7 @@ public interface PkgWithoutStatePackageInfo { * provide the same information as {@link ServiceInfo}. Effective state can be queried through * {@link android.content.pm.PackageManager#getServiceInfo(ComponentName, int)} or by * combining state from from com.android.server.pm.pkg.PackageState and - * {@link FrameworkPackageUserState}. + * {@link PackageUserState}. * * @see ServiceInfo * @see PackageInfo#services diff --git a/core/java/android/content/pm/split/DefaultSplitAssetLoader.java b/services/core/java/com/android/server/pm/split/DefaultSplitAssetLoader.java similarity index 93% rename from core/java/android/content/pm/split/DefaultSplitAssetLoader.java rename to services/core/java/com/android/server/pm/split/DefaultSplitAssetLoader.java index 47cf28b1d9d2..2bd7cf848196 100644 --- a/core/java/android/content/pm/split/DefaultSplitAssetLoader.java +++ b/services/core/java/com/android/server/pm/split/DefaultSplitAssetLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.content.pm.split; +package com.android.server.pm.split; import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingPackageUtils.ParseFlags; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils.ParseFlags; import android.content.res.ApkAssets; import android.content.res.AssetManager; import android.os.Build; diff --git a/core/java/android/content/pm/split/SplitAssetDependencyLoader.java b/services/core/java/com/android/server/pm/split/SplitAssetDependencyLoader.java similarity index 94% rename from core/java/android/content/pm/split/SplitAssetDependencyLoader.java rename to services/core/java/com/android/server/pm/split/SplitAssetDependencyLoader.java index a0c3f752243c..ae42e0980fb7 100644 --- a/core/java/android/content/pm/split/SplitAssetDependencyLoader.java +++ b/services/core/java/com/android/server/pm/split/SplitAssetDependencyLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.content.pm.split; +package com.android.server.pm.split; import android.annotation.NonNull; import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.ParsingPackageUtils.ParseFlags; +import android.content.pm.split.SplitDependencyLoader; import android.content.res.ApkAssets; import android.content.res.AssetManager; import android.os.Build; import android.util.SparseArray; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils.ParseFlags; + import libcore.io.IoUtils; import java.io.IOException; diff --git a/core/java/android/content/pm/split/SplitAssetLoader.java b/services/core/java/com/android/server/pm/split/SplitAssetLoader.java similarity index 91% rename from core/java/android/content/pm/split/SplitAssetLoader.java rename to services/core/java/com/android/server/pm/split/SplitAssetLoader.java index d314e06cb4a8..845015916e60 100644 --- a/core/java/android/content/pm/split/SplitAssetLoader.java +++ b/services/core/java/com/android/server/pm/split/SplitAssetLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.content.pm.split; +package com.android.server.pm.split; import android.content.res.ApkAssets; import android.content.res.AssetManager; diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java index d47f510c8338..e07812036a0c 100644 --- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java +++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationCollector.java @@ -22,8 +22,8 @@ import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedIntentInfo; import android.os.Build; import android.text.TextUtils; import android.util.ArraySet; diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java index d1603f54eb37..d0b50d271140 100644 --- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java +++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java @@ -31,8 +31,6 @@ import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.pkg.PackageUserStateUtils; import android.content.pm.verify.domain.DomainOwner; import android.content.pm.verify.domain.DomainVerificationInfo; import android.content.pm.verify.domain.DomainVerificationManager; @@ -63,6 +61,8 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.pkg.PackageStateUtils; import com.android.server.pm.pkg.PackageUserState; +import com.android.server.pm.pkg.PackageUserStateUtils; +import com.android.server.pm.pkg.component.ParsedActivity; import com.android.server.pm.verify.domain.models.DomainVerificationInternalUserState; import com.android.server.pm.verify.domain.models.DomainVerificationPkgState; import com.android.server.pm.verify.domain.models.DomainVerificationStateMap; diff --git a/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt b/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt index 8203c1b731c4..5220c8fa7a72 100644 --- a/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt +++ b/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt @@ -20,7 +20,7 @@ import android.app.PropertyInvalidatedCache import android.content.ComponentName import android.content.Context import android.content.pm.PackageManager -import android.content.pm.parsing.component.ParsedActivity +import com.android.server.pm.pkg.component.ParsedActivity import android.os.Binder import android.os.UserHandle import android.util.ArrayMap diff --git a/services/tests/PackageManagerServiceTests/host/test-apps/UsesStaticLibrary/Android.bp b/services/tests/PackageManagerServiceTests/host/test-apps/UsesStaticLibrary/Android.bp index ebad5afac625..93d70bb6cdba 100644 --- a/services/tests/PackageManagerServiceTests/host/test-apps/UsesStaticLibrary/Android.bp +++ b/services/tests/PackageManagerServiceTests/host/test-apps/UsesStaticLibrary/Android.bp @@ -24,7 +24,7 @@ package { android_test_helper_app { name: "PackageManagerTestAppDeclaresStaticLibrary", manifest: "AndroidManifestDeclaresStaticLibrary.xml", - certificate: ":FrameworksCoreTests_keyset_A_cert", + certificate: ":FrameworksServicesTests_keyset_A_cert", } android_test_helper_app { diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt index 8cf6fe3d118d..a0f3bbf928ab 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt @@ -23,8 +23,7 @@ import android.content.pm.FeatureGroupInfo import android.content.pm.FeatureInfo import android.content.pm.PackageManager import android.content.pm.SigningDetails -import android.content.pm.parsing.ParsingPackage -import android.content.pm.parsing.component.* +import com.android.server.pm.pkg.parsing.ParsingPackage import android.net.Uri import android.os.Bundle import android.os.Parcelable @@ -34,6 +33,18 @@ import android.util.SparseIntArray import com.android.internal.R import com.android.server.pm.parsing.pkg.AndroidPackage import com.android.server.pm.parsing.pkg.PackageImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedApexSystemServiceImpl +import com.android.server.pm.pkg.component.ParsedAttributionImpl +import com.android.server.pm.pkg.component.ParsedComponentImpl +import com.android.server.pm.pkg.component.ParsedInstrumentationImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedPermissionGroupImpl +import com.android.server.pm.pkg.component.ParsedPermissionImpl +import com.android.server.pm.pkg.component.ParsedProcessImpl +import com.android.server.pm.pkg.component.ParsedProviderImpl +import com.android.server.pm.pkg.component.ParsedServiceImpl +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl import com.android.server.testutils.mockThrowOnUnmocked import com.android.server.testutils.whenever import java.security.KeyPairGenerator @@ -281,7 +292,13 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag PackageImpl::addAttribution, Triple("testTag", 13, listOf("testInherit")), transformGet = { it.singleOrNull()?.let { Triple(it.tag, it.label, it.inheritFrom) } }, - transformSet = { it?.let { ParsedAttributionImpl(it.first, it.second, it.third) } } + transformSet = { it?.let { + ParsedAttributionImpl( + it.first, + it.second, + it.third + ) + } } ), getSetByValue2( AndroidPackage::getKeySetMapping, @@ -294,12 +311,14 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag PackageImpl::addPermissionGroup, "test.permission.GROUP", transformGet = { it.singleOrNull()?.name }, - transformSet = { ParsedPermissionGroupImpl().apply { setName(it) } } + transformSet = { ParsedPermissionGroupImpl() + .apply { setName(it) } } ), getSetByValue2( AndroidPackage::getPreferredActivityFilters, PackageImpl::addPreferredActivityFilter, - "TestClassName" to ParsedIntentInfoImpl().apply { + "TestClassName" to ParsedIntentInfoImpl() + .apply { intentFilter.apply { addDataScheme("http") addDataAuthority("test.pm.server.android.com", null) @@ -348,42 +367,48 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag PackageImpl::addActivity, "TestActivityName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedActivityImpl().apply { name = it }.withMimeGroups() } + transformSet = { ParsedActivityImpl() + .apply { name = it }.withMimeGroups() } ), getSetByValue( AndroidPackage::getApexSystemServices, PackageImpl::addApexSystemService, "TestApexSystemServiceName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedApexSystemServiceImpl().apply { name = it } } + transformSet = { ParsedApexSystemServiceImpl() + .apply { name = it } } ), getSetByValue( AndroidPackage::getReceivers, PackageImpl::addReceiver, "TestReceiverName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedActivityImpl().apply { name = it }.withMimeGroups() } + transformSet = { ParsedActivityImpl() + .apply { name = it }.withMimeGroups() } ), getSetByValue( AndroidPackage::getServices, PackageImpl::addService, "TestServiceName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedServiceImpl().apply { name = it }.withMimeGroups() } + transformSet = { ParsedServiceImpl() + .apply { name = it }.withMimeGroups() } ), getSetByValue( AndroidPackage::getProviders, PackageImpl::addProvider, "TestProviderName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedProviderImpl().apply { name = it }.withMimeGroups() } + transformSet = { ParsedProviderImpl() + .apply { name = it }.withMimeGroups() } ), getSetByValue( AndroidPackage::getInstrumentations, PackageImpl::addInstrumentation, "TestInstrumentationName", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedInstrumentationImpl().apply { name = it } } + transformSet = { ParsedInstrumentationImpl() + .apply { name = it } } ), getSetByValue( AndroidPackage::getConfigPreferences, @@ -408,7 +433,8 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag PackageImpl::addPermission, "test.PERMISSION", transformGet = { it.singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedPermissionImpl().apply { name = it } } + transformSet = { ParsedPermissionImpl() + .apply { name = it } } ), getSetByValue( AndroidPackage::getUsesPermissions, @@ -419,7 +445,12 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag it.filterNot { it.name == "test.implicit.PERMISSION" } .singleOrNull()?.name.orEmpty() }, - transformSet = { ParsedUsesPermissionImpl(it, 0) } + transformSet = { + ParsedUsesPermissionImpl( + it, + 0 + ) + } ), getSetByValue( AndroidPackage::getRequestedFeatures, @@ -444,7 +475,8 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag getSetByValue( AndroidPackage::getProcesses, PackageImpl::setProcesses, - mapOf("testProcess" to ParsedProcessImpl().apply { name = "testProcessName" }), + mapOf("testProcess" to ParsedProcessImpl() + .apply { name = "testProcessName" }), compare = { first, second -> equalBy( first, second, diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedActivityTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedActivityTest.kt index 8170acfb02b7..a89b717fd90d 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedActivityTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedActivityTest.kt @@ -17,8 +17,8 @@ package com.android.server.pm.test.parsing.parcelling import android.content.pm.ActivityInfo -import android.content.pm.parsing.component.ParsedActivity -import android.content.pm.parsing.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedActivity +import com.android.server.pm.pkg.component.ParsedActivityImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts @@ -27,7 +27,8 @@ class ParsedActivityTest : ParsedMainComponentTest( ParsedActivityImpl::class ) { - override val defaultImpl = ParsedActivityImpl() + override val defaultImpl = + ParsedActivityImpl() override val creator = ParsedActivityImpl.CREATOR override val mainComponentSubclassBaseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedAttributionTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedAttributionTest.kt index 503301b5151b..4e44e96aa710 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedAttributionTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedAttributionTest.kt @@ -16,15 +16,21 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedAttribution -import android.content.pm.parsing.component.ParsedAttributionImpl +import com.android.server.pm.pkg.component.ParsedAttribution +import com.android.server.pm.pkg.component.ParsedAttributionImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts -class ParsedAttributionTest : ParcelableComponentTest(ParsedAttribution::class, +class ParsedAttributionTest : ParcelableComponentTest( + ParsedAttribution::class, ParsedAttributionImpl::class) { - override val defaultImpl = ParsedAttributionImpl("", 0, emptyList()) + override val defaultImpl = + ParsedAttributionImpl( + "", + 0, + emptyList() + ) override val creator = ParsedAttributionImpl.CREATOR override val baseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedComponentTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedComponentTest.kt index e978dd389543..058f6d69f3e7 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedComponentTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedComponentTest.kt @@ -17,10 +17,9 @@ package com.android.server.pm.test.parsing.parcelling import android.content.pm.PackageManager -import android.content.pm.parsing.component.ParsedComponent -import android.content.pm.parsing.component.ParsedComponentImpl -import android.content.pm.parsing.component.ParsedIntentInfo -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedComponent +import com.android.server.pm.pkg.component.ParsedComponentImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import android.os.Bundle import android.os.Parcelable import kotlin.contracts.ExperimentalContracts @@ -65,7 +64,8 @@ abstract class ParsedComponentTest(getterType: KClass<*>, setterType: KClass<out ParsedComponentImpl::addIntent, "TestLabel", transformGet = { it.singleOrNull()?.nonLocalizedLabel }, - transformSet = { ParsedIntentInfoImpl().setNonLocalizedLabel(it!!) }, + transformSet = { ParsedIntentInfoImpl() + .setNonLocalizedLabel(it!!) }, ), getSetByValue( ParsedComponent::getProperties, diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedInstrumentationTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedInstrumentationTest.kt index f15b911294b3..eeb30b70c143 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedInstrumentationTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedInstrumentationTest.kt @@ -16,8 +16,8 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedInstrumentation -import android.content.pm.parsing.component.ParsedInstrumentationImpl +import com.android.server.pm.pkg.component.ParsedInstrumentation +import com.android.server.pm.pkg.component.ParsedInstrumentationImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts @@ -26,7 +26,8 @@ class ParsedInstrumentationTest : ParsedComponentTest( ParsedInstrumentationImpl::class ) { - override val defaultImpl = ParsedInstrumentationImpl() + override val defaultImpl = + ParsedInstrumentationImpl() override val creator = ParsedInstrumentationImpl.CREATOR override val subclassBaseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedIntentInfoTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedIntentInfoTest.kt index f04e85128c14..f27a51f63049 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedIntentInfoTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedIntentInfoTest.kt @@ -16,8 +16,8 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedIntentInfo -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedIntentInfo +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import android.os.Parcelable import android.os.PatternMatcher import kotlin.contracts.ExperimentalContracts @@ -28,7 +28,8 @@ class ParsedIntentInfoTest : ParcelableComponentTest( ParsedIntentInfoImpl::class, ) { - override val defaultImpl = ParsedIntentInfoImpl() + override val defaultImpl = + ParsedIntentInfoImpl() override val creator = ParsedIntentInfoImpl.CREATOR override val excludedMethods = listOf( @@ -43,7 +44,8 @@ class ParsedIntentInfoTest : ParcelableComponentTest( ParsedIntentInfo::getNonLocalizedLabel, ) - override fun initialObject() = ParsedIntentInfoImpl().apply { + override fun initialObject() = ParsedIntentInfoImpl() + .apply { intentFilter.apply { addAction("test.ACTION") addDataAuthority("testAuthority", "404") diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedMainComponentTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedMainComponentTest.kt index 214734a5fdbe..a0d8c44899d8 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedMainComponentTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedMainComponentTest.kt @@ -16,9 +16,8 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedMainComponent -import android.content.pm.parsing.component.ParsedMainComponentImpl -import android.content.pm.parsing.component.ParsedService +import com.android.server.pm.pkg.component.ParsedMainComponent +import com.android.server.pm.pkg.component.ParsedMainComponentImpl import android.os.Parcelable import java.util.Arrays import kotlin.contracts.ExperimentalContracts diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionGroupTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionGroupTest.kt index f876ed05e0e1..57562ef8588c 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionGroupTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionGroupTest.kt @@ -16,8 +16,8 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedPermissionGroup -import android.content.pm.parsing.component.ParsedPermissionGroupImpl +import com.android.server.pm.pkg.component.ParsedPermissionGroup +import com.android.server.pm.pkg.component.ParsedPermissionGroupImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts @@ -26,7 +26,8 @@ class ParsedPermissionGroupTest : ParsedComponentTest( ParsedPermissionGroupImpl::class, ) { - override val defaultImpl = ParsedPermissionGroupImpl() + override val defaultImpl = + ParsedPermissionGroupImpl() override val creator = ParsedPermissionGroupImpl.CREATOR override val subclassBaseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionTest.kt index 6f48e2442e56..c72a44e4c4e0 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedPermissionTest.kt @@ -16,10 +16,10 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedPermission -import android.content.pm.parsing.component.ParsedPermissionGroup -import android.content.pm.parsing.component.ParsedPermissionGroupImpl -import android.content.pm.parsing.component.ParsedPermissionImpl +import com.android.server.pm.pkg.component.ParsedPermission +import com.android.server.pm.pkg.component.ParsedPermissionGroup +import com.android.server.pm.pkg.component.ParsedPermissionGroupImpl +import com.android.server.pm.pkg.component.ParsedPermissionImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts @@ -28,7 +28,8 @@ class ParsedPermissionTest : ParsedComponentTest( ParsedPermissionImpl::class ) { - override val defaultImpl = ParsedPermissionImpl() + override val defaultImpl = + ParsedPermissionImpl() override val creator = ParsedPermissionImpl.CREATOR override val subclassExcludedMethods = listOf( @@ -53,7 +54,8 @@ class ParsedPermissionTest : ParsedComponentTest( getSetByValue( ParsedPermission::getParsedPermissionGroup, ParsedPermissionImpl::setParsedPermissionGroup, - ParsedPermissionGroupImpl().apply { name = "test.permission.group" }, + ParsedPermissionGroupImpl() + .apply { name = "test.permission.group" }, compare = { first, second -> equalBy(first, second, ParsedPermissionGroup::getName) } ), ) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProcessTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProcessTest.kt index 005d3e81d3a3..8b9361a31d0a 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProcessTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProcessTest.kt @@ -16,15 +16,16 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedProcess -import android.content.pm.parsing.component.ParsedProcessImpl +import com.android.server.pm.pkg.component.ParsedProcess +import com.android.server.pm.pkg.component.ParsedProcessImpl import android.util.ArrayMap import kotlin.contracts.ExperimentalContracts @ExperimentalContracts class ParsedProcessTest : ParcelableComponentTest(ParsedProcess::class, ParsedProcessImpl::class) { - override val defaultImpl = ParsedProcessImpl() + override val defaultImpl = + ParsedProcessImpl() override val creator = ParsedProcessImpl.CREATOR override val excludedMethods = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProviderTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProviderTest.kt index 78e4b796b44f..037da24a3304 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProviderTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedProviderTest.kt @@ -17,15 +17,16 @@ package com.android.server.pm.test.parsing.parcelling import android.content.pm.PathPermission -import android.content.pm.parsing.component.ParsedProvider -import android.content.pm.parsing.component.ParsedProviderImpl +import com.android.server.pm.pkg.component.ParsedProvider +import com.android.server.pm.pkg.component.ParsedProviderImpl import android.os.PatternMatcher import kotlin.contracts.ExperimentalContracts @ExperimentalContracts class ParsedProviderTest : ParsedMainComponentTest(ParsedProvider::class, ParsedProviderImpl::class) { - override val defaultImpl = ParsedProviderImpl() + override val defaultImpl = + ParsedProviderImpl() override val creator = ParsedProviderImpl.CREATOR override val mainComponentSubclassBaseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedServiceTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedServiceTest.kt index 9363aa37360c..e2c9439df9cf 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedServiceTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedServiceTest.kt @@ -16,14 +16,15 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedService -import android.content.pm.parsing.component.ParsedServiceImpl +import com.android.server.pm.pkg.component.ParsedService +import com.android.server.pm.pkg.component.ParsedServiceImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts class ParsedServiceTest : ParsedMainComponentTest(ParsedService::class, ParsedServiceImpl::class) { - override val defaultImpl = ParsedServiceImpl() + override val defaultImpl = + ParsedServiceImpl() override val creator = ParsedServiceImpl.CREATOR override val mainComponentSubclassBaseParams = listOf( diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedUsesPermissionTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedUsesPermissionTest.kt index 81e800f2d6d2..ad607366967f 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedUsesPermissionTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/ParsedUsesPermissionTest.kt @@ -16,8 +16,8 @@ package com.android.server.pm.test.parsing.parcelling -import android.content.pm.parsing.component.ParsedUsesPermission -import android.content.pm.parsing.component.ParsedUsesPermissionImpl +import com.android.server.pm.pkg.component.ParsedUsesPermission +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl import kotlin.contracts.ExperimentalContracts @ExperimentalContracts @@ -26,7 +26,8 @@ class ParsedUsesPermissionTest : ParcelableComponentTest( ParsedUsesPermissionImpl::class ) { - override val defaultImpl = ParsedUsesPermissionImpl("", 0) + override val defaultImpl = + ParsedUsesPermissionImpl("", 0) override val creator = ParsedUsesPermissionImpl.CREATOR override val baseParams = listOf( @@ -34,5 +35,6 @@ class ParsedUsesPermissionTest : ParcelableComponentTest( ParsedUsesPermission::getUsesPermissionFlags ) - override fun initialObject() = ParsedUsesPermissionImpl("", 0) + override fun initialObject() = + ParsedUsesPermissionImpl("", 0) } diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt index 33234d52c9ff..652dc38fa6ed 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationCollectorTest.kt @@ -18,8 +18,8 @@ package com.android.server.pm.test.verify.domain import android.content.Intent import android.content.pm.ApplicationInfo -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import android.os.Build import android.os.PatternMatcher import android.util.ArraySet @@ -94,7 +94,8 @@ class DomainVerificationCollectorTest { val activityList = listOf( ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { addAction(Intent.ACTION_VIEW) addCategory(Intent.CATEGORY_BROWSABLE) @@ -110,7 +111,8 @@ class DomainVerificationCollectorTest { }, ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(true) addAction(Intent.ACTION_VIEW) @@ -270,7 +272,8 @@ class DomainVerificationCollectorTest { val activityList = listOf( ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addAction(Intent.ACTION_VIEW) @@ -285,7 +288,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { addAction(Intent.ACTION_VIEW) addCategory(Intent.CATEGORY_BROWSABLE) @@ -300,7 +304,8 @@ class DomainVerificationCollectorTest { }, ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addAction(Intent.ACTION_VIEW) @@ -316,7 +321,8 @@ class DomainVerificationCollectorTest { }, ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addAction(Intent.ACTION_VIEW) @@ -329,7 +335,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addAction(Intent.ACTION_VIEW) @@ -342,7 +349,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addCategory(Intent.CATEGORY_BROWSABLE) @@ -355,7 +363,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addCategory(Intent.CATEGORY_BROWSABLE) @@ -365,7 +374,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addCategory(Intent.CATEGORY_BROWSABLE) @@ -375,7 +385,8 @@ class DomainVerificationCollectorTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { setAutoVerify(autoVerify) addCategory(Intent.CATEGORY_BROWSABLE) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt index 089e9db9a755..92cdb348e60d 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt @@ -20,8 +20,8 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.pm.SigningDetails -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import android.content.pm.verify.domain.DomainVerificationManager import android.content.pm.verify.domain.DomainVerificationState import android.os.Build @@ -308,7 +308,8 @@ class DomainVerificationEnforcerTest { listOf( ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { autoVerify = true addAction(Intent.ACTION_VIEW) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt index 334f503a4bfb..878bee012635 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt @@ -19,8 +19,8 @@ package com.android.server.pm.test.verify.domain import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import com.android.server.pm.pkg.PackageUserStateInternal import android.content.pm.verify.domain.DomainOwner import android.content.pm.verify.domain.DomainVerificationInfo @@ -526,7 +526,8 @@ class DomainVerificationManagerApiTest { ParsedActivityImpl().apply { domains.forEach { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { autoVerify = true addAction(Intent.ACTION_VIEW) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt index fb581d70a5fc..0369bab61f0f 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt @@ -20,8 +20,8 @@ import android.content.Intent import android.content.pm.PackageManager import android.content.pm.Signature import android.content.pm.SigningDetails -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import com.android.server.pm.pkg.PackageUserStateInternal import android.content.pm.verify.domain.DomainOwner import android.content.pm.verify.domain.DomainVerificationInfo.STATE_MODIFIABLE_VERIFIED @@ -867,7 +867,8 @@ class DomainVerificationPackageTest { whenever(targetSdkVersion) { Build.VERSION_CODES.S } whenever(isEnabled) { true } - fun baseIntent(domain: String) = ParsedIntentInfoImpl().apply { + fun baseIntent(domain: String) = ParsedIntentInfoImpl() + .apply { intentFilter.apply { addAction(Intent.ACTION_VIEW) addCategory(Intent.CATEGORY_BROWSABLE) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt index a397d563144d..3a602a8b3c46 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt @@ -19,8 +19,8 @@ package com.android.server.pm.test.verify.domain import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import com.android.server.pm.pkg.PackageUserStateInternal import android.content.pm.verify.domain.DomainVerificationState import android.os.Build @@ -196,7 +196,8 @@ class DomainVerificationSettingsMutationTest { listOf( ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { autoVerify = true addAction(Intent.ACTION_VIEW) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt index 728da4992893..ffc287736066 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt @@ -18,8 +18,8 @@ package com.android.server.pm.test.verify.domain import android.content.Intent import android.content.pm.PackageManager -import android.content.pm.parsing.component.ParsedActivityImpl -import android.content.pm.parsing.component.ParsedIntentInfoImpl +import com.android.server.pm.pkg.component.ParsedActivityImpl +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl import android.content.pm.verify.domain.DomainVerificationManager import android.content.pm.verify.domain.DomainVerificationState import android.content.pm.verify.domain.DomainVerificationUserState @@ -112,7 +112,8 @@ class DomainVerificationUserStateOverrideTest { val activityList = listOf( ParsedActivityImpl().apply { addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { autoVerify = true addAction(Intent.ACTION_VIEW) @@ -126,7 +127,8 @@ class DomainVerificationUserStateOverrideTest { } ) addIntent( - ParsedIntentInfoImpl().apply { + ParsedIntentInfoImpl() + .apply { intentFilter.apply { autoVerify = true addAction(Intent.ACTION_VIEW) diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt index 04a6eeecb320..c2e0a04e3caa 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt +++ b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt @@ -27,8 +27,6 @@ import android.content.pm.ServiceInfo import android.content.pm.Signature import android.content.pm.SigningDetails import android.content.pm.UserInfo -import android.content.pm.parsing.ParsingPackage -import android.content.pm.parsing.ParsingPackageUtils import android.content.pm.parsing.result.ParseTypeImpl import android.content.res.Resources import android.hardware.display.DisplayManager @@ -68,6 +66,8 @@ import com.android.server.pm.parsing.pkg.AndroidPackage import com.android.server.pm.parsing.pkg.PackageImpl import com.android.server.pm.parsing.pkg.ParsedPackage import com.android.server.pm.permission.PermissionManagerServiceInternal +import com.android.server.pm.pkg.parsing.ParsingPackage +import com.android.server.pm.pkg.parsing.ParsingPackageUtils import com.android.server.pm.verify.domain.DomainVerificationManagerInternal import com.android.server.testutils.TestHandler import com.android.server.testutils.mock diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index 171af7721e38..f24059c22dd7 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -182,18 +182,41 @@ filegroup { java_genrule { name: "FrameworksServicesTests_apks_as_resources", srcs: [ - ":FrameworksCoreTests_install_complete_package_info", + ":FrameworksServicesTests_install", + ":FrameworksServicesTests_install_bad_dex", + ":FrameworksServicesTests_install_complete_package_info", + ":FrameworksServicesTests_install_decl_perm", ":FrameworksServicesTests_install_intent_filters", + ":FrameworksServicesTests_install_loc_auto", + ":FrameworksServicesTests_install_loc_internal", + ":FrameworksServicesTests_install_loc_sdcard", + ":FrameworksServicesTests_install_loc_unspecified", ":FrameworksServicesTests_install_split_base", ":FrameworksServicesTests_install_split_feature_a", + ":FrameworksServicesTests_install_use_perm_good", + ":FrameworksServicesTests_install_uses_feature", ":FrameworksServicesTests_install_uses_sdk_0", ":FrameworksServicesTests_install_uses_sdk_q0", ":FrameworksServicesTests_install_uses_sdk_q0_r0", - ":FrameworksServicesTests_install_uses_sdk_r_none", ":FrameworksServicesTests_install_uses_sdk_r0", ":FrameworksServicesTests_install_uses_sdk_r5", + ":FrameworksServicesTests_install_uses_sdk_r_none", ":FrameworksServicesTests_install_uses_sdk_r0_s0", ":FrameworksServicesTests_install_uses_sdk_r0_s5", + ":FrameworksServicesTests_keyset_permdef_sa_unone", + ":FrameworksServicesTests_keyset_permuse_sa_ua_ub", + ":FrameworksServicesTests_keyset_permuse_sb_ua_ub", + ":FrameworksServicesTests_keyset_sa_ua", + ":FrameworksServicesTests_keyset_sa_ua_ub", + ":FrameworksServicesTests_keyset_sa_uab", + ":FrameworksServicesTests_keyset_sa_ub", + ":FrameworksServicesTests_keyset_sa_unone", + ":FrameworksServicesTests_keyset_sab_ua", + ":FrameworksServicesTests_keyset_sau_ub", + ":FrameworksServicesTests_keyset_sb_ua", + ":FrameworksServicesTests_keyset_sb_ub", + ":FrameworksServicesTests_keyset_splat_api", + ":FrameworksServicesTests_keyset_splata_api", ], out: ["FrameworkServicesTests_apks_as_resources.res.zip"], tools: ["soong_zip"], diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml index 587447a0752a..d9f73d9aa54e 100644 --- a/services/tests/servicestests/AndroidManifest.xml +++ b/services/tests/servicestests/AndroidManifest.xml @@ -99,6 +99,8 @@ <uses-permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/> + <uses-permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT" /> + <queries> <package android:name="com.android.servicestests.apps.suspendtestapp" /> </queries> @@ -269,4 +271,11 @@ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="com.android.frameworks.servicestests" android:label="Frameworks Services Tests"/> + <key-sets> + <key-set android:name="A" > + <public-key android:name="keyA" + android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB"/> + </key-set> + <upgrade-key-set android:name="A"/> + </key-sets> </manifest> diff --git a/core/tests/coretests/apks/install/Android.bp b/services/tests/servicestests/apks/install/Android.bp similarity index 79% rename from core/tests/coretests/apks/install/Android.bp rename to services/tests/servicestests/apks/install/Android.bp index 652b49130433..12175fdb7327 100644 --- a/core/tests/coretests/apks/install/Android.bp +++ b/services/tests/servicestests/apks/install/Android.bp @@ -8,8 +8,8 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["**/*.java"], } diff --git a/core/tests/coretests/apks/install/AndroidManifest.xml b/services/tests/servicestests/apks/install/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install/AndroidManifest.xml rename to services/tests/servicestests/apks/install/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install/res/values/strings.xml b/services/tests/servicestests/apks/install/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install/res/values/strings.xml rename to services/tests/servicestests/apks/install/res/values/strings.xml diff --git a/core/tests/coretests/apks/install_bad_dex/Android.bp b/services/tests/servicestests/apks/install_bad_dex/Android.bp similarity index 68% rename from core/tests/coretests/apks/install_bad_dex/Android.bp rename to services/tests/servicestests/apks/install_bad_dex/Android.bp index 7b96c9b47553..ad7566810a62 100644 --- a/core/tests/coretests/apks/install_bad_dex/Android.bp +++ b/services/tests/servicestests/apks/install_bad_dex/Android.bp @@ -8,25 +8,25 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install_bad_dex_", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install_bad_dex_", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["src/**/*.java"], } // Inject bad classes.dex file. java_genrule { - name: "FrameworksCoreTests_install_bad_dex", + name: "FrameworksServicesTests_install_bad_dex", tools: [ "soong_zip", "merge_zips", ], srcs: [ - ":FrameworksCoreTests_install_bad_dex_", + ":FrameworksServicesTests_install_bad_dex_", "classes.dex", ], - out: ["FrameworksCoreTests_install_bad_dex.apk"], + out: ["FrameworksServicesTests_install_bad_dex.apk"], cmd: "$(location soong_zip) -o $(genDir)/classes.dex.zip -j -f $(location classes.dex) && " + "$(location merge_zips) -ignore-duplicates $(out) $(genDir)/classes.dex.zip " + - "$(location :FrameworksCoreTests_install_bad_dex_)", + "$(location :FrameworksServicesTests_install_bad_dex_)", } diff --git a/core/tests/coretests/apks/install_bad_dex/AndroidManifest.xml b/services/tests/servicestests/apks/install_bad_dex/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_bad_dex/AndroidManifest.xml rename to services/tests/servicestests/apks/install_bad_dex/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_bad_dex/classes.dex b/services/tests/servicestests/apks/install_bad_dex/classes.dex similarity index 100% rename from core/tests/coretests/apks/install_bad_dex/classes.dex rename to services/tests/servicestests/apks/install_bad_dex/classes.dex diff --git a/core/tests/coretests/apks/install_bad_dex/res/values/strings.xml b/services/tests/servicestests/apks/install_bad_dex/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_bad_dex/res/values/strings.xml rename to services/tests/servicestests/apks/install_bad_dex/res/values/strings.xml diff --git a/core/tests/coretests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java b/services/tests/servicestests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java similarity index 100% rename from core/tests/coretests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java rename to services/tests/servicestests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java diff --git a/services/tests/servicestests/apks/install_complete_package_info/Android.bp b/services/tests/servicestests/apks/install_complete_package_info/Android.bp new file mode 100644 index 000000000000..98aa750231d7 --- /dev/null +++ b/services/tests/servicestests/apks/install_complete_package_info/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_complete_package_info", + defaults: ["FrameworksServicesTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml b/services/tests/servicestests/apks/install_complete_package_info/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml rename to services/tests/servicestests/apks/install_complete_package_info/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java b/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java similarity index 100% rename from core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java rename to services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestActivity.java diff --git a/core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java b/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java similarity index 100% rename from core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java rename to services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestProvider.java diff --git a/core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java b/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java similarity index 100% rename from core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java rename to services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestReceiver.java diff --git a/core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java b/services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java similarity index 100% rename from core/tests/coretests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java rename to services/tests/servicestests/apks/install_complete_package_info/src/com/android/frameworks/coretests/TestService.java diff --git a/core/tests/coretests/apks/install_loc_auto/Android.bp b/services/tests/servicestests/apks/install_decl_perm/Android.bp similarity index 77% rename from core/tests/coretests/apks/install_loc_auto/Android.bp rename to services/tests/servicestests/apks/install_decl_perm/Android.bp index 37daf7608a43..ef65f5de6a1b 100644 --- a/core/tests/coretests/apks/install_loc_auto/Android.bp +++ b/services/tests/servicestests/apks/install_decl_perm/Android.bp @@ -8,8 +8,8 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install_loc_auto", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install_decl_perm", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["**/*.java"], } diff --git a/core/tests/coretests/apks/install_decl_perm/AndroidManifest.xml b/services/tests/servicestests/apks/install_decl_perm/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_decl_perm/AndroidManifest.xml rename to services/tests/servicestests/apks/install_decl_perm/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_decl_perm/res/values/strings.xml b/services/tests/servicestests/apks/install_decl_perm/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_decl_perm/res/values/strings.xml rename to services/tests/servicestests/apks/install_decl_perm/res/values/strings.xml diff --git a/core/tests/coretests/apks/install_decl_perm/Android.bp b/services/tests/servicestests/apks/install_loc_auto/Android.bp similarity index 77% rename from core/tests/coretests/apks/install_decl_perm/Android.bp rename to services/tests/servicestests/apks/install_loc_auto/Android.bp index bf1f0de9672a..4e4ae526d0dc 100644 --- a/core/tests/coretests/apks/install_decl_perm/Android.bp +++ b/services/tests/servicestests/apks/install_loc_auto/Android.bp @@ -8,8 +8,8 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install_decl_perm", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install_loc_auto", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["**/*.java"], } diff --git a/core/tests/coretests/apks/install_loc_auto/AndroidManifest.xml b/services/tests/servicestests/apks/install_loc_auto/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_auto/AndroidManifest.xml rename to services/tests/servicestests/apks/install_loc_auto/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_loc_auto/res/values/strings.xml b/services/tests/servicestests/apks/install_loc_auto/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_auto/res/values/strings.xml rename to services/tests/servicestests/apks/install_loc_auto/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_loc_internal/Android.bp new file mode 100644 index 000000000000..39cdd5178a6d --- /dev/null +++ b/services/tests/servicestests/apks/install_loc_internal/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_loc_internal", + defaults: ["FrameworksServicesTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_internal/AndroidManifest.xml b/services/tests/servicestests/apks/install_loc_internal/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_internal/AndroidManifest.xml rename to services/tests/servicestests/apks/install_loc_internal/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_loc_internal/res/values/strings.xml b/services/tests/servicestests/apks/install_loc_internal/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_internal/res/values/strings.xml rename to services/tests/servicestests/apks/install_loc_internal/res/values/strings.xml diff --git a/core/tests/coretests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_loc_sdcard/Android.bp similarity index 77% rename from core/tests/coretests/apks/install_loc_internal/Android.bp rename to services/tests/servicestests/apks/install_loc_sdcard/Android.bp index 3e233132b58d..ed82793ff6e6 100644 --- a/core/tests/coretests/apks/install_loc_internal/Android.bp +++ b/services/tests/servicestests/apks/install_loc_sdcard/Android.bp @@ -8,8 +8,8 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install_loc_internal", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install_loc_sdcard", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["**/*.java"], } diff --git a/core/tests/coretests/apks/install_loc_sdcard/AndroidManifest.xml b/services/tests/servicestests/apks/install_loc_sdcard/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_sdcard/AndroidManifest.xml rename to services/tests/servicestests/apks/install_loc_sdcard/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_loc_sdcard/res/values/strings.xml b/services/tests/servicestests/apks/install_loc_sdcard/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_sdcard/res/values/strings.xml rename to services/tests/servicestests/apks/install_loc_sdcard/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_loc_unspecified/Android.bp b/services/tests/servicestests/apks/install_loc_unspecified/Android.bp new file mode 100644 index 000000000000..fd15cb8e9f92 --- /dev/null +++ b/services/tests/servicestests/apks/install_loc_unspecified/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_loc_unspecified", + defaults: ["FrameworksServicesTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_unspecified/AndroidManifest.xml b/services/tests/servicestests/apks/install_loc_unspecified/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_unspecified/AndroidManifest.xml rename to services/tests/servicestests/apks/install_loc_unspecified/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_loc_unspecified/res/values/strings.xml b/services/tests/servicestests/apks/install_loc_unspecified/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_loc_unspecified/res/values/strings.xml rename to services/tests/servicestests/apks/install_loc_unspecified/res/values/strings.xml diff --git a/core/tests/coretests/apks/install_complete_package_info/Android.bp b/services/tests/servicestests/apks/install_use_perm_good/Android.bp similarity index 77% rename from core/tests/coretests/apks/install_complete_package_info/Android.bp rename to services/tests/servicestests/apks/install_use_perm_good/Android.bp index 3fee0c6e7f7c..959ffbcc48b1 100644 --- a/core/tests/coretests/apks/install_complete_package_info/Android.bp +++ b/services/tests/servicestests/apks/install_use_perm_good/Android.bp @@ -8,8 +8,8 @@ package { } android_test_helper_app { - name: "FrameworksCoreTests_install_complete_package_info", - defaults: ["FrameworksCoreTests_apks_defaults"], + name: "FrameworksServicesTests_install_use_perm_good", + defaults: ["FrameworksServicesTests_apks_defaults"], srcs: ["**/*.java"], } diff --git a/core/tests/coretests/apks/install_use_perm_good/AndroidManifest.xml b/services/tests/servicestests/apks/install_use_perm_good/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_use_perm_good/AndroidManifest.xml rename to services/tests/servicestests/apks/install_use_perm_good/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_use_perm_good/res/values/strings.xml b/services/tests/servicestests/apks/install_use_perm_good/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_use_perm_good/res/values/strings.xml rename to services/tests/servicestests/apks/install_use_perm_good/res/values/strings.xml diff --git a/services/tests/servicestests/apks/install_uses_feature/Android.bp b/services/tests/servicestests/apks/install_uses_feature/Android.bp new file mode 100644 index 000000000000..fa25af4c5b30 --- /dev/null +++ b/services/tests/servicestests/apks/install_uses_feature/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_feature", + defaults: ["FrameworksServicesTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_uses_feature/AndroidManifest.xml b/services/tests/servicestests/apks/install_uses_feature/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/install_uses_feature/AndroidManifest.xml rename to services/tests/servicestests/apks/install_uses_feature/AndroidManifest.xml diff --git a/core/tests/coretests/apks/install_uses_feature/res/values/strings.xml b/services/tests/servicestests/apks/install_uses_feature/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/install_uses_feature/res/values/strings.xml rename to services/tests/servicestests/apks/install_uses_feature/res/values/strings.xml diff --git a/services/tests/servicestests/apks/keyset/Android.bp b/services/tests/servicestests/apks/keyset/Android.bp new file mode 100644 index 000000000000..ce7919c9d0a8 --- /dev/null +++ b/services/tests/servicestests/apks/keyset/Android.bp @@ -0,0 +1,129 @@ +//apks signed by keyset_A +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sa_unone", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "uNone/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sa_ua", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sa_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sa_uab", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "uAB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sa_ua_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "uAuB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_permdef_sa_unone", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "permDef/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_permuse_sa_ua_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_B +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sb_ua", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_B_cert", + manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sb_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_B_cert", + manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_keyset_permuse_sb_ua_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_B_cert", + manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_A and keyset_B +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sab_ua", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + additional_certificates: [":FrameworksServicesTests_keyset_B_cert"], + manifest: "uA/AndroidManifest.xml", +} + +//apks signed by keyset_A and unit_test +android_test_helper_app { + name: "FrameworksServicesTests_keyset_sau_ub", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksServicesTests_keyset_A_cert", + additional_certificates: [":FrameworksServicesTests_keyset_B_cert"], + manifest: "uB/AndroidManifest.xml", +} + +//apks signed by platform only +android_test_helper_app { + name: "FrameworksServicesTests_keyset_splat_api", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: "platform", + manifest: "api_test/AndroidManifest.xml", +} + +//apks signed by platform and keyset_A +android_test_helper_app { + name: "FrameworksServicesTests_keyset_splata_api", + defaults: ["FrameworksServicesTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: "platform", + additional_certificates: [":FrameworksServicesTests_keyset_A_cert"], + manifest: "api_test/AndroidManifest.xml", +} diff --git a/core/tests/coretests/apks/keyset/api_test/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/api_test/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/api_test/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/api_test/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/permDef/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/permDef/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/permDef/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/permDef/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/permUse/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/permUse/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/res/values/strings.xml b/services/tests/servicestests/apks/keyset/res/values/strings.xml similarity index 100% rename from core/tests/coretests/apks/keyset/res/values/strings.xml rename to services/tests/servicestests/apks/keyset/res/values/strings.xml diff --git a/core/tests/coretests/apks/keyset/uA/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/uA/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/uA/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/uA/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/uAB/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/uAB/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/uAuB/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/uAuB/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/uB/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/uB/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/uB/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/uB/AndroidManifest.xml diff --git a/core/tests/coretests/apks/keyset/uNone/AndroidManifest.xml b/services/tests/servicestests/apks/keyset/uNone/AndroidManifest.xml similarity index 100% rename from core/tests/coretests/apks/keyset/uNone/AndroidManifest.xml rename to services/tests/servicestests/apks/keyset/uNone/AndroidManifest.xml diff --git a/services/tests/servicestests/certs/Android.bp b/services/tests/servicestests/certs/Android.bp new file mode 100644 index 000000000000..61367c0a370b --- /dev/null +++ b/services/tests/servicestests/certs/Android.bp @@ -0,0 +1,20 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + // SPDX-license-identifier-MIT + // SPDX-license-identifier-Unicode-DFS + default_applicable_licenses: ["frameworks_base_license"], +} + +android_app_certificate { + name: "FrameworksServicesTests_keyset_A_cert", + certificate: "keyset_A", +} + +android_app_certificate { + name: "FrameworksServicesTests_keyset_B_cert", + certificate: "keyset_B", +} diff --git a/services/tests/servicestests/certs/README b/services/tests/servicestests/certs/README new file mode 100644 index 000000000000..00917a188934 --- /dev/null +++ b/services/tests/servicestests/certs/README @@ -0,0 +1,4 @@ +Generate with: + +development/tools/make_key unit_test '/CN=unit_test' +development/tools/make_key unit_test_diff '/CN=unit_test_diff' diff --git a/core/tests/coretests/certs/keyset_A.pk8 b/services/tests/servicestests/certs/keyset_A.pk8 similarity index 100% rename from core/tests/coretests/certs/keyset_A.pk8 rename to services/tests/servicestests/certs/keyset_A.pk8 diff --git a/core/tests/coretests/certs/keyset_A.x509.pem b/services/tests/servicestests/certs/keyset_A.x509.pem similarity index 100% rename from core/tests/coretests/certs/keyset_A.x509.pem rename to services/tests/servicestests/certs/keyset_A.x509.pem diff --git a/core/tests/coretests/certs/keyset_B.pk8 b/services/tests/servicestests/certs/keyset_B.pk8 similarity index 100% rename from core/tests/coretests/certs/keyset_B.pk8 rename to services/tests/servicestests/certs/keyset_B.pk8 diff --git a/core/tests/coretests/certs/keyset_B.x509.pem b/services/tests/servicestests/certs/keyset_B.x509.pem similarity index 100% rename from core/tests/coretests/certs/keyset_B.x509.pem rename to services/tests/servicestests/certs/keyset_B.x509.pem diff --git a/core/tests/coretests/res/raw/install_app1_cert1 b/services/tests/servicestests/res/raw/install_app1_cert1 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert1 rename to services/tests/servicestests/res/raw/install_app1_cert1 diff --git a/core/tests/coretests/res/raw/install_app1_cert1_cert2 b/services/tests/servicestests/res/raw/install_app1_cert1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert1_cert2 rename to services/tests/servicestests/res/raw/install_app1_cert1_cert2 diff --git a/core/tests/coretests/res/raw/install_app1_cert2 b/services/tests/servicestests/res/raw/install_app1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert2 rename to services/tests/servicestests/res/raw/install_app1_cert2 diff --git a/core/tests/coretests/res/raw/install_app1_cert3 b/services/tests/servicestests/res/raw/install_app1_cert3 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert3 rename to services/tests/servicestests/res/raw/install_app1_cert3 diff --git a/core/tests/coretests/res/raw/install_app1_cert3_cert4 b/services/tests/servicestests/res/raw/install_app1_cert3_cert4 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert3_cert4 rename to services/tests/servicestests/res/raw/install_app1_cert3_cert4 diff --git a/core/tests/coretests/res/raw/install_app1_cert5 b/services/tests/servicestests/res/raw/install_app1_cert5 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert5 rename to services/tests/servicestests/res/raw/install_app1_cert5 diff --git a/core/tests/coretests/res/raw/install_app1_cert5_rotated_cert6 b/services/tests/servicestests/res/raw/install_app1_cert5_rotated_cert6 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert5_rotated_cert6 rename to services/tests/servicestests/res/raw/install_app1_cert5_rotated_cert6 diff --git a/core/tests/coretests/res/raw/install_app1_cert6 b/services/tests/servicestests/res/raw/install_app1_cert6 similarity index 100% rename from core/tests/coretests/res/raw/install_app1_cert6 rename to services/tests/servicestests/res/raw/install_app1_cert6 diff --git a/core/tests/coretests/res/raw/install_app1_unsigned b/services/tests/servicestests/res/raw/install_app1_unsigned similarity index 100% rename from core/tests/coretests/res/raw/install_app1_unsigned rename to services/tests/servicestests/res/raw/install_app1_unsigned diff --git a/core/tests/coretests/res/raw/install_app2_cert1 b/services/tests/servicestests/res/raw/install_app2_cert1 similarity index 100% rename from core/tests/coretests/res/raw/install_app2_cert1 rename to services/tests/servicestests/res/raw/install_app2_cert1 diff --git a/core/tests/coretests/res/raw/install_app2_cert1_cert2 b/services/tests/servicestests/res/raw/install_app2_cert1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_app2_cert1_cert2 rename to services/tests/servicestests/res/raw/install_app2_cert1_cert2 diff --git a/core/tests/coretests/res/raw/install_app2_cert2 b/services/tests/servicestests/res/raw/install_app2_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_app2_cert2 rename to services/tests/servicestests/res/raw/install_app2_cert2 diff --git a/core/tests/coretests/res/raw/install_app2_cert3 b/services/tests/servicestests/res/raw/install_app2_cert3 similarity index 100% rename from core/tests/coretests/res/raw/install_app2_cert3 rename to services/tests/servicestests/res/raw/install_app2_cert3 diff --git a/core/tests/coretests/res/raw/install_app2_cert5_rotated_cert6 b/services/tests/servicestests/res/raw/install_app2_cert5_rotated_cert6 similarity index 100% rename from core/tests/coretests/res/raw/install_app2_cert5_rotated_cert6 rename to services/tests/servicestests/res/raw/install_app2_cert5_rotated_cert6 diff --git a/core/tests/coretests/res/raw/install_app2_unsigned b/services/tests/servicestests/res/raw/install_app2_unsigned similarity index 100% rename from core/tests/coretests/res/raw/install_app2_unsigned rename to services/tests/servicestests/res/raw/install_app2_unsigned diff --git a/core/tests/coretests/res/raw/install_shared1_cert1 b/services/tests/servicestests/res/raw/install_shared1_cert1 similarity index 100% rename from core/tests/coretests/res/raw/install_shared1_cert1 rename to services/tests/servicestests/res/raw/install_shared1_cert1 diff --git a/core/tests/coretests/res/raw/install_shared1_cert1_cert2 b/services/tests/servicestests/res/raw/install_shared1_cert1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_shared1_cert1_cert2 rename to services/tests/servicestests/res/raw/install_shared1_cert1_cert2 diff --git a/core/tests/coretests/res/raw/install_shared1_cert2 b/services/tests/servicestests/res/raw/install_shared1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_shared1_cert2 rename to services/tests/servicestests/res/raw/install_shared1_cert2 diff --git a/core/tests/coretests/res/raw/install_shared1_unsigned b/services/tests/servicestests/res/raw/install_shared1_unsigned similarity index 100% rename from core/tests/coretests/res/raw/install_shared1_unsigned rename to services/tests/servicestests/res/raw/install_shared1_unsigned diff --git a/core/tests/coretests/res/raw/install_shared2_cert1 b/services/tests/servicestests/res/raw/install_shared2_cert1 similarity index 100% rename from core/tests/coretests/res/raw/install_shared2_cert1 rename to services/tests/servicestests/res/raw/install_shared2_cert1 diff --git a/core/tests/coretests/res/raw/install_shared2_cert1_cert2 b/services/tests/servicestests/res/raw/install_shared2_cert1_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_shared2_cert1_cert2 rename to services/tests/servicestests/res/raw/install_shared2_cert1_cert2 diff --git a/core/tests/coretests/res/raw/install_shared2_cert2 b/services/tests/servicestests/res/raw/install_shared2_cert2 similarity index 100% rename from core/tests/coretests/res/raw/install_shared2_cert2 rename to services/tests/servicestests/res/raw/install_shared2_cert2 diff --git a/core/tests/coretests/res/raw/install_shared2_unsigned b/services/tests/servicestests/res/raw/install_shared2_unsigned similarity index 100% rename from core/tests/coretests/res/raw/install_shared2_unsigned rename to services/tests/servicestests/res/raw/install_shared2_unsigned diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java index 0f6dfda4bf63..13a8f69358b6 100644 --- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java @@ -33,12 +33,12 @@ import android.content.pm.ApplicationInfo; import android.content.pm.Signature; import android.content.pm.SigningDetails; import android.content.pm.UserInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedActivityImpl; -import android.content.pm.parsing.component.ParsedInstrumentationImpl; -import android.content.pm.parsing.component.ParsedIntentInfoImpl; -import android.content.pm.parsing.component.ParsedProviderImpl; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedActivityImpl; +import com.android.server.pm.pkg.component.ParsedInstrumentationImpl; +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl; +import com.android.server.pm.pkg.component.ParsedProviderImpl; import android.os.Build; import android.os.Process; import android.os.UserHandle; diff --git a/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java b/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java index 54ab133d760e..e137c374b4cc 100644 --- a/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java @@ -29,8 +29,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.ParsingPackageUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.os.Build; import android.platform.test.annotations.Presubmit; diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java index 6b6d84af5f60..d7e3825bf9d0 100644 --- a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java @@ -17,7 +17,7 @@ package com.android.server.pm; -import static android.content.pm.parsing.ParsingPackageUtils.parsePublicKey; +import static android.content.pm.parsing.FrameworkParsingPackageUtils.parsePublicKey; import android.content.pm.Signature; import android.platform.test.annotations.Presubmit; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index 9d672405603d..6c9a60ac47fb 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -22,7 +22,7 @@ import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; import static android.content.pm.SuspendDialogInfo.BUTTON_ACTION_MORE_DETAILS; import static android.content.pm.SuspendDialogInfo.BUTTON_ACTION_UNSUSPEND; -import static android.content.pm.parsing.ParsingPackageUtils.parsePublicKey; +import static android.content.pm.parsing.FrameworkParsingPackageUtils.parsePublicKey; import static android.content.res.Resources.ID_NULL; import static org.hamcrest.CoreMatchers.equalTo; @@ -43,6 +43,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.SuspendDialogInfo; import android.content.pm.UserInfo; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.os.BaseBundle; import android.os.PersistableBundle; import android.os.Process; diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java similarity index 99% rename from core/tests/coretests/src/android/content/pm/PackageManagerTests.java rename to services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java index c2519ca0f238..b621a4408f40 100644 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.content.pm; +package com.android.server.pm; import static android.system.OsConstants.S_IFDIR; import static android.system.OsConstants.S_IFMT; @@ -32,10 +32,16 @@ import android.content.IIntentSender; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; +import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageDeleteObserver; +import android.content.pm.KeySet; +import android.content.pm.PackageInfo; +import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionParams; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; +import android.content.pm.PermissionInfo; +import android.content.pm.VerifierDeviceIdentity; import android.content.pm.parsing.result.ParseResult; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; @@ -63,8 +69,10 @@ import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; import androidx.test.filters.Suppress; -import com.android.frameworks.coretests.R; +import com.android.frameworks.servicestests.R; import com.android.internal.content.PackageHelper; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import dalvik.system.VMRuntime; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java index c888524a6d00..d8ecf20b98c4 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java @@ -15,7 +15,7 @@ */ package com.android.server.pm; -import static android.content.pm.permission.CompatibilityPermissionInfo.COMPAT_PERMS; +import static com.android.server.pm.permission.CompatibilityPermissionInfo.COMPAT_PERMS; import static com.google.common.truth.Truth.assertWithMessage; @@ -43,27 +43,6 @@ import android.content.pm.PackageManager.Property; import android.content.pm.ServiceInfo; import android.content.pm.Signature; import android.content.pm.SigningDetails; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedActivityImpl; -import android.content.pm.parsing.component.ParsedApexSystemService; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedInstrumentationImpl; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedIntentInfoImpl; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionGroup; -import android.content.pm.parsing.component.ParsedPermissionGroupImpl; -import android.content.pm.parsing.component.ParsedPermissionImpl; -import android.content.pm.parsing.component.ParsedPermissionUtils; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedProviderImpl; -import android.content.pm.parsing.component.ParsedService; -import android.content.pm.parsing.component.ParsedServiceImpl; -import android.content.pm.parsing.component.ParsedUsesPermission; -import android.content.pm.parsing.component.ParsedUsesPermissionImpl; -import android.content.pm.permission.CompatibilityPermissionInfo; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -85,7 +64,28 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.PackageImpl; import com.android.server.pm.parsing.pkg.ParsedPackage; +import com.android.server.pm.permission.CompatibilityPermissionInfo; import com.android.server.pm.pkg.PackageUserState; +import com.android.server.pm.pkg.component.ParsedActivity; +import com.android.server.pm.pkg.component.ParsedActivityImpl; +import com.android.server.pm.pkg.component.ParsedApexSystemService; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedInstrumentation; +import com.android.server.pm.pkg.component.ParsedInstrumentationImpl; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedIntentInfoImpl; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionGroup; +import com.android.server.pm.pkg.component.ParsedPermissionGroupImpl; +import com.android.server.pm.pkg.component.ParsedPermissionImpl; +import com.android.server.pm.pkg.component.ParsedPermissionUtils; +import com.android.server.pm.pkg.component.ParsedProvider; +import com.android.server.pm.pkg.component.ParsedProviderImpl; +import com.android.server.pm.pkg.component.ParsedService; +import com.android.server.pm.pkg.component.ParsedServiceImpl; +import com.android.server.pm.pkg.component.ParsedUsesPermission; +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl; +import com.android.server.pm.pkg.parsing.ParsingPackage; import org.junit.Before; import org.junit.Rule; diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java index 28f24f2b55ee..7ff8eec70a10 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java @@ -43,8 +43,8 @@ import android.Manifest; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.SharedLibraryInfo; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.component.ParsedUsesPermissionImpl; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl; import android.content.res.TypedArray; import android.os.Environment; import android.os.UserHandle; diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java index 1dcb0b7eb159..7c8bbec458ee 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.content.pm.SharedLibraryInfo; -import android.content.pm.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackage; import android.platform.test.annotations.Presubmit; import android.util.SparseArray; diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt deleted file mode 100644 index 4059a496e8ea..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.parsing - -import android.Manifest -import android.content.pm.ApplicationInfo -import android.content.pm.PackageInfo -import android.content.pm.PackageManager -import android.content.pm.PackageParser -import android.platform.test.annotations.Postsubmit -import com.android.internal.util.ArrayUtils -import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.appInfo -import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.pkgInfo -import com.android.server.pm.parsing.pkg.AndroidPackage -import com.google.common.truth.Truth.assertThat -import com.google.common.truth.Truth.assertWithMessage -import org.junit.Test -import org.junit.runner.RunWith -import org.junit.runners.Parameterized - -/** - * Verifies that missing/adding [PackageManager] flags adds/remove the appropriate fields from the - * [PackageInfo] or [ApplicationInfo] results. - * - * This test has to be updated manually whenever the info generation behavior changes, since - * there's no single place where flag -> field is defined besides this test. - */ -@Postsubmit -@RunWith(Parameterized::class) -class AndroidPackageInfoFlagBehaviorTest : AndroidPackageParsingTestBase() { - - companion object { - - data class Param<T> constructor( - val flag: Int, - val logTag: String, - val oldPkgFunction: (pkg: PackageParser.Package, flags: Int) -> T?, - val newPkgFunction: (pkg: AndroidPackage, flags: Int) -> T?, - val fieldFunction: (T) -> List<Any?> - ) { - companion object { - fun pkgInfo(flag: Int, fieldFunction: (PackageInfo) -> List<Any?>) = Param( - flag, PackageInfo::class.java.simpleName, - ::oldPackageInfo, ::newPackageInfo, fieldFunction - ) - - fun appInfo(flag: Int, fieldFunction: (ApplicationInfo) -> List<Any?>) = Param( - flag, ApplicationInfo::class.java.simpleName, - { pkg, flags -> oldAppInfo(pkg, flags) }, - { pkg, flags -> newAppInfo(pkg, flags) }, - fieldFunction - ) - } - - override fun toString(): String { - val hex = Integer.toHexString(flag) - val fromRight = Integer.toBinaryString(flag).reversed().indexOf('1') - return "$logTag $hex | 1 shl $fromRight" - } - } - - @JvmStatic - @Parameterized.Parameters(name = "{0}") - fun parameters() = arrayOf( - pkgInfo(PackageManager.GET_ACTIVITIES) { listOf(it.activities) }, - pkgInfo(PackageManager.GET_GIDS) { listOf(it.gids) }, - pkgInfo(PackageManager.GET_INSTRUMENTATION) { listOf(it.instrumentation) }, - pkgInfo(PackageManager.GET_META_DATA) { listOf(it.applicationInfo.metaData) }, - pkgInfo(PackageManager.GET_PROVIDERS) { listOf(it.providers) }, - pkgInfo(PackageManager.GET_RECEIVERS) { listOf(it.receivers) }, - pkgInfo(PackageManager.GET_SERVICES) { listOf(it.services) }, - pkgInfo(PackageManager.GET_SIGNATURES) { listOf(it.signatures) }, - pkgInfo(PackageManager.GET_SIGNING_CERTIFICATES) { listOf(it.signingInfo) }, - pkgInfo(PackageManager.GET_SHARED_LIBRARY_FILES) { - it.applicationInfo.run { listOf(sharedLibraryFiles, sharedLibraryFiles) } - }, - pkgInfo(PackageManager.GET_CONFIGURATIONS) { - listOf(it.configPreferences, it.reqFeatures, it.featureGroups) - }, - pkgInfo(PackageManager.GET_PERMISSIONS) { - listOf( - it.permissions, - // Strip compatibility permission added in T - it.requestedPermissions?.filter { x -> - x != Manifest.permission.POST_NOTIFICATIONS - }?.ifEmpty { null }?.toTypedArray(), - // Strip the flag from compatibility permission added in T - it.requestedPermissionsFlags?.filterIndexed { index, _ -> - index != ArrayUtils.indexOf(it.requestedPermissions, - Manifest.permission.POST_NOTIFICATIONS) - }?.ifEmpty { null }?.toTypedArray()) - }, - appInfo(PackageManager.GET_META_DATA) { listOf(it.metaData) }, - appInfo(PackageManager.GET_SHARED_LIBRARY_FILES) { - listOf(it.sharedLibraryFiles, it.sharedLibraryFiles) - } - ) - } - - @Parameterized.Parameter(0) - lateinit var param: Param<Any> - - @Test - fun fieldPresence() { - oldPackages.asSequence().zip(newPackages.asSequence()) - .forEach { (old, new) -> - val oldWithFlag = param.oldPkgFunction(old, param.flag) - val newWithFlag = param.newPkgFunction(new, param.flag) - val oldFieldList = oldWithFlag?.let(param.fieldFunction).orEmpty() - val newFieldList = newWithFlag?.let(param.fieldFunction).orEmpty() - - oldFieldList.zip(newFieldList).forEach { - assertWithMessage(new.packageName).that(it.second).apply { - // Assert same null-ness as old logic - if (it.first == null) { - isNull() - } else { - isNotNull() - } - } - } - } - } - - @Test - fun fieldAbsence() { - newPackages.forEach { - val newWithoutFlag = param.newPkgFunction(it, 0) - val newFieldListWithoutFlag = newWithoutFlag?.let(param.fieldFunction).orEmpty() - assertThat(newFieldListWithoutFlag.filterNotNull()).isEmpty() - } - } -} diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt deleted file mode 100644 index 574921cdbd05..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingEquivalenceTest.kt +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.parsing - -import android.content.pm.PackageManager -import android.platform.test.annotations.Postsubmit -import androidx.test.filters.LargeTest -import com.google.common.truth.Expect -import org.junit.Rule -import org.junit.Test - -/** - * Collects APKs from the device and verifies that the new parsing behavior outputs - * the same exposed Info object as the old parsing logic. - */ -@Postsubmit -class AndroidPackageParsingEquivalenceTest : AndroidPackageParsingTestBase() { - - @get:Rule - val expect = Expect.create() - - @Test - fun applicationInfoEquality() { - val flags = PackageManager.GET_META_DATA or PackageManager.GET_SHARED_LIBRARY_FILES - val oldAppInfo = oldPackages.asSequence().map { oldAppInfo(it, flags) } - val newAppInfo = newPackages.asSequence().map { newAppInfo(it, flags) } - oldAppInfo.zip(newAppInfo).forEach { - val firstName = it.first?.packageName - val secondName = it.second?.packageName - val packageName = if (firstName == secondName) { - "$firstName" - } else { - "$firstName | $secondName" - } - expect.withMessage("${it.first?.sourceDir} $packageName") - .that(it.first?.dumpToString()) - .isEqualTo(it.second?.dumpToString()) - } - } - - @LargeTest - @Test - fun packageInfoEquality() { - val flags = PackageManager.GET_ACTIVITIES or - PackageManager.GET_CONFIGURATIONS or - PackageManager.GET_GIDS or - PackageManager.GET_INSTRUMENTATION or - PackageManager.GET_META_DATA or - PackageManager.GET_PERMISSIONS or - PackageManager.GET_PROVIDERS or - PackageManager.GET_RECEIVERS or - PackageManager.GET_SERVICES or - PackageManager.GET_SHARED_LIBRARY_FILES or - PackageManager.GET_SIGNATURES or - PackageManager.GET_SIGNING_CERTIFICATES or - PackageManager.MATCH_DIRECT_BOOT_UNAWARE or - PackageManager.MATCH_DIRECT_BOOT_AWARE - val oldPackageInfo = oldPackages.asSequence().map { oldPackageInfo(it, flags) } - val newPackageInfo = newPackages.asSequence().map { newPackageInfo(it, flags) } - - oldPackageInfo.zip(newPackageInfo).forEach { - val firstName = it.first?.packageName - val secondName = it.second?.packageName - val packageName = if (firstName == secondName) { - "$firstName" - } else { - "$firstName | $secondName" - } - - // Main components are asserted independently to separate the failures. Otherwise the - // comparison would include every component in one massive string. - - val prefix = "${it.first?.applicationInfo?.sourceDir} $packageName" - - expect.withMessage("$prefix PackageInfo") - .that(it.second?.dumpToString()) - .isEqualTo(it.first?.dumpToString()) - - expect.withMessage("$prefix ApplicationInfo") - .that(it.second?.applicationInfo?.dumpToString()) - .isEqualTo(it.first?.applicationInfo?.dumpToString()) - - val firstActivityNames = it.first?.activities?.map { it.name } ?: emptyList() - val secondActivityNames = it.second?.activities?.map { it.name } ?: emptyList() - expect.withMessage("$prefix activities") - .that(secondActivityNames) - .containsExactlyElementsIn(firstActivityNames) - .inOrder() - - if (!it.first?.activities.isNullOrEmpty() && !it.second?.activities.isNullOrEmpty()) { - it.first?.activities?.zip(it.second?.activities!!)?.forEach { - expect.withMessage("$prefix ${it.first.name}") - .that(it.second.dumpToString()) - .isEqualTo(it.first.dumpToString()) - } - } - - val firstReceiverNames = it.first?.receivers?.map { it.name } ?: emptyList() - val secondReceiverNames = it.second?.receivers?.map { it.name } ?: emptyList() - expect.withMessage("$prefix receivers") - .that(secondReceiverNames) - .containsExactlyElementsIn(firstReceiverNames) - .inOrder() - - if (!it.first?.receivers.isNullOrEmpty() && !it.second?.receivers.isNullOrEmpty()) { - it.first?.receivers?.zip(it.second?.receivers!!)?.forEach { - expect.withMessage("$prefix ${it.first.name}") - .that(it.second.dumpToString()) - .isEqualTo(it.first.dumpToString()) - } - } - - val firstProviderNames = it.first?.providers?.map { it.name } ?: emptyList() - val secondProviderNames = it.second?.providers?.map { it.name } ?: emptyList() - expect.withMessage("$prefix providers") - .that(secondProviderNames) - .containsExactlyElementsIn(firstProviderNames) - .inOrder() - - if (!it.first?.providers.isNullOrEmpty() && !it.second?.providers.isNullOrEmpty()) { - it.first?.providers?.zip(it.second?.providers!!)?.forEach { - expect.withMessage("$prefix ${it.first.name}") - .that(it.second.dumpToString()) - .isEqualTo(it.first.dumpToString()) - } - } - - val firstServiceNames = it.first?.services?.map { it.name } ?: emptyList() - val secondServiceNames = it.second?.services?.map { it.name } ?: emptyList() - expect.withMessage("$prefix services") - .that(secondServiceNames) - .containsExactlyElementsIn(firstServiceNames) - .inOrder() - - if (!it.first?.services.isNullOrEmpty() && !it.second?.services.isNullOrEmpty()) { - it.first?.services?.zip(it.second?.services!!)?.forEach { - expect.withMessage("$prefix ${it.first.name}") - .that(it.second.dumpToString()) - .isEqualTo(it.first.dumpToString()) - } - } - } - } -} diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt deleted file mode 100644 index 122661ea93da..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt +++ /dev/null @@ -1,557 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.parsing - -import android.Manifest -import android.content.Context -import android.content.pm.ActivityInfo -import android.content.pm.ApplicationInfo -import android.content.pm.ConfigurationInfo -import android.content.pm.FeatureInfo -import android.content.pm.InstrumentationInfo -import android.content.pm.PackageInfo -import android.content.pm.PackageParser -import android.content.pm.PermissionInfo -import android.content.pm.ProviderInfo -import android.content.pm.ServiceInfo -import android.content.pm.parsing.ParsingPackageUtils -import android.os.Bundle -import android.os.Debug -import android.os.Environment -import android.os.Process -import android.util.SparseArray -import androidx.test.platform.app.InstrumentationRegistry -import com.android.internal.util.ArrayUtils -import com.android.server.pm.PackageManagerService -import com.android.server.pm.parsing.pkg.AndroidPackage -import com.android.server.pm.pkg.PackageStateInternal -import com.android.server.pm.pkg.PackageStateUnserialized -import com.android.server.pm.pkg.PackageUserStateImpl -import com.android.server.testutils.mockThrowOnUnmocked -import com.android.server.testutils.whenever -import org.junit.BeforeClass -import org.mockito.Mockito.anyInt -import java.io.File - -open class AndroidPackageParsingTestBase { - - companion object { - - private const val VERIFY_ALL_APKS = true - - // For auditing memory usage differences to /sdcard/AndroidPackageParsingTestBase.hprof - private const val DUMP_HPROF_TO_EXTERNAL = false - - val context: Context = InstrumentationRegistry.getInstrumentation().getContext() - protected val packageParser = PackageParser().apply { - setOnlyCoreApps(false) - setDisplayMetrics(context.resources.displayMetrics) - setCallback { false /* hasFeature */ } - } - - protected val packageParser2 = PackageParser2.forParsingFileWithDefaults() - - /** - * It would be difficult to mock all possibilities, so just use the APKs on device. - * Unfortunately, this means the device must be bootable to verify potentially - * boot-breaking behavior. - */ - private val apks = mutableListOf(File(Environment.getRootDirectory(), "framework")) - .apply { - @Suppress("ConstantConditionIf") - if (VERIFY_ALL_APKS) { - this += (PackageManagerService.SYSTEM_PARTITIONS) - .flatMap { - listOfNotNull(it.privAppFolder, it.appFolder, it.overlayFolder) - } - } - } - .flatMap { - it.walkTopDown() - .filter { file -> file.name.endsWith(".apk") } - .toList() - } - .distinct() - - private val dummyUserState = - PackageUserStateImpl() - - val oldPackages = mutableListOf<PackageParser.Package>() - - val newPackages = mutableListOf<AndroidPackage>() - - @Suppress("ConstantConditionIf") - @JvmStatic - @BeforeClass - fun setUpPackages() { - var uid = Process.FIRST_APPLICATION_UID - apks.mapNotNull { - try { - packageParser.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false) to - packageParser2.parsePackage(it, ParsingPackageUtils.PARSE_IS_SYSTEM_DIR, - false) - } catch (ignored: Exception) { - // It is intentional that a failure of either call here will result in failing - // both. Having null on one side would mean nothing to compare. Due to the - // nature of presubmit, this may not be caused by the change being tested, so - // it's unhelpful to consider it a failure. Actual parsing issues will be - // reported by SystemPartitionParseTest in postsubmit. - null - } - }.forEach { (old, new) -> - // Assign an arbitrary UID. This is normally done after parsing completes, inside - // PackageManagerService, but since that code isn't run here, need to mock it. This - // is equivalent to what the system would assign. - old.applicationInfo.uid = uid - new.uid = uid - uid++ - - oldPackages += old - newPackages += new.hideAsFinal() - } - - if (DUMP_HPROF_TO_EXTERNAL) { - System.gc() - Environment.getExternalStorageDirectory() - .resolve( - "${AndroidPackageParsingTestBase::class.java.simpleName}.hprof") - .absolutePath - .run(Debug::dumpHprofData) - } - } - - fun oldAppInfo( - pkg: PackageParser.Package, - flags: Int = 0, - userId: Int = 0 - ): ApplicationInfo? { - return PackageParser.generateApplicationInfo(pkg, flags, dummyUserState, userId) - } - - fun newAppInfo( - pkg: AndroidPackage, - flags: Int = 0, - userId: Int = 0 - ): ApplicationInfo? { - return PackageInfoUtils.generateApplicationInfo(pkg, flags.toLong(), dummyUserState, - userId, mockPkgSetting(pkg)) - } - - fun newAppInfoWithoutState( - pkg: AndroidPackage, - flags: Int = 0, - userId: Int = 0 - ): ApplicationInfo? { - return PackageInfoUtils.generateApplicationInfo(pkg, flags.toLong(), dummyUserState, - userId, mockPkgSetting(pkg)) - } - - fun oldPackageInfo(pkg: PackageParser.Package, flags: Int = 0): PackageInfo? { - return PackageParser.generatePackageInfo(pkg, intArrayOf(), flags, 5, 6, emptySet(), - dummyUserState) - } - - fun newPackageInfo(pkg: AndroidPackage, flags: Int = 0): PackageInfo? { - return PackageInfoUtils.generate(pkg, intArrayOf(), flags.toLong(), 5, 6, emptySet(), - dummyUserState, 0, mockPkgSetting(pkg)) - } - - private fun mockPkgSetting(aPkg: AndroidPackage) = - mockThrowOnUnmocked<PackageStateInternal> { - whenever(pkg) { aPkg } - whenever(appId) { aPkg.uid } - whenever(transientState) { PackageStateUnserialized() } - whenever(getUserStateOrDefault(anyInt())) { dummyUserState } - whenever(categoryOverride) { ApplicationInfo.CATEGORY_UNDEFINED } - whenever(primaryCpuAbi) { null } - whenever(secondaryCpuAbi) { null } - } - } - - // The following methods dump an exact set of fields from the object to compare, because - // 1. comprehensive equals/toStrings do not exist on all of the Info objects, and - // 2. the test must only verify fields that [PackageParser.Package] can actually fill, as - // no new functionality will be added to it. - - // The following methods prepend "this." because @hide APIs can cause an IDE to auto-import - // the R.attr constant instead of referencing the field in an attempt to fix the error. - - // It's difficult to comment out a line in a triple quoted string, so this is used instead - // to ignore specific fields. A comment is required to explain why a field was ignored. - private fun Any?.ignored(comment: String): String = "IGNORED" - - protected fun ApplicationInfo.dumpToString() = """ - appComponentFactory=${this.appComponentFactory} - backupAgentName=${this.backupAgentName} - banner=${this.banner} - category=${this.category} - classLoaderName=${this.classLoaderName} - className=${this.className} - compatibleWidthLimitDp=${this.compatibleWidthLimitDp} - compileSdkVersion=${this.compileSdkVersion} - compileSdkVersionCodename=${this.compileSdkVersionCodename} - credentialProtectedDataDir=${this.credentialProtectedDataDir - .ignored("Deferred pre-R, but assigned immediately in R")} - crossProfile=${this.crossProfile.ignored("Added in R")} - dataDir=${this.dataDir.ignored("Deferred pre-R, but assigned immediately in R")} - descriptionRes=${this.descriptionRes} - deviceProtectedDataDir=${this.deviceProtectedDataDir - .ignored("Deferred pre-R, but assigned immediately in R")} - enabled=${this.enabled} - enabledSetting=${this.enabledSetting} - flags=${Integer.toBinaryString(this.flags)} - fullBackupContent=${this.fullBackupContent} - gwpAsanMode=${this.gwpAsanMode.ignored("Added in R")} - hiddenUntilInstalled=${this.hiddenUntilInstalled} - icon=${this.icon} - iconRes=${this.iconRes} - installLocation=${this.installLocation} - labelRes=${this.labelRes} - largestWidthLimitDp=${this.largestWidthLimitDp} - logo=${this.logo} - longVersionCode=${this.longVersionCode} - ${"".ignored("mHiddenApiPolicy is a private field")} - manageSpaceActivityName=${this.manageSpaceActivityName} - maxAspectRatio=${this.maxAspectRatio} - metaData=${this.metaData.dumpToString()} - minAspectRatio=${this.minAspectRatio} - minSdkVersion=${this.minSdkVersion} - name=${this.name} - nativeLibraryDir=${this.nativeLibraryDir} - nativeLibraryRootDir=${this.nativeLibraryRootDir} - nativeLibraryRootRequiresIsa=${this.nativeLibraryRootRequiresIsa} - networkSecurityConfigRes=${this.networkSecurityConfigRes} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - permission=${this.permission} - primaryCpuAbi=${this.primaryCpuAbi} - privateFlags=${Integer.toBinaryString(this.privateFlags)} - processName=${this.processName.ignored("Deferred pre-R, but assigned immediately in R")} - publicSourceDir=${this.publicSourceDir - .ignored("Deferred pre-R, but assigned immediately in R")} - requiresSmallestWidthDp=${this.requiresSmallestWidthDp} - resourceDirs=${this.resourceDirs?.contentToString()} - overlayPaths=${this.overlayPaths?.contentToString()} - roundIconRes=${this.roundIconRes} - scanPublicSourceDir=${this.scanPublicSourceDir - .ignored("Deferred pre-R, but assigned immediately in R")} - scanSourceDir=${this.scanSourceDir - .ignored("Deferred pre-R, but assigned immediately in R")} - seInfo=${this.seInfo} - seInfoUser=${this.seInfoUser} - secondaryCpuAbi=${this.secondaryCpuAbi} - secondaryNativeLibraryDir=${this.secondaryNativeLibraryDir} - sharedLibraryFiles=${this.sharedLibraryFiles?.contentToString()} - sharedLibraryInfos=${this.sharedLibraryInfos} - showUserIcon=${this.showUserIcon} - sourceDir=${this.sourceDir - .ignored("Deferred pre-R, but assigned immediately in R")} - splitClassLoaderNames=${this.splitClassLoaderNames?.contentToString()} - splitDependencies=${this.splitDependencies.dumpToString()} - splitNames=${this.splitNames?.contentToString()} - splitPublicSourceDirs=${this.splitPublicSourceDirs?.contentToString()} - splitSourceDirs=${this.splitSourceDirs?.contentToString()} - storageUuid=${this.storageUuid} - targetSandboxVersion=${this.targetSandboxVersion} - targetSdkVersion=${this.targetSdkVersion} - taskAffinity=${this.taskAffinity} - theme=${this.theme} - uiOptions=${this.uiOptions} - uid=${this.uid} - versionCode=${this.versionCode} - volumeUuid=${this.volumeUuid} - zygotePreloadName=${this.zygotePreloadName} - """.trimIndent() - - protected fun FeatureInfo.dumpToString() = """ - flags=${Integer.toBinaryString(this.flags)} - name=${this.name} - reqGlEsVersion=${this.reqGlEsVersion} - version=${this.version} - """.trimIndent() - - protected fun InstrumentationInfo.dumpToString() = """ - banner=${this.banner} - credentialProtectedDataDir=${this.credentialProtectedDataDir} - dataDir=${this.dataDir} - deviceProtectedDataDir=${this.deviceProtectedDataDir} - functionalTest=${this.functionalTest} - handleProfiling=${this.handleProfiling} - icon=${this.icon} - labelRes=${this.labelRes} - logo=${this.logo} - metaData=${this.metaData} - name=${this.name} - nativeLibraryDir=${this.nativeLibraryDir} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - primaryCpuAbi=${this.primaryCpuAbi} - publicSourceDir=${this.publicSourceDir} - secondaryCpuAbi=${this.secondaryCpuAbi} - secondaryNativeLibraryDir=${this.secondaryNativeLibraryDir} - showUserIcon=${this.showUserIcon} - sourceDir=${this.sourceDir} - splitDependencies=${this.splitDependencies.dumpToString()} - splitNames=${this.splitNames?.contentToString()} - splitPublicSourceDirs=${this.splitPublicSourceDirs?.contentToString()} - splitSourceDirs=${this.splitSourceDirs?.contentToString()} - targetPackage=${this.targetPackage} - targetProcesses=${this.targetProcesses} - """.trimIndent() - - protected fun ActivityInfo.dumpToString() = """ - banner=${this.banner} - colorMode=${this.colorMode} - configChanges=${this.configChanges} - descriptionRes=${this.descriptionRes} - directBootAware=${this.directBootAware} - documentLaunchMode=${this.documentLaunchMode - .ignored("Update for fixing b/128526493 and the testing is no longer valid")} - enabled=${this.enabled} - exported=${this.exported} - flags=${Integer.toBinaryString( - // Strip flag added in T - this.flags and (ActivityInfo.FLAG_CAN_DISPLAY_ON_REMOTE_DEVICES.inv())) - } - icon=${this.icon} - labelRes=${this.labelRes} - launchMode=${this.launchMode} - launchToken=${this.launchToken} - lockTaskLaunchMode=${this.lockTaskLaunchMode} - logo=${this.logo} - maxRecents=${this.maxRecents} - metaData=${this.metaData.dumpToString()} - name=${this.name} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - parentActivityName=${this.parentActivityName} - permission=${this.permission} - persistableMode=${this.persistableMode.ignored("Could be dropped pre-R, fixed in R")} - privateFlags=${ - // Strip flag added in S - this.privateFlags and (ActivityInfo.PRIVATE_FLAG_HOME_TRANSITION_SOUND.inv()) - } - processName=${this.processName.ignored("Deferred pre-R, but assigned immediately in R")} - requestedVrComponent=${this.requestedVrComponent} - resizeMode=${this.resizeMode} - rotationAnimation=${this.rotationAnimation} - screenOrientation=${this.screenOrientation} - showUserIcon=${this.showUserIcon} - softInputMode=${this.softInputMode} - splitName=${this.splitName} - targetActivity=${this.targetActivity} - taskAffinity=${this.taskAffinity} - theme=${this.theme} - uiOptions=${this.uiOptions} - windowLayout=${this.windowLayout?.dumpToString()} - """.trimIndent() - - protected fun ActivityInfo.WindowLayout.dumpToString() = """ - gravity=${this.gravity} - height=${this.height} - heightFraction=${this.heightFraction} - minHeight=${this.minHeight} - minWidth=${this.minWidth} - width=${this.width} - widthFraction=${this.widthFraction} - """.trimIndent() - - protected fun PermissionInfo.dumpToString() = """ - backgroundPermission=${this.backgroundPermission} - banner=${this.banner} - descriptionRes=${this.descriptionRes} - flags=${Integer.toBinaryString(this.flags)} - group=${this.group} - icon=${this.icon} - labelRes=${this.labelRes} - logo=${this.logo} - metaData=${this.metaData.dumpToString()} - name=${this.name} - nonLocalizedDescription=${this.nonLocalizedDescription} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - protectionLevel=${this.protectionLevel} - requestRes=${this.requestRes} - showUserIcon=${this.showUserIcon} - """.trimIndent() - - protected fun ProviderInfo.dumpToString() = """ - applicationInfo=${this.applicationInfo.ignored("Already checked")} - authority=${this.authority} - banner=${this.banner} - descriptionRes=${this.descriptionRes} - directBootAware=${this.directBootAware} - enabled=${this.enabled} - exported=${this.exported} - flags=${Integer.toBinaryString(this.flags)} - forceUriPermissions=${this.forceUriPermissions} - grantUriPermissions=${this.grantUriPermissions} - icon=${this.icon} - initOrder=${this.initOrder} - isSyncable=${this.isSyncable} - labelRes=${this.labelRes} - logo=${this.logo} - metaData=${this.metaData.dumpToString()} - multiprocess=${this.multiprocess} - name=${this.name} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - pathPermissions=${this.pathPermissions?.joinToString { - "readPermission=${it.readPermission}\nwritePermission=${it.writePermission}" - }} - processName=${this.processName.ignored("Deferred pre-R, but assigned immediately in R")} - readPermission=${this.readPermission} - showUserIcon=${this.showUserIcon} - splitName=${this.splitName} - uriPermissionPatterns=${this.uriPermissionPatterns?.contentToString()} - writePermission=${this.writePermission} - """.trimIndent() - - protected fun ServiceInfo.dumpToString() = """ - applicationInfo=${this.applicationInfo.ignored("Already checked")} - banner=${this.banner} - descriptionRes=${this.descriptionRes} - directBootAware=${this.directBootAware} - enabled=${this.enabled} - exported=${this.exported} - flags=${Integer.toBinaryString(this.flags)} - icon=${this.icon} - labelRes=${this.labelRes} - logo=${this.logo} - mForegroundServiceType"${this.mForegroundServiceType} - metaData=${this.metaData.dumpToString()} - name=${this.name} - nonLocalizedLabel=${ - // Per b/184574333, v1 mistakenly trimmed the label. v2 fixed this, but for test - // comparison, trim both so they can be matched. - this.nonLocalizedLabel?.trim() - } - packageName=${this.packageName} - permission=${this.permission} - processName=${this.processName.ignored("Deferred pre-R, but assigned immediately in R")} - showUserIcon=${this.showUserIcon} - splitName=${this.splitName} - """.trimIndent() - - protected fun ConfigurationInfo.dumpToString() = """ - reqGlEsVersion=${this.reqGlEsVersion} - reqInputFeatures=${this.reqInputFeatures} - reqKeyboardType=${this.reqKeyboardType} - reqNavigation=${this.reqNavigation} - reqTouchScreen=${this.reqTouchScreen} - """.trimIndent() - - protected fun PackageInfo.dumpToString() = """ - activities=${this.activities?.joinToString { it.dumpToString() } - .ignored("Checked separately in test")} - applicationInfo=${this.applicationInfo.dumpToString() - .ignored("Checked separately in test")} - baseRevisionCode=${this.baseRevisionCode} - compileSdkVersion=${this.compileSdkVersion} - compileSdkVersionCodename=${this.compileSdkVersionCodename} - configPreferences=${this.configPreferences?.joinToString { it.dumpToString() }} - coreApp=${this.coreApp} - featureGroups=${this.featureGroups?.joinToString { - it.features?.joinToString { featureInfo -> featureInfo.dumpToString() }.orEmpty() - }} - firstInstallTime=${this.firstInstallTime} - gids=${gids?.contentToString()} - installLocation=${this.installLocation} - instrumentation=${instrumentation?.joinToString { it.dumpToString() }} - isApex=${this.isApex} - isStub=${this.isStub} - lastUpdateTime=${this.lastUpdateTime} - mOverlayIsStatic=${this.mOverlayIsStatic} - overlayCategory=${this.overlayCategory} - overlayPriority=${this.overlayPriority} - overlayTarget=${this.overlayTarget} - packageName=${this.packageName} - permissions=${this.permissions?.joinToString { it.dumpToString() }} - providers=${this.providers?.joinToString { it.dumpToString() } - .ignored("Checked separately in test")} - receivers=${this.receivers?.joinToString { it.dumpToString() } - .ignored("Checked separately in test")} - reqFeatures=${this.reqFeatures?.joinToString { it.dumpToString() }} - requestedPermissions=${ - // Strip compatibility permission added in T - this.requestedPermissions?.filter { x -> - x != Manifest.permission.POST_NOTIFICATIONS - }?.ifEmpty { null }?.joinToString() - } - requestedPermissionsFlags=${ - // Strip the flag from compatibility permission added in T - this.requestedPermissionsFlags?.filterIndexed { index, _ -> - index != ArrayUtils.indexOf(requestedPermissions, - Manifest.permission.POST_NOTIFICATIONS) - }?.map { - // Newer flags are stripped - it and (PackageInfo.REQUESTED_PERMISSION_REQUIRED - or PackageInfo.REQUESTED_PERMISSION_GRANTED) - }?.ifEmpty { null }?.joinToString() - } - requiredAccountType=${this.requiredAccountType} - requiredForAllUsers=${this.requiredForAllUsers} - restrictedAccountType=${this.restrictedAccountType} - services=${this.services?.joinToString { it.dumpToString() } - .ignored("Checked separately in test")} - sharedUserId=${this.sharedUserId} - sharedUserLabel=${this.sharedUserLabel} - signatures=${this.signatures?.joinToString { it.toCharsString() }} - signingInfo=${this.signingInfo?.signingCertificateHistory - ?.joinToString { it.toCharsString() }.orEmpty()} - splitNames=${this.splitNames?.contentToString()} - splitRevisionCodes=${this.splitRevisionCodes?.contentToString()} - targetOverlayableName=${this.targetOverlayableName} - versionCode=${this.versionCode} - versionCodeMajor=${this.versionCodeMajor} - versionName=${this.versionName} - """.trimIndent() - - private fun Bundle?.dumpToString() = this?.keySet()?.associateWith { get(it) }?.toString() - - private fun <T> SparseArray<T>?.dumpToString(): String { - if (this == null) { - return "EMPTY" - } - - val list = mutableListOf<Pair<Int, T>>() - for (index in (0 until size())) { - list += keyAt(index) to valueAt(index) - } - return list.toString() - } -} diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageInfoUserFieldsTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageInfoUserFieldsTest.kt deleted file mode 100644 index 67b5d683de9a..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageInfoUserFieldsTest.kt +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.parsing - -import android.content.pm.ApplicationInfo -import android.content.pm.PackageParser -import android.os.Environment -import android.os.UserHandle -import android.platform.test.annotations.Presubmit -import com.google.common.truth.Truth.assertWithMessage -import org.junit.Test - -/** - * As a performance optimization, the new parsing code builds the user data directories manually - * using string concatenation. This tries to mirror the logic that [Environment] uses, but it is - * still fragile to changes and potentially different device configurations. - * - * This compares the resultant values against the old [PackageParser] outputs as well as - * [ApplicationInfo]'s own [ApplicationInfo.initForUser]. - */ -@Presubmit -class PackageInfoUserFieldsTest : AndroidPackageParsingTestBase() { - - @Test - fun userEnvironmentValues() { - // Specifically use a large user ID to test assumptions about single character IDs - val userId = 110 - - oldPackages.zip(newPackages) - .map { (old, new) -> - (old to oldAppInfo(pkg = old, userId = userId)!!) to - (new to newAppInfo(pkg = new, userId = userId)!!) - } - .forEach { (oldPair, newPair) -> - val (oldPkg, oldInfo) = oldPair - val (newPkg, newInfo) = newPair - - val oldValuesActual = extractActual(oldInfo) - val newValuesActual = extractActual(newInfo) - val oldValuesExpected: Values - val newValuesExpected: Values - - val packageName = oldPkg.packageName - if (packageName == "android") { - val systemDataDir = Environment.getDataSystemDirectory().absolutePath - oldValuesExpected = Values( - uid = UserHandle.getUid(userId, - UserHandle.getAppId(oldPkg.applicationInfo.uid)), - userDe = null, - userCe = null, - dataDir = systemDataDir - ) - newValuesExpected = Values( - uid = UserHandle.getUid(userId, UserHandle.getAppId(newPkg.uid)), - userDe = null, - userCe = null, - dataDir = systemDataDir - ) - } else { - oldValuesExpected = extractExpected(oldInfo, oldInfo.uid, userId) - newValuesExpected = extractExpected(newInfo, newPkg.uid, userId) - } - - // Calls the internal ApplicationInfo logic to compare against. This must be - // done after saving the original values, since this will overwrite them. - oldInfo.initForUser(userId) - newInfo.initForUser(userId) - - val oldInitValues = extractActual(oldInfo) - val newInitValues = extractActual(newInfo) - - // The optimization is also done for the no state API that isn't used by the - // system. This API is still exposed publicly, so for this test we should - // verify it. - val newNoStateValues = extractActual( - newAppInfoWithoutState(newPkg, 0, userId)!!) - - assertAllEquals(packageName, - oldValuesActual, oldValuesExpected, oldInitValues, - newValuesActual, newValuesExpected, newInitValues, newNoStateValues) - } - } - - private fun assertAllEquals(packageName: String, vararg values: Values) { - // Local function to avoid accidentally calling wrong type - fun assertAllEquals(message: String, vararg values: Any?) { - values.forEachIndexed { index, value -> - if (index == 0) return@forEachIndexed - assertWithMessage("$message $index").that(values[0]).isEqualTo(value) - } - } - - assertAllEquals("$packageName mismatched uid", values.map { it.uid }) - assertAllEquals("$packageName mismatched userDe", values.map { it.userDe }) - assertAllEquals("$packageName mismatched userCe", values.map { it.userCe }) - assertAllEquals("$packageName mismatched dataDir", values.map { it.dataDir }) - } - - private fun extractActual(appInfo: ApplicationInfo) = Values( - uid = appInfo.uid, - userDe = appInfo.deviceProtectedDataDir, - userCe = appInfo.credentialProtectedDataDir, - dataDir = appInfo.dataDir - ) - - private fun extractExpected(appInfo: ApplicationInfo, appIdUid: Int, userId: Int): Values { - val userDe = Environment.getDataUserDePackageDirectory(appInfo.volumeUuid, userId, - appInfo.packageName).absolutePath - val userCe = Environment.getDataUserCePackageDirectory(appInfo.volumeUuid, userId, - appInfo.packageName).absolutePath - val dataDir = if (appInfo.isDefaultToDeviceProtectedStorage) { - appInfo.deviceProtectedDataDir - } else { - appInfo.credentialProtectedDataDir - } - - return Values( - uid = UserHandle.getUid(userId, UserHandle.getAppId(appIdUid)), - userDe = userDe, - userCe = userCe, - dataDir = dataDir - ) - } - - data class Values( - val uid: Int, - val userDe: String?, - val userCe: String?, - val dataDir: String? - ) -} diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java index c99034201d69..004d7bc2707c 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java @@ -18,7 +18,6 @@ package com.android.server.pm.parsing; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import android.apex.ApexInfo; @@ -27,16 +26,9 @@ import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.PackageParser; import android.content.pm.PermissionInfo; import android.content.pm.SigningDetails; -import android.content.pm.parsing.PackageInfoWithoutStateUtils; -import android.content.pm.parsing.ParsingPackage; -import android.content.pm.parsing.ParsingPackageUtils; -import android.content.pm.parsing.component.ParsedComponent; -import android.content.pm.parsing.component.ParsedIntentInfo; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedPermissionUtils; +import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Build; @@ -55,6 +47,14 @@ import com.android.internal.util.ArrayUtils; import com.android.server.pm.PackageManagerException; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.ParsedPackage; +import com.android.server.pm.pkg.component.ParsedActivityUtils; +import com.android.server.pm.pkg.component.ParsedComponent; +import com.android.server.pm.pkg.component.ParsedIntentInfo; +import com.android.server.pm.pkg.component.ParsedPermission; +import com.android.server.pm.pkg.component.ParsedPermissionUtils; +import com.android.server.pm.pkg.parsing.PackageInfoWithoutStateUtils; +import com.android.server.pm.pkg.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.google.common.truth.Expect; @@ -105,20 +105,19 @@ public class PackageParserLegacyCoreTest { private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename, boolean isPlatformReleased, int expectedMinSdk) { - final String[] outError = new String[1]; - final int result = PackageParser.computeMinSdkVersion( + final ParseTypeImpl input = ParseTypeImpl.forParsingWithoutPlatformCompat(); + final ParseResult<Integer> result = FrameworkParsingPackageUtils.computeMinSdkVersion( minSdkVersion, minSdkCodename, PLATFORM_VERSION, isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE, - outError); - - assertEquals("Error msg: " + outError[0], expectedMinSdk, result); + input); if (expectedMinSdk == -1) { - assertNotNull(outError[0]); + assertTrue(result.isError()); } else { - assertNull(outError[0]); + assertTrue(result.isSuccess()); + assertEquals(expectedMinSdk, (int) result.getResult()); } } @@ -201,19 +200,18 @@ public class PackageParserLegacyCoreTest { private void verifyComputeTargetSdkVersion(int targetSdkVersion, String targetSdkCodename, boolean isPlatformReleased, int expectedTargetSdk) { - final String[] outError = new String[1]; - final int result = PackageParser.computeTargetSdkVersion( + final ParseTypeImpl input = ParseTypeImpl.forParsingWithoutPlatformCompat(); + final ParseResult<Integer> result = FrameworkParsingPackageUtils.computeTargetSdkVersion( targetSdkVersion, targetSdkCodename, isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE, - outError); - - assertEquals(result, expectedTargetSdk); + input); if (expectedTargetSdk == -1) { - assertNotNull(outError[0]); + assertTrue(result.isError()); } else { - assertNull(outError[0]); + assertTrue(result.isSuccess()); + assertEquals(expectedTargetSdk, (int) result.getResult()); } } @@ -306,34 +304,34 @@ public class PackageParserLegacyCoreTest { // Not set in either configChanges or recreateOnConfigChanges. int configChanges = 0x0000; // 00000000. int recreateOnConfigChanges = 0x0000; // 00000000. - int finalConfigChanges = - PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges); + int finalConfigChanges = ParsedActivityUtils.getActivityConfigChanges(configChanges, + recreateOnConfigChanges); assertEquals(0x0003, finalConfigChanges); // Should be 00000011. // Not set in configChanges, but set in recreateOnConfigChanges. configChanges = 0x0000; // 00000000. recreateOnConfigChanges = 0x0003; // 00000011. - finalConfigChanges = - PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges); + finalConfigChanges = ParsedActivityUtils.getActivityConfigChanges(configChanges, + recreateOnConfigChanges); assertEquals(0x0000, finalConfigChanges); // Should be 00000000. // Set in configChanges. configChanges = 0x0003; // 00000011. recreateOnConfigChanges = 0X0000; // 00000000. - finalConfigChanges = - PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges); + finalConfigChanges = ParsedActivityUtils.getActivityConfigChanges(configChanges, + recreateOnConfigChanges); assertEquals(0x0003, finalConfigChanges); // Should be 00000011. recreateOnConfigChanges = 0x0003; // 00000011. - finalConfigChanges = - PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges); + finalConfigChanges = ParsedActivityUtils.getActivityConfigChanges(configChanges, + recreateOnConfigChanges); assertEquals(0x0003, finalConfigChanges); // Should still be 00000011. // Other bit set in configChanges. configChanges = 0x0080; // 10000000, orientation. recreateOnConfigChanges = 0x0000; // 00000000. - finalConfigChanges = - PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges); + finalConfigChanges = ParsedActivityUtils.getActivityConfigChanges(configChanges, + recreateOnConfigChanges); assertEquals(0x0083, finalConfigChanges); // Should be 10000011. } diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt index f53042183af8..bb094ba897e6 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParsingDeferErrorTest.kt @@ -18,8 +18,8 @@ package com.android.server.pm.parsing import android.annotation.RawRes import android.content.Context -import android.content.pm.parsing.ParsingPackage -import android.content.pm.parsing.ParsingPackageUtils +import com.android.server.pm.pkg.parsing.ParsingPackage +import com.android.server.pm.pkg.parsing.ParsingPackageUtils import android.content.pm.parsing.result.ParseResult import android.platform.test.annotations.Presubmit import androidx.test.InstrumentationRegistry diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt index ffa19575718b..1f57b6c9f95f 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/SystemPartitionParseTest.kt @@ -17,7 +17,7 @@ package com.android.server.pm.parsing import android.content.pm.PackageManager -import android.content.pm.parsing.ParsingPackageUtils +import com.android.server.pm.pkg.parsing.ParsingPackageUtils import android.platform.test.annotations.Postsubmit import com.android.server.pm.PackageManagerException import com.android.server.pm.PackageManagerService diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java index 5bcd0f6bb029..b28446b337a6 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/library/PackageBackwardCompatibilityTest.java @@ -23,7 +23,7 @@ import static com.android.server.pm.parsing.library.SharedLibraryNames.ORG_APACH import static com.google.common.truth.Truth.assertThat; -import android.content.pm.parsing.ParsingPackage; +import com.android.server.pm.pkg.parsing.ParsingPackage; import android.os.Build; import android.platform.test.annotations.Presubmit; -- GitLab