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

Commit 7d9ad158 authored by Ivan Chiang's avatar Ivan Chiang
Browse files

[PM] Check sdkVersionFull and sdkVersion in PackageManager

If the major version of sdkVersionFull and sdkVersion are not equal,
throw RuntimeException. Add new test case to test the behavior.

Flag: android.sdk.major_minor_versioning_scheme
Test: atest PackageManagerSettingsTests
Test: atest FrameworksMockingServicesTests_android_server_pm
Bug: 374765600
Change-Id: I4cfb0c43eb5398b274794dfe1b84e154bcd08d18
parent d99d79a3
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1984,7 +1984,16 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        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();
+7 −1
Original line number Diff line number Diff line
@@ -493,11 +493,17 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
         * typically after resolving any required upgrade steps.
         */
        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!");
                }
            }

            sdkVersion = Build.VERSION.SDK_INT;
            databaseVersion = CURRENT_DATABASE_VERSION;
            buildFingerprint = Build.FINGERPRINT;
            fingerprint = PackagePartitions.FINGERPRINT;
+1 −1
Original line number Diff line number Diff line
@@ -74,9 +74,9 @@ android_test {
        // TODO: remove once Android migrates to JUnit 4.12, which provides assertThrows
        "testng",
        "compatibility-device-util-axt",
        "flag-junit",
        "am_flags_lib",
        "device_policy_aconfig_flags_lib",
        "android.content.pm.flags-aconfig-java",
    ] + select(soong_config_variable("ANDROID", "release_crashrecovery_module"), {
        "true": ["service-crashrecovery-pre-jarjar"],
        default: [],
+5 −2
Original line number Diff line number Diff line
@@ -124,14 +124,17 @@ public class ApexManagerTest {
        });

        mMockSystem.system().stageNominalSystemState();
        final int sdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
        final int sdkVersionFull = (android.sdk.Flags.majorMinorVersioningScheme())
                ? Build.parseFullVersion(String.valueOf(sdkVersion)) : 0;
        mPmService = new PackageManagerService(mMockSystem.mocks().getInjector(),
                false /*factoryTest*/,
                MockSystem.Companion.getDEFAULT_VERSION_INFO().fingerprint,
                false /*isEngBuild*/,
                false /*isUserDebugBuild*/,
                Build.VERSION_CODES.CUR_DEVELOPMENT,
                sdkVersion,
                Build.VERSION.INCREMENTAL,
                0 /*sdkVersionFull*/);
                sdkVersionFull);
        mMockSystem.system().validateFinalState();
        mInstallPackageHelper = new InstallPackageHelper(mPmService, mock(AppDataHelper.class),
                mock(RemovePackageHelper.class), mock(DeletePackageHelper.class),
+7 −2
Original line number Diff line number Diff line
@@ -66,14 +66,19 @@ class DeletePackageHelperTest {
    }

    private fun createPackageManagerService(): PackageManagerService {
        val sdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT
        val sdkVersionFull = if (android.sdk.Flags.majorMinorVersioningScheme())
            Build.parseFullVersion(sdkVersion.toString())
        else
            0
        return spy(PackageManagerService(rule.mocks().injector,
            false /*factoryTest*/,
            MockSystem.DEFAULT_VERSION_INFO.fingerprint,
            false /*isEngBuild*/,
            false /*isUserDebugBuild*/,
            Build.VERSION_CODES.CUR_DEVELOPMENT,
            sdkVersion,
            Build.VERSION.INCREMENTAL,
            0 /*sdkVersionFull*/))
            sdkVersionFull))
    }

    @Test
Loading