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
diff --git a/apct-tests/perftests/packagemanager/Android.bp b/apct-tests/perftests/packagemanager/Android.bp
index fc70219..81cec91 100644
--- a/apct-tests/perftests/packagemanager/Android.bp
+++ b/apct-tests/perftests/packagemanager/Android.bp
@@ -10,7 +10,10 @@
android_test {
name: "PackageManagerPerfTests",
- srcs: ["src/**/*.java"],
+ srcs: [
+ "src/**/*.java",
+ "src/**/*.kt",
+ ],
static_libs: [
"platform-compat-test-rules",
@@ -21,6 +24,7 @@
"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 f9ddf9a..e873514 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 @@
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.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 @@
@LargeTest
@RunWith(Parameterized::class)
-class PackageParsingPerfTest {
+public class PackageParsingPerfTest {
companion object {
private const val PARALLEL_QUEUE_CAPACITY = 10
@@ -196,8 +195,12 @@
// 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 @@
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 @@
* 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 49c75c4..7b55b6c 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -62,6 +62,7 @@
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.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 @@
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 d817f1e..c8f88f2 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -50,6 +50,7 @@
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 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 @@
@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 @@
@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 e2c91a4b..701c546 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_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.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.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.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.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 @@
* </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 @@
// 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 1639ee9..d5498a0 100644
--- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
+++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
@@ -18,13 +18,6 @@
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.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 @@
/** @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 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 @@
"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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
// 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 @@
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 @@
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 @@
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 @@
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 0000000..8b86a16
--- /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 1a3fc85..c323704 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 @@
/** @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 @@
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 @@
// how many APKs they're going through.
mDeferredErrors.erase();
}
- mTargetSdkVersion = NOT_SET;
+ mTargetSdkVersion = -1;
return this;
}
@@ -141,7 +138,7 @@
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 0daf6cf..bac29b4 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 @@
* 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 27255da..3590620 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.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 3d126d2..0000000
--- 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 41b749e..bff5426 100644
--- a/core/java/android/util/apk/ApkSignatureVerifier.java
+++ b/core/java/android/util/apk/ApkSignatureVerifier.java
@@ -27,7 +27,7 @@
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 @@
// 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 @@
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 @@
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 29b31d3..b786526 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 @@
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 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 @@
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 e4e0228..0fafd10 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 @@
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 @@
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 c18a70c..c1f3c4f 100644
--- a/core/tests/coretests/Android.bp
+++ b/core/tests/coretests/Android.bp
@@ -93,33 +93,9 @@
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 @@
"framework",
"framework-res",
],
-}
\ No newline at end of file
+}
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 14a3a01..f2b35c7 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_complete_package_info/Android.bp b/core/tests/coretests/apks/install_complete_package_info/Android.bp
deleted file mode 100644
index 3fee0c6..0000000
--- a/core/tests/coretests/apks/install_complete_package_info/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_complete_package_info",
- defaults: ["FrameworksCoreTests_apks_defaults"],
-
- srcs: ["**/*.java"],
-}
diff --git a/core/tests/coretests/apks/install_decl_perm/Android.bp b/core/tests/coretests/apks/install_decl_perm/Android.bp
deleted file mode 100644
index bf1f0de..0000000
--- a/core/tests/coretests/apks/install_decl_perm/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_decl_perm",
- defaults: ["FrameworksCoreTests_apks_defaults"],
-
- srcs: ["**/*.java"],
-}
diff --git a/core/tests/coretests/apks/install_loc_auto/Android.bp b/core/tests/coretests/apks/install_loc_auto/Android.bp
deleted file mode 100644
index 37daf76..0000000
--- a/core/tests/coretests/apks/install_loc_auto/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_auto",
- defaults: ["FrameworksCoreTests_apks_defaults"],
-
- srcs: ["**/*.java"],
-}
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 708e655..0000000
--- 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 76869e9..0000000
--- 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_uses_feature/Android.bp b/core/tests/coretests/apks/install_uses_feature/Android.bp
deleted file mode 100644
index 913a96a..0000000
--- 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 93c3b1f..0000000
--- 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 8411183..8d4ecf4 100644
--- a/core/tests/coretests/certs/Android.bp
+++ b/core/tests/coretests/certs/Android.bp
@@ -10,16 +10,6 @@
}
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 2c31b08..187803c 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.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 boolean isMatchRequiredSystemProperty() {
- return ParsingPackageUtils.checkRequiredSystemProperties(
+ return FrameworkParsingPackageUtils.checkRequiredSystemProperties(
requiredSystemPropertyName, requiredSystemPropertyValue);
}
}
@@ -174,11 +173,12 @@
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 9b2948f..60cae4d 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.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.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 e933526..ab0879a 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.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 3c557d0..40fda4c 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.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 09780f3..6676987 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.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 047a701..38781fa 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.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 @@
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 c285e27..6f10a6b 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.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 22cd06d..a66af3c 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 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 6f54625..b916de3 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.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 6ec3405..cd4244b 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.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 e37aaa5..2aa0e01 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.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 dfa6c66..9efe81a 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.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.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 f696b3f..9209033 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.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.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 1e1d169..db346da 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 @@
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 @@
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 c813317..00483b6 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.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 248944e..13f91e0d 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.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.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 898f673..d8f0cc3 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.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 ee9ed3b..2055537 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.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 ccabce7..9bfb7d1 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.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 67f6b12..f3d88ed 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.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 d60d019..b0e0340 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 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 6d2ec0d..79ab563 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.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.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 482b79c..34abdb1 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 @@
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 7085682..45837717 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.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 9df0edb2..bc48461 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 @@
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 1433abd..bb7e55a 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.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 01bf634..e28a6ea 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.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 8afe62a..61aedd8 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 07cc3d0..0fa0dc3 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.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 f467a7f..08e2f7d 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.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 3a49216..564585b 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 @@
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 bbf584d..dc3bf78 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_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 bf7d897..b357ba0 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 @@
*
* @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 8b2c3a12..7e59bd6 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.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 6846ac5..193e1a2 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.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.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 a13f297..6ddae9b 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 @@
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 e2efbe1..da7f1dc 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 95%
rename from core/java/android/content/pm/permission/CompatibilityPermissionInfo.java
rename to services/core/java/com/android/server/pm/permission/CompatibilityPermissionInfo.java
index b70353a4..d962505 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 041c4fe..d5456e3 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.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 7833c43..981fd8e 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.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 0e3fda7..3a61704 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 @@
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 6c8e0b7..656c445 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.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 03b1692..d47c5ec 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.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 @@
*/
// 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 86%
rename from core/java/android/content/pm/pkg/PackageUserStateUtils.java
rename to services/core/java/com/android/server/pm/pkg/PackageUserStateUtils.java
index 468bff1..917c4af 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 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 @@
* 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 @@
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 @@
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 @@
/**
* 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 @@
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 898dddf..6cbc1de 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 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 96%
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 73d0b9f..1deb8d0 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 87%
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 0334601..a8fb79a 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 @@
+ ": 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 @@
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 @@
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 a661b51..6d978c4 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 98%
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 93dc5a4..ff97c13 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.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 97%
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 2ddf923..db8815e 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.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.Objects;
import java.util.Set;
-/** @hide */
+/**
+ * @hide
+ */
public class ParsedActivityUtils {
private static final String TAG = ParsingUtils.TAG;
@@ -601,7 +603,7 @@
* 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 fe821e0..7690818 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 54196fd..8c4d8f0 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 95%
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 26abf48..38a6f5a35 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 ac7a928..3b91f28 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 510425f..a4eb4f1 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 97%
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 84f1d44..98e94c5 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 c1372f6..1a8230d 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 1c46a10..9125e8c 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.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 92%
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 5c33cfd..e208854 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 e8fcc00..a0eae8c 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 96%
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 d2b5368..c8baa9e 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 df5e73e..51e1428 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 1e36ccca..57b486a 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 95%
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 9ff7a16..1c816da 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 cb72c2b..1e6f630 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 2507205..8c1d6c8 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 6051435..9b57f48 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 87f75b0..2a3e653 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 6acdb6e..4a6d2c3 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 88%
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 22aa085..73b5ffa 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 1fa04cf..f47fb75 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 2145e44..98007ff 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 @@
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 97%
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 86c8f02..8562fdf 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 27a540d..ff391ff 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 98%
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 d404ecfd..96560c7 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 5e4cf66..d03f153 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 91%
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 1211ce2..8cc6fc7 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 97%
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 774c3fc..e04fc86 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 de9dd44..9d3129b 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 6736afa..11696be 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 a85fb5c..0171c49 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 d27a0ed..6fe9411 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 96%
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 e2f5f14..8e3401e 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 d3c7afb..70d6f24 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 93%
rename from core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
rename to services/core/java/com/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils.java
index 28290d7..2d6c616 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.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 @@
@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 @@
@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 @@
@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 @@
* 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 @@
@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 @@
* 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 @@
@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 @@
}
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 @@
@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 @@
@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 @@
@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 @@
* 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 @@
@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 @@
* 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 @@
@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 @@
* 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 @@
@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 @@
}
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 @@
}
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 93%
rename from core/java/android/content/pm/parsing/ParsingPackage.java
rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
index e635e91..18a6435 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.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 c49d11e..66e01a6 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 97%
rename from core/java/android/content/pm/parsing/ParsingPackageImpl.java
rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageImpl.java
index fb42804..c4de862 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.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.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 @@
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 94%
rename from core/java/android/content/pm/parsing/ParsingPackageInternal.java
rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageInternal.java
index ca16fa2..5457785 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 a5e98d6..1497112 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 @@
/**
* 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 @@
/**
* 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 @@
/**
* 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 795e7ef..1ce01f6 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 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.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.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.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.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.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 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 @@
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 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;
@@ -247,12 +246,6 @@
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)
*/
@NonNull
@@ -266,8 +259,8 @@
/**
* 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 @@
@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 @@
}
/**
- * 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 @@
}
/**
- * 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 @@
/**
* 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 @@
}
/**
- * 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 @@
/**
* 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 @@
* 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 @@
}
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 @@
+ " 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 @@
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 @@
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 @@
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 @@
* 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 @@
/**
* 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 @@
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: "
@@ -3056,60 +2903,6 @@
}
/**
- * Check if the given name is valid.
- *
- * @param name The name to check.
- * @param requireSeparator {@code true} if the name requires containing a separator at least.
- * @param requireFilename {@code true} to apply file name validation to the given name. It also
- * limits length of the name to the {@link #MAX_FILE_NAME_SIZE}.
- * @return Success if it's valid.
- */
- public static String validateName(String name, boolean requireSeparator,
- boolean requireFilename) {
- final int N = name.length();
- boolean hasSep = false;
- boolean front = true;
- for (int i = 0; i < N; i++) {
- final char c = name.charAt(i);
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
- front = false;
- continue;
- }
- if (!front) {
- if ((c >= '0' && c <= '9') || c == '_') {
- continue;
- }
- }
- if (c == '.') {
- hasSep = true;
- front = true;
- continue;
- }
- return "bad character '" + c + "'";
- }
- if (requireFilename) {
- if (!FileUtils.isValidExtFilename(name)) {
- return "Invalid filename";
- } else if (N > MAX_FILE_NAME_SIZE) {
- return "the length of the name is greater than " + MAX_FILE_NAME_SIZE;
- }
- }
- return hasSep || !requireSeparator ? null : "must have at least one '.' separator";
- }
-
- /**
- * @see #validateName(String, boolean, boolean)
- */
- public static ParseResult validateName(ParseInput input, String name, boolean requireSeparator,
- boolean requireFilename) {
- final String errorMessage = validateName(name, requireSeparator, requireFilename);
- if (errorMessage != null) {
- return input.error(errorMessage);
- }
- return input.success(null);
- }
-
- /**
* Parse a meta data defined on the enclosing tag.
* <p>Meta data can be defined by either <meta-data> or <property> elements.
*/
@@ -3169,114 +2962,6 @@
}
/**
- * @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 92%
rename from core/java/android/content/pm/parsing/ParsingUtils.java
rename to services/core/java/com/android/server/pm/pkg/parsing/ParsingUtils.java
index cce984e..95fec36 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 @@
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 98%
rename from core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java
rename to services/core/java/com/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo.java
index 625b9d1..a323e20 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 7d758a8..2bc4ee7 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.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 @@
* 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 @@
* 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 @@
* 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 @@
* 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 47cf28b..2bd7cf8 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 a0c3f75..ae42e09 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 d314e06..8450159 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 d47f510..e078120 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.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 d1603f5..d0b50d27 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.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.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 8203c1b..5220c8f 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.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 ebad5af..93d70bb 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 @@
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 8cf6fe3..a0f3bbf 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.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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 8170acf..a89b717 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 @@
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 503301b..4e44e96 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 e978dd3..058f6d6 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 @@
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 f15b911..eeb30b7 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 @@
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 f04e851..f27a51f 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 @@
ParsedIntentInfoImpl::class,
) {
- override val defaultImpl = ParsedIntentInfoImpl()
+ override val defaultImpl =
+ ParsedIntentInfoImpl()
override val creator = ParsedIntentInfoImpl.CREATOR
override val excludedMethods = listOf(
@@ -43,7 +44,8 @@
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 214734a..a0d8c44 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 f876ed0..57562ef 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 @@
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 6f48e24..c72a44e 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 @@
ParsedPermissionImpl::class
) {
- override val defaultImpl = ParsedPermissionImpl()
+ override val defaultImpl =
+ ParsedPermissionImpl()
override val creator = ParsedPermissionImpl.CREATOR
override val subclassExcludedMethods = listOf(
@@ -53,7 +54,8 @@
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 005d3e8..8b9361a 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 78e4b79..037da24 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 9363aa3..e2c9439 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 81e800f..ad60736 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 @@
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 @@
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 33234d5..652dc38 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 @@
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 @@
val activityList = listOf(
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
addAction(Intent.ACTION_VIEW)
addCategory(Intent.CATEGORY_BROWSABLE)
@@ -110,7 +111,8 @@
},
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(true)
addAction(Intent.ACTION_VIEW)
@@ -270,7 +272,8 @@
val activityList = listOf(
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addAction(Intent.ACTION_VIEW)
@@ -285,7 +288,8 @@
}
)
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
addAction(Intent.ACTION_VIEW)
addCategory(Intent.CATEGORY_BROWSABLE)
@@ -300,7 +304,8 @@
},
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addAction(Intent.ACTION_VIEW)
@@ -316,7 +321,8 @@
},
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addAction(Intent.ACTION_VIEW)
@@ -329,7 +335,8 @@
}
)
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addAction(Intent.ACTION_VIEW)
@@ -342,7 +349,8 @@
}
)
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addCategory(Intent.CATEGORY_BROWSABLE)
@@ -355,7 +363,8 @@
}
)
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addCategory(Intent.CATEGORY_BROWSABLE)
@@ -365,7 +374,8 @@
}
)
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
setAutoVerify(autoVerify)
addCategory(Intent.CATEGORY_BROWSABLE)
@@ -375,7 +385,8 @@
}
)
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 089e9db..92cdb34 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.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 @@
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 334f503..878bee0 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 @@
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 @@
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 fb581d7..0369bab 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.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 @@
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 a397d56..3a602a8 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 @@
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 @@
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 728da49..ffc2877 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 @@
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 @@
val activityList = listOf(
ParsedActivityImpl().apply {
addIntent(
- ParsedIntentInfoImpl().apply {
+ ParsedIntentInfoImpl()
+ .apply {
intentFilter.apply {
autoVerify = true
addAction(Intent.ACTION_VIEW)
@@ -126,7 +127,8 @@
}
)
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 04a6eee..c2e0a04 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.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.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 171af77..f24059c 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -182,18 +182,41 @@
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 587447a..d9f73d9 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 652b491..12175fd 100644
--- a/core/tests/coretests/apks/install/Android.bp
+++ b/services/tests/servicestests/apks/install/Android.bp
@@ -8,8 +8,8 @@
}
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 7b96c9b4..ad75668 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 @@
}
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/core/tests/coretests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_complete_package_info/Android.bp
similarity index 75%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_complete_package_info/Android.bp
index 3e23313..98aa750 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_complete_package_info/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- defaults: ["FrameworksCoreTests_apks_defaults"],
+ 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_internal/Android.bp b/services/tests/servicestests/apks/install_decl_perm/Android.bp
similarity index 77%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_decl_perm/Android.bp
index 3e23313..ef65f5d 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_decl_perm/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- 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_loc_internal/Android.bp b/services/tests/servicestests/apks/install_loc_auto/Android.bp
similarity index 77%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_loc_auto/Android.bp
index 3e23313..4e4ae52 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_loc_auto/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- 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/core/tests/coretests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_loc_internal/Android.bp
similarity index 77%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_loc_internal/Android.bp
index 3e23313..39cdd51 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_loc_internal/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- defaults: ["FrameworksCoreTests_apks_defaults"],
+ 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%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_loc_sdcard/Android.bp
index 3e23313..ed82793 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 @@
}
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/core/tests/coretests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_loc_unspecified/Android.bp
similarity index 76%
copy from core/tests/coretests/apks/install_loc_internal/Android.bp
copy to services/tests/servicestests/apks/install_loc_unspecified/Android.bp
index 3e23313..fd15cb8 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_loc_unspecified/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- defaults: ["FrameworksCoreTests_apks_defaults"],
+ 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_use_perm_good/Android.bp b/services/tests/servicestests/apks/install_use_perm_good/Android.bp
similarity index 77%
rename from core/tests/coretests/apks/install_use_perm_good/Android.bp
rename to services/tests/servicestests/apks/install_use_perm_good/Android.bp
index 89700dd..959ffbc 100644
--- a/core/tests/coretests/apks/install_use_perm_good/Android.bp
+++ b/services/tests/servicestests/apks/install_use_perm_good/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_use_perm_good",
- 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/core/tests/coretests/apks/install_loc_internal/Android.bp b/services/tests/servicestests/apks/install_uses_feature/Android.bp
similarity index 77%
rename from core/tests/coretests/apks/install_loc_internal/Android.bp
rename to services/tests/servicestests/apks/install_uses_feature/Android.bp
index 3e23313..fa25af4 100644
--- a/core/tests/coretests/apks/install_loc_internal/Android.bp
+++ b/services/tests/servicestests/apks/install_uses_feature/Android.bp
@@ -8,8 +8,8 @@
}
android_test_helper_app {
- name: "FrameworksCoreTests_install_loc_internal",
- defaults: ["FrameworksCoreTests_apks_defaults"],
+ 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 0000000..ce7919c
--- /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 0000000..61367c0
--- /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 0000000..00917a1
--- /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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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
Binary files differ
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 0f6dfda..13a8f69 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.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 54ab133..e137c37 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.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 6b6d84a..d7e3825 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 9d67240..6c9a60a 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_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.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 c2519ca0..b621a44 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.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.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 c888524..d8ecf20 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.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.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 28f24f2..7ff8eec 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.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 1dcb0b7..7c8bbec 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.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 4059a49..0000000
--- 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 574921c..0000000
--- 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 122661e..0000000
--- 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 67b5d68..0000000
--- 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 c990342..004d7bc 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 @@
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.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.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 @@
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 @@
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 @@
// 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 f530421..bb094ba 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 @@
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 ffa1957..1f57b6c 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 5bcd0f6..b28446b 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.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;