From 5d70cdf262b4494d5fde4a1fe13ba326efc126b9 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Wed, 16 May 2018 13:06:33 +0100 Subject: [PATCH] Update backwards compatibility support for android.test.base Previously, the plan was for android.test.base to be removed from the bootclasspath in P, i.e. in the same release as org.apache.http.legacy. Any apps that targeted < P were to have the android.test.base library added to their app classpath in order to maintain backwards compatibility. Unfortunately, it was not possible to remove android.test.base from P and instead it is being removed from Q. This update prepares for that by updating the backwards compatibility support and its tests to add the android.test.base library to apps that target < Q. The affected code is only used at runtime when REMOVE_ATB_FROM_BCP=true. Bug: 73711752 Test: atest FrameworksCoreTests with and without REMOVE_ATB_FROM_BCP=true Change-Id: I76b40dad14193cd174114a351b1350c18d647bed --- .../content/pm/AndroidTestBaseUpdater.java | 12 ++++++++--- .../pm/OrgApacheHttpLegacyUpdater.java | 6 ++++++ .../pm/PackageBackwardCompatibility.java | 2 +- .../pm/PackageSharedLibraryUpdater.java | 6 ------ .../pm/AndroidTestBaseUpdaterTest.java | 20 +++++++++---------- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/core/java/android/content/pm/AndroidTestBaseUpdater.java b/core/java/android/content/pm/AndroidTestBaseUpdater.java index 2aaac0280a0ec..6a1778cfd3f66 100644 --- a/core/java/android/content/pm/AndroidTestBaseUpdater.java +++ b/core/java/android/content/pm/AndroidTestBaseUpdater.java @@ -19,11 +19,12 @@ import static android.content.pm.SharedLibraryNames.ANDROID_TEST_BASE; import static android.content.pm.SharedLibraryNames.ANDROID_TEST_RUNNER; import android.content.pm.PackageParser.Package; +import android.os.Build; import com.android.internal.annotations.VisibleForTesting; /** - * Updates a package to ensure that if it targets < P that the android.test.base library is + * Updates a package to ensure that if it targets <= P that the android.test.base library is * included by default. * *

This is separated out so that it can be conditionally included at build time depending on @@ -37,12 +38,17 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater { + private static boolean apkTargetsApiLevelLessThanOrEqualToP(Package pkg) { + int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; + return targetSdkVersion <= Build.VERSION_CODES.P; + } + @Override public void updatePackage(Package pkg) { - // Packages targeted at <= O_MR1 expect the classes in the android.test.base library + // Packages targeted at <= P expect the classes in the android.test.base library // to be accessible so this maintains backward compatibility by adding the // android.test.base library to those packages. - if (apkTargetsApiLevelLessThanOrEqualToOMR1(pkg)) { + if (apkTargetsApiLevelLessThanOrEqualToP(pkg)) { prefixRequiredLibrary(pkg, ANDROID_TEST_BASE); } else { // If a package already depends on android.test.runner then add a dependency on diff --git a/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java b/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java index 7790067b03ded..707443b196792 100644 --- a/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java +++ b/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java @@ -18,6 +18,7 @@ package android.content.pm; import static android.content.pm.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY; import android.content.pm.PackageParser.Package; +import android.os.Build; import com.android.internal.annotations.VisibleForTesting; @@ -30,6 +31,11 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting public class OrgApacheHttpLegacyUpdater extends PackageSharedLibraryUpdater { + private static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(Package pkg) { + int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; + return targetSdkVersion < Build.VERSION_CODES.P; + } + @Override public void updatePackage(Package pkg) { // Packages targeted at <= O_MR1 expect the classes in the org.apache.http.legacy library diff --git a/core/java/android/content/pm/PackageBackwardCompatibility.java b/core/java/android/content/pm/PackageBackwardCompatibility.java index b19196a9b636d..4331bd4ac4d48 100644 --- a/core/java/android/content/pm/PackageBackwardCompatibility.java +++ b/core/java/android/content/pm/PackageBackwardCompatibility.java @@ -116,7 +116,7 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater { private final PackageSharedLibraryUpdater[] mPackageUpdaters; - public PackageBackwardCompatibility( + private PackageBackwardCompatibility( boolean bootClassPathContainsATB, PackageSharedLibraryUpdater[] packageUpdaters) { this.mBootClassPathContainsATB = bootClassPathContainsATB; this.mPackageUpdaters = packageUpdaters; diff --git a/core/java/android/content/pm/PackageSharedLibraryUpdater.java b/core/java/android/content/pm/PackageSharedLibraryUpdater.java index b14b321a2481e..1565d9ce77d49 100644 --- a/core/java/android/content/pm/PackageSharedLibraryUpdater.java +++ b/core/java/android/content/pm/PackageSharedLibraryUpdater.java @@ -17,7 +17,6 @@ package android.content.pm; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Build; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; @@ -60,11 +59,6 @@ public abstract class PackageSharedLibraryUpdater { || ArrayUtils.contains(usesOptionalLibraries, apacheHttpLegacy); } - static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(PackageParser.Package pkg) { - int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; - return targetSdkVersion < Build.VERSION_CODES.P; - } - /** * Add an implicit dependency. * diff --git a/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java b/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java index dce22ce6a6f28..0f78e92c5aeab 100644 --- a/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java +++ b/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java @@ -35,37 +35,37 @@ public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest private static final String OTHER_LIBRARY = "other.library"; @Test - public void targeted_at_O() { + public void targeted_at_P() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O); + .targetSdkVersion(Build.VERSION_CODES.P); // Should add org.apache.http.legacy. PackageBuilder after = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE); checkBackwardsCompatibility(before, after); } @Test - public void targeted_at_O_not_empty_usesLibraries() { + public void targeted_at_P_not_empty_usesLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(OTHER_LIBRARY); // The org.apache.http.legacy jar should be added at the start of the list because it // is not on the bootclasspath and the package targets pre-P. PackageBuilder after = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE, OTHER_LIBRARY); checkBackwardsCompatibility(before, after); } @Test - public void targeted_at_O_in_usesLibraries() { + public void targeted_at_P_in_usesLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE); // No change is required because although org.apache.http.legacy has been removed from @@ -74,9 +74,9 @@ public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest } @Test - public void targeted_at_O_in_usesOptionalLibraries() { + public void targeted_at_P_in_usesOptionalLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .optionalLibraries(ANDROID_TEST_BASE); // No change is required because although org.apache.http.legacy has been removed from