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

Commit 025bfab9 authored by Paul Duffin's avatar Paul Duffin
Browse files

Include OrgApacheHttpLegacyUpdater unconditionally

Previously, OrgApacheHttpLegacyUpdater was added to the bootclasspath
(in the framework-oahl-backward-compatibility library) if and only if
the org.apache.http.legacy.jar was not on the bootclasspath. Its
presence caused the runtime to maintain backwards compatibility by
adding org.apache.http.legacy.jar to the app's classpath for apps that
target < P.

The org.apache.http.legacy.jar was permanently removed from the
bootclasspath in P and so the framework-oahl-backward-compatibility
library, and hence OrgApacheHttpLegacyUpdater, are always on the
bootclasspath and so there is no need to treat it as optional. To that
end this change:
1) Includes it in the main framework target, previously it was
   explicitly excluded.
2) Removes the code for handling the case when it is not present.
3) Removes tests for when it is not present.
4) Removes documentation describing what happens when it is not
   present.

Bug: 18027885
Test: cts/tests/signature/runSignatureTest.sh
Change-Id: I3892ead8cd2a8bf17e57bf08e3bf6ee65afac0a1
parent 3b887bdf
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -668,8 +668,6 @@ java_defaults {
    exclude_srcs: [
        // See comment on framework-atb-backward-compatibility module below
        "core/java/android/content/pm/AndroidTestBaseUpdater.java",
        // See comment on framework-oahl-backward-compatibility module below
        "core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java",
    ],

    no_framework_libs: true,
+0 −6
Original line number Diff line number Diff line
@@ -25,12 +25,6 @@ import com.android.internal.annotations.VisibleForTesting;
 * Updates a package to ensure that if it targets < P that the org.apache.http.legacy library is
 * included by default.
 *
 * <p>This is separated out so that it can be conditionally included at build time depending on
 * whether org.apache.http.legacy is on the bootclasspath or not. In order to include this at
 * build time, and remove org.apache.http.legacy from the bootclasspath pass
 * REMOVE_OAHL_FROM_BCP=true on the build command line, otherwise this class will not be included
 * and the
 *
 * @hide
 */
@VisibleForTesting
+5 −20
Original line number Diff line number Diff line
@@ -45,13 +45,9 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
    static {
        final List<PackageSharedLibraryUpdater> packageUpdaters = new ArrayList<>();

        // Attempt to load and add the optional updater that will only be available when
        // REMOVE_OAHL_FROM_BCP=true. If that could not be found then add the default updater that
        // will remove any references to org.apache.http.library from the package so that it does
        // not try and load the library when it is on the bootclasspath.
        boolean bootClassPathContainsOAHL = !addOptionalUpdater(packageUpdaters,
                "android.content.pm.OrgApacheHttpLegacyUpdater",
                RemoveUnnecessaryOrgApacheHttpLegacyLibrary::new);
        // Automatically add the org.apache.http.legacy library to the app classpath if the app
        // targets < P.
        packageUpdaters.add(new OrgApacheHttpLegacyUpdater());

        packageUpdaters.add(new AndroidHidlUpdater());

@@ -70,7 +66,7 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
        PackageSharedLibraryUpdater[] updaterArray = packageUpdaters
                .toArray(new PackageSharedLibraryUpdater[0]);
        INSTANCE = new PackageBackwardCompatibility(
                bootClassPathContainsOAHL, bootClassPathContainsATB, updaterArray);
                bootClassPathContainsATB, updaterArray);
    }

    /**
@@ -116,15 +112,12 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
        return INSTANCE;
    }

    private final boolean mBootClassPathContainsOAHL;

    private final boolean mBootClassPathContainsATB;

    private final PackageSharedLibraryUpdater[] mPackageUpdaters;

    public PackageBackwardCompatibility(boolean bootClassPathContainsOAHL,
    public PackageBackwardCompatibility(
            boolean bootClassPathContainsATB, PackageSharedLibraryUpdater[] packageUpdaters) {
        this.mBootClassPathContainsOAHL = bootClassPathContainsOAHL;
        this.mBootClassPathContainsATB = bootClassPathContainsATB;
        this.mPackageUpdaters = packageUpdaters;
    }
@@ -147,14 +140,6 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater {
        }
    }

    /**
     * True if the org.apache.http.legacy is on the bootclasspath, false otherwise.
     */
    @VisibleForTesting
    public static boolean bootClassPathContainsOAHL() {
        return INSTANCE.mBootClassPathContainsOAHL;
    }

    /**
     * True if the android.test.base is on the bootclasspath, false otherwise.
     */
+3 −39
Original line number Diff line number Diff line
@@ -46,22 +46,12 @@ public class PackageBackwardCompatibilityTest extends PackageSharedLibraryUpdate
        checkBackwardsCompatibility(before, after);
    }

    /**
     * Detect when the org.apache.http.legacy is not on the bootclasspath.
     *
     * <p>This test will be ignored when org.apache.http.legacy is not on the bootclasspath and
     * succeed otherwise. This allows a developer to ensure that the tests are being
     */
    @Test
    public void detectWhenOAHLisOnBCP() {
        Assume.assumeTrue(PackageBackwardCompatibility.bootClassPathContainsOAHL());
    }

    /**
     * Detect when the android.test.base is not on the bootclasspath.
     *
     * <p>This test will be ignored when org.apache.http.legacy is not on the bootclasspath and
     * succeed otherwise. This allows a developer to ensure that the tests are being
     * succeed otherwise. This allows a developer to ensure that the tests are being run in the
     * correct environment.
     */
    @Test
    public void detectWhenATBisOnBCP() {
@@ -84,9 +74,7 @@ public class PackageBackwardCompatibilityTest extends PackageSharedLibraryUpdate
        if (!PackageBackwardCompatibility.bootClassPathContainsATB()) {
            expected.add(ANDROID_TEST_BASE);
        }
        if (!PackageBackwardCompatibility.bootClassPathContainsOAHL()) {
        expected.add(ORG_APACHE_HTTP_LEGACY);
        }

        PackageBuilder after = builder()
                .targetSdkVersion(Build.VERSION_CODES.O)
@@ -95,30 +83,6 @@ public class PackageBackwardCompatibilityTest extends PackageSharedLibraryUpdate
        checkBackwardsCompatibility(before, after);
    }

    /**
     * Ensures that the {@link PackageBackwardCompatibility} uses
     * {@link RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest}
     * when necessary.
     *
     * <p>More comprehensive tests for that class can be found in
     * {@link RemoveUnnecessaryOrgApacheHttpLegacyLibraryTest}.
     */
    @Test
    public void org_apache_http_legacy_in_usesLibraries() {
        Assume.assumeTrue("Test requires that "
                        + ORG_APACHE_HTTP_LEGACY + " is on the bootclasspath",
                PackageBackwardCompatibility.bootClassPathContainsOAHL());

        PackageBuilder before = builder()
                .requiredLibraries(ORG_APACHE_HTTP_LEGACY);

        // org.apache.http.legacy should be removed from the libraries because it is provided
        // on the bootclasspath and providing both increases start up cost unnecessarily.
        PackageBuilder after = builder();

        checkBackwardsCompatibility(before, after);
    }

    /**
     * Ensures that the {@link PackageBackwardCompatibility} uses
     * {@link RemoveUnnecessaryAndroidTestBaseLibrary}