Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 074c4921 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I4cfb0c43,I9050c5e3 into main

* changes:
  [PM] Check sdkVersionFull and sdkVersion in PackageManager
  Reapply "[PM] Support sdkVersionFull in PackageManager"
parents 48cbafb9 7d9ad158
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.IntentSender;
import android.content.pm.PackageManager.SignatureResult;
import android.content.pm.SigningDetails.CertCapabilities;
import android.content.pm.overlay.OverlayPaths;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerExecutor;
@@ -1442,4 +1443,11 @@ public abstract class PackageManagerInternal {
     * Returns true if the device is upgrading from an SDK version lower than the one specified.
     */
    public abstract boolean isUpgradingFromLowerThan(int sdkVersion);

    /**
     * Returns true if the device is upgrading from an SDK version lower than the one specified by
     * checking a full SDK version (includes major version and minor version)
     */
    public abstract boolean isUpgradingFromLowerThanBySdkVersionFull(
            @Build.SdkIntFull int sdkVersionFull);
}
+35 −2
Original line number Diff line number Diff line
@@ -605,6 +605,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    final ProcessLoggingHandler mProcessLoggingHandler;

    private final int mSdkVersion;
    private final int mSdkVersionFull;
    final Context mContext;
    final boolean mFactoryTest;
    final DisplayMetrics mMetrics;
@@ -615,6 +616,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    private final boolean mIsPreQUpgrade;
    // If mIsUpgrade == true, contains the prior SDK version, else -1.
    private final int mPriorSdkVersion;
    // If mIsUpgrade == true, contains the prior full SDK version, else -1.
    private final int mPriorSdkVersionFull;

    // Used for privilege escalation. MUST NOT BE CALLED WITH mPackages
    // LOCK HELD.  Can be called with mInstallLock held.
@@ -1756,9 +1759,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            Slog.w(TAG, "**** ro.build.version.sdk not set!");
        }

        final int sdkVersionFull = android.sdk.Flags.majorMinorVersioningScheme()
                ? Build.VERSION.SDK_INT_FULL : 0;
        PackageManagerService m = new PackageManagerService(injector, factoryTest,
                PackagePartitions.FINGERPRINT, Build.IS_ENG, Build.IS_USERDEBUG,
                Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL);
                Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL, sdkVersionFull);

        t.traceEnd(); // "create package manager"

        final CompatChange.ChangeListener selinuxChangeListener = packageName -> {
@@ -1901,6 +1907,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mIsPreNMR1Upgrade = testParams.isPreNmr1Upgrade;
        mIsPreQUpgrade = testParams.isPreQupgrade;
        mPriorSdkVersion = testParams.priorSdkVersion;
        mPriorSdkVersionFull = testParams.priorSdkVersionFull;
        mIsUpgrade = testParams.isUpgrade;
        mMetrics = testParams.Metrics;
        mModuleInfoProvider = testParams.moduleInfoProvider;
@@ -1942,6 +1949,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mPackages.putAll(testParams.packages);
        mFreeStorageHelper = testParams.freeStorageHelper;
        mSdkVersion = testParams.sdkVersion;
        mSdkVersionFull = testParams.sdkVersionFull;
        mAppInstallDir = testParams.appInstallDir;
        mIsEngBuild = testParams.isEngBuild;
        mIsUserDebugBuild = testParams.isUserDebugBuild;
@@ -1971,10 +1979,21 @@ public class PackageManagerService implements PackageSender, TestUtilityService

    public PackageManagerService(PackageManagerServiceInjector injector, boolean factoryTest,
            final String partitionsFingerprint, final boolean isEngBuild,
            final boolean isUserDebugBuild, final int sdkVersion, final String incrementalVersion) {
            final boolean isUserDebugBuild, final int sdkVersion, final String incrementalVersion,
            final int sdkVersionFull) {
        mIsEngBuild = isEngBuild;
        mIsUserDebugBuild = isUserDebugBuild;
        mSdkVersion = sdkVersion;

        mSdkVersionFull = sdkVersionFull;
        // If the major version of sdkVersionFull and sdkVersion are not equal,
        // throw RuntimeException to crash the system.
        if (android.sdk.Flags.majorMinorVersioningScheme()
                && (Build.getMajorSdkVersion(sdkVersionFull) != sdkVersion)) {
            throw new RuntimeException("sdkVersionFull:" + sdkVersionFull + " and sdkVersion: "
                    + sdkVersion + " don't match. Please check your build configurations!");
        }

        mIncrementalVersion = incrementalVersion;
        mInjector = injector;
        mInjector.getSystemWrapper().disablePackageCaches();
@@ -2247,6 +2266,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                                + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")");
            }
            mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1;
            mPriorSdkVersionFull = (android.sdk.Flags.majorMinorVersioningScheme() && mIsUpgrade)
                    ? ver.sdkVersionFull : -1;
            mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper,
                    mInjector.getSystemPartitions());

@@ -2375,6 +2396,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            mPermissionManager.onStorageVolumeMounted(
                    StorageManager.UUID_PRIVATE_INTERNAL, mIsUpgrade);
            ver.sdkVersion = mSdkVersion;
            ver.sdkVersionFull = mSdkVersionFull;

            // If this is the first boot or an update from pre-M, then we need to initialize the
            // default preferred apps across all defined users.
@@ -7302,6 +7324,13 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            final boolean isUpgrading = mPriorSdkVersion != -1;
            return isUpgrading && mPriorSdkVersion < sdkVersion;
        }

        @Override
        public boolean isUpgradingFromLowerThanBySdkVersionFull(
                @Build.SdkIntFull int sdkVersionFull) {
            final boolean isUpgrading = mPriorSdkVersionFull != -1;
            return isUpgrading && (mPriorSdkVersionFull < sdkVersionFull);
        }
    }

    private void setEnabledOverlayPackages(@UserIdInt int userId,
@@ -7874,6 +7903,10 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        return mSdkVersion;
    }

    int getSdkVersionFull() {
        return mSdkVersionFull;
    }

    void addAllPackageProperties(@NonNull AndroidPackage pkg) {
        mPackageProperty.addAllProperties(pkg);
    }
+2 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ public final class PackageManagerServiceTestParams {
    public boolean isPreNmr1Upgrade;
    public boolean isPreQupgrade;
    public int priorSdkVersion = -1;
    public int priorSdkVersionFull = -1;
    public boolean isUpgrade;
    public LegacyPermissionManagerInternal legacyPermissionManagerInternal;
    public DisplayMetrics Metrics;
@@ -100,6 +101,7 @@ public final class PackageManagerServiceTestParams {
    public ComponentName resolveComponentName;
    public ArrayMap<String, AndroidPackage> packages;
    public int sdkVersion;
    public int sdkVersionFull;
    public File appInstallDir;
    public File appLib32InstallDir;
    public boolean isEngBuild;
+27 −0
Original line number Diff line number Diff line
@@ -374,6 +374,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
    private static final String ATTR_FINGERPRINT = "fingerprint";
    private static final String ATTR_VOLUME_UUID = "volumeUuid";
    private static final String ATTR_SDK_VERSION = "sdkVersion";
    private static final String ATTR_SDK_VERSION_FULL = "sdkVersionFull";
    private static final String ATTR_DATABASE_VERSION = "databaseVersion";
    private static final String ATTR_VALUE = "value";
    private static final String ATTR_FIRST_INSTALL_TIME = "first-install-time";
@@ -454,6 +455,14 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
     * Version details for a storage volume that may hold apps.
     */
    public static class VersionInfo {
        /**
         * These are the last platform API version we were using for the apps
         * installed on internal and external storage. It is used to grant newer
         * permissions one time during a system upgrade. The full SDK version includes a
         * major version and a minor version.
         */
        int sdkVersionFull;

        /**
         * These are the last platform API version we were using for the apps
         * installed on internal and external storage. It is used to grant newer
@@ -485,6 +494,16 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
         */
        public void forceCurrent() {
            sdkVersion = Build.VERSION.SDK_INT;

            if (android.sdk.Flags.majorMinorVersioningScheme()) {
                sdkVersionFull = Build.VERSION.SDK_INT_FULL;
                if (Build.getMajorSdkVersion(sdkVersionFull) != sdkVersion) {
                    throw new RuntimeException("Build.VERSION.SDK_INT_FULL:" + sdkVersionFull
                            + " and Build.VERSION.SDK_INT: " + sdkVersion + " don't match."
                            + " Please check your build configurations!");
                }
            }

            databaseVersion = CURRENT_DATABASE_VERSION;
            buildFingerprint = Build.FINGERPRINT;
            fingerprint = PackagePartitions.FINGERPRINT;
@@ -2832,6 +2851,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                    serializer.startTag(null, TAG_VERSION);
                    XmlUtils.writeStringAttribute(serializer, ATTR_VOLUME_UUID, volumeUuid);
                    serializer.attributeInt(null, ATTR_SDK_VERSION, ver.sdkVersion);
                    serializer.attributeInt(null, ATTR_SDK_VERSION_FULL, ver.sdkVersionFull);
                    serializer.attributeInt(null, ATTR_DATABASE_VERSION, ver.databaseVersion);
                    XmlUtils.writeStringAttribute(serializer, ATTR_BUILD_FINGERPRINT,
                            ver.buildFingerprint);
@@ -3497,6 +3517,12 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                                ATTR_VOLUME_UUID);
                        final VersionInfo ver = findOrCreateVersion(volumeUuid);
                        ver.sdkVersion = parser.getAttributeInt(null, ATTR_SDK_VERSION);
                        final int defaultSdkVersionFull =
                                android.sdk.Flags.majorMinorVersioningScheme()
                                        ? Build.parseFullVersion(String.valueOf(ver.sdkVersion))
                                        : 0;
                        ver.sdkVersionFull = parser.getAttributeInt(null, ATTR_SDK_VERSION_FULL,
                                defaultSdkVersionFull);
                        ver.databaseVersion = parser.getAttributeInt(null, ATTR_DATABASE_VERSION);
                        ver.buildFingerprint = XmlUtils.readStringAttribute(parser,
                                ATTR_BUILD_FINGERPRINT);
@@ -5046,6 +5072,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            }
            pw.increaseIndent();
            pw.printPair("sdkVersion", ver.sdkVersion);
            pw.printPair("sdkVersionFull", ver.sdkVersionFull);
            pw.printPair("databaseVersion", ver.databaseVersion);
            pw.println();
            pw.printPair("buildFingerprint", ver.buildFingerprint);
+139 −17
Original line number Diff line number Diff line
@@ -53,11 +53,13 @@ import android.content.pm.SuspendDialogInfo;
import android.content.pm.UserInfo;
import android.content.pm.UserPackage;
import android.os.BaseBundle;
import android.os.Build;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -67,9 +69,9 @@ import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.LongSparseArray;

import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.internal.pm.parsing.pkg.PackageImpl;
import com.android.internal.pm.parsing.pkg.ParsedPackage;
@@ -164,7 +166,7 @@ public class PackageManagerSettingsTests {
            try {
                // unregister the user manager from the local service
                LocalServices.removeServiceForTest(UserManagerInternal.class);
                new UserManagerService(InstrumentationRegistry.getContext());
                new UserManagerService(InstrumentationRegistry.getInstrumentation().getContext());
            } catch (Exception e) {
                e.printStackTrace();
                fail("Could not create user manager service; " + e);
@@ -174,7 +176,7 @@ public class PackageManagerSettingsTests {

    @After
    public void tearDown() throws Exception {
        deleteFolder(InstrumentationRegistry.getContext().getFilesDir());
        deleteFolder(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir());
    }

    @Test
@@ -337,7 +339,7 @@ public class PackageManagerSettingsTests {
        // write out
        settings.writeLPr(computer, /*sync=*/true);

        File filesDir = InstrumentationRegistry.getContext().getFilesDir();
        File filesDir = InstrumentationRegistry.getInstrumentation().getContext().getFilesDir();
        File packageXml = new File(filesDir, "system/packages.xml");
        File packagesReserveCopyXml = new File(filesDir, "system/packages.xml.reservecopy");
        // Primary.
@@ -677,6 +679,74 @@ public class PackageManagerSettingsTests {
        assertThat(readPus3.getDistractionFlags(), is(distractionFlags3));
    }

    @RequiresFlagsDisabled(android.sdk.Flags.FLAG_MAJOR_MINOR_VERSIONING_SCHEME)
    @Test
    public void testReadSettingsVersionCodeWithNoSdkVersionFull_zero() {
        /* write out files and read */
        writeNoSdkVersionFullPackageFile();
        Settings settings = makeSettings();
        assertThat(settings.readLPw(computer, createFakeUsers()), is(true));

        assertThat(settings.getInternalVersion().sdkVersion,
                is(Build.VERSION.SDK_INT));
        assertThat(settings.getInternalVersion().sdkVersionFull, is(0));
    }

    @RequiresFlagsEnabled(android.sdk.Flags.FLAG_MAJOR_MINOR_VERSIONING_SCHEME)
    @Test
    public void testReadSettingsVersionCodeWithNoSdkVersionFull_fromSdkVersion() {
        /* write out files and read */
        writeNoSdkVersionFullPackageFile();
        Settings settings = makeSettings();
        assertThat(settings.readLPw(computer, createFakeUsers()), is(true));

        assertThat(settings.getInternalVersion().sdkVersion,
                is(Build.VERSION.SDK_INT));
        assertThat(settings.getInternalVersion().sdkVersionFull,
                is(Build.parseFullVersion(String.valueOf(Build.VERSION.SDK_INT))));
    }

    @RequiresFlagsEnabled(android.sdk.Flags.FLAG_MAJOR_MINOR_VERSIONING_SCHEME)
    @Test
    public void testReadWriteSettingsVersionCodeWithSdkVersionFull() {
        final Settings settingsUnderTest = makeSettings();
        final String uuid = UUID.randomUUID().toString();

        Settings.VersionInfo versionInfo = settingsUnderTest.findOrCreateVersion(uuid);
        versionInfo.forceCurrent();

        settingsUnderTest.writeLPr(computer, /*sync=*/ true);
        settingsUnderTest.onVolumeForgotten(uuid);

        assertThat(settingsUnderTest.readLPw(computer, createFakeUsers()), is(true));
        Settings.VersionInfo readVersionInfo = settingsUnderTest.findOrCreateVersion(uuid);
        assertThat(readVersionInfo.sdkVersionFull, is(Build.VERSION.SDK_INT_FULL));
        assertThat(readVersionInfo.sdkVersion, is(Build.VERSION.SDK_INT));
    }

    @RequiresFlagsDisabled(android.sdk.Flags.FLAG_MAJOR_MINOR_VERSIONING_SCHEME)
    @Test
    public void testSettingsGetInternalVersionNoSdkVersionFull() {
        final Settings settingsUnderTest = makeSettings();
        settingsUnderTest.writeLPr(computer, /*sync=*/ true);
        assertThat(settingsUnderTest.readLPw(computer, createFakeUsers()), is(true));
        assertThat(settingsUnderTest.getInternalVersion().sdkVersionFull, is(0));
        assertThat(settingsUnderTest.getInternalVersion().sdkVersion,
                is(Build.VERSION.SDK_INT));
    }

    @RequiresFlagsEnabled(android.sdk.Flags.FLAG_MAJOR_MINOR_VERSIONING_SCHEME)
    @Test
    public void testSettingsGetInternalVersionWithSdkVersionFull() {
        final Settings settingsUnderTest = makeSettings();
        settingsUnderTest.writeLPr(computer, /*sync=*/ true);
        assertThat(settingsUnderTest.readLPw(computer, createFakeUsers()), is(true));
        assertThat(settingsUnderTest.getInternalVersion().sdkVersionFull,
                is(Build.VERSION.SDK_INT_FULL));
        assertThat(settingsUnderTest.getInternalVersion().sdkVersion,
                is(Build.VERSION.SDK_INT));
    }

    @Test
    public void testReadWritePackageRestrictions_distractionFlags() {
        final Settings settingsUnderTest = makeSettings();
@@ -1382,11 +1452,14 @@ public class PackageManagerSettingsTests {
    private static final String PACKAGE_NAME = "com.android.bar";
    private static final String REAL_PACKAGE_NAME = "com.android.foo";
    private static final File INITIAL_CODE_PATH =
            new File(InstrumentationRegistry.getContext().getFilesDir(), "com.android.bar-1");
            new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                    "com.android.bar-1");
    private static final File UPDATED_CODE_PATH =
            new File(InstrumentationRegistry.getContext().getFilesDir(), "com.android.bar-2");
            new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                    "com.android.bar-2");
    private static final File UPDATED_CODE_PATH2 =
            new File(InstrumentationRegistry.getContext().getFilesDir(), "com.android.bar-3");
            new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                    "com.android.bar-3");
    private static final long INITIAL_VERSION_CODE = 10023L;
    private static final long UPDATED_VERSION_CODE = 10025L;

@@ -2292,7 +2365,8 @@ public class PackageManagerSettingsTests {
    }

    private void writeCorruptedPackagesXml() {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/packages.xml"),
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/packages.xml"),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
                        + "<packages>"
                        + "<last-platform-version internal=\"15\" external=\"0\" />"
@@ -2302,7 +2376,8 @@ public class PackageManagerSettingsTests {
    }

    static void writePackagesXml(String fileName) {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), fileName),
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        fileName),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
                + "<packages>"
                + "<last-platform-version internal=\"15\" external=\"0\" fingerprint=\"foo\" />"
@@ -2371,7 +2446,8 @@ public class PackageManagerSettingsTests {
    }

    private void writePackageRestrictions_noSuspendingPackageXml(final int userId) {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/users/"
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/users/"
                        + userId + "/package-restrictions.xml"),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
                        + "<package-restrictions>\n"
@@ -2386,7 +2462,8 @@ public class PackageManagerSettingsTests {
    }

    private void writePackageRestrictions_noSuspendParamsMapXml(final int userId) {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/users/"
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/users/"
                        + userId + "/package-restrictions.xml"),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
                        + "<package-restrictions>\n"
@@ -2410,7 +2487,8 @@ public class PackageManagerSettingsTests {
    }

    private void writeCorruptedPackageRestrictions(final int userId) {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/users/"
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/users/"
                        + userId + "/package-restrictions.xml"),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
                        + "<package-restrictions>\n"
@@ -2418,7 +2496,8 @@ public class PackageManagerSettingsTests {
    }

    private static void writeStoppedPackagesXml() {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/packages-stopped.xml"),
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/packages-stopped.xml"),
                ( "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
                + "<stopped-packages>"
                + "<pkg name=\"com.android.app1\" nl=\"1\" />"
@@ -2428,7 +2507,8 @@ public class PackageManagerSettingsTests {
    }

    private static void writePackagesList() {
        writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(), "system/packages.list"),
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/packages.list"),
                ( "com.android.app1 11000 0 /data/data/com.android.app1 seinfo1"
                + "com.android.app2 11001 0 /data/data/com.android.app2 seinfo2"
                + "com.android.app3 11030 0 /data/data/com.android.app3 seinfo3")
@@ -2436,7 +2516,8 @@ public class PackageManagerSettingsTests {
    }

    private static void deleteSystemFolder() {
        File systemFolder = new File(InstrumentationRegistry.getContext().getFilesDir(), "system");
        File systemFolder = new File(
                InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(), "system");
        deleteFolder(systemFolder);
    }

@@ -2450,6 +2531,47 @@ public class PackageManagerSettingsTests {
        folder.delete();
    }

    private void writeNoSdkVersionFullPackageFile() {
        deleteSystemFolder();
        writeFile(new File(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                        "system/packages.xml"),
                ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
                        + "<packages>"
                        + "<version sdkVersion=\"36\" databaseVersion=\"3\" buildFingerprint=\"123456:userdebug\" fingerprint=\"64bc7e5656eb8ec3821157973e6eee7449333661\" />"
                        + "<version volumeUuid=\"primary_physical\" sdkVersion=\"36\" databaseVersion=\"3\" buildFingerprint=\"123456:userdebug\""
                        + "<permission-trees>"
                        + "<item name=\"com.google.android.permtree\" package=\"com.google.android.permpackage\" />"
                        + "</permission-trees>"
                        + "<permissions>"
                        + "<item name=\"android.permission.REBOOT\" package=\"android\" protection=\"18\" />"
                        + "</permissions>"
                        + "<package name=\"com.android.app1\" codePath=\"/system/app/app1.apk\" nativeLibraryPath=\"/data/data/com.android.app1/lib\" flags=\"1\" ft=\"1360e2caa70\" it=\"135f2f80d08\" ut=\"1360e2caa70\" version=\"1109\" sharedUserId=\"11000\">"
                        + "<sigs count=\"1\">"
                        + "<cert index=\"0\" key=\"" + KeySetStrings.ctsKeySetCertA + "\" />"
                        + "</sigs>"
                        + "<proper-signing-keyset identifier=\"1\" />"
                        + "</package>"
                        + "<shared-user name=\"com.android.shared1\" userId=\"11000\">"
                        + "<sigs count=\"1\">"
                        + "<cert index=\"1\" />"
                        + "</sigs>"
                        + "<perms>"
                        + "<item name=\"android.permission.REBOOT\" />"
                        + "</perms>"
                        + "</shared-user>"
                        + "<keyset-settings version=\"1\">"
                        + "<keys>"
                        + "<public-key identifier=\"1\" value=\"" + KeySetStrings.ctsKeySetPublicKeyA + "\" />"
                        + "</keys>"
                        + "<keysets>"
                        + "<keyset identifier=\"1\">"
                        + "<key-id identifier=\"1\" />"
                        + "</keyset>"
                        + "</keysets>"
                        + "</keyset-settings>"
                        + "</packages>").getBytes());
    }

    static void writeOldFiles() {
        deleteSystemFolder();
        writePackagesXml("system/packages.xml");
@@ -2465,7 +2587,7 @@ public class PackageManagerSettingsTests {
    }

    private Settings makeSettings() {
        return new Settings(InstrumentationRegistry.getContext().getFilesDir(),
        return new Settings(InstrumentationRegistry.getInstrumentation().getContext().getFilesDir(),
                mRuntimePermissionsPersistence, mPermissionDataProvider,
                mDomainVerificationManager, mHandler,
                new PackageManagerTracedLock());
Loading