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 &lt;meta-data&gt; or &lt;property&gt; 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