diff --git a/core/java/android/content/pm/PackageBackwardCompatibility.java b/core/java/android/content/pm/PackageBackwardCompatibility.java index cee25994a2719..8014c94d198df 100644 --- a/core/java/android/content/pm/PackageBackwardCompatibility.java +++ b/core/java/android/content/pm/PackageBackwardCompatibility.java @@ -16,6 +16,8 @@ package android.content.pm; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.pm.PackageParser.Package; import android.os.Build; @@ -56,7 +58,7 @@ public class PackageBackwardCompatibility { boolean apacheHttpLegacyPresent = isLibraryPresent( usesLibraries, usesOptionalLibraries, APACHE_HTTP_LEGACY); if (!apacheHttpLegacyPresent) { - usesLibraries = ArrayUtils.add(usesLibraries, APACHE_HTTP_LEGACY); + usesLibraries = prefix(usesLibraries, APACHE_HTTP_LEGACY); } } @@ -86,4 +88,12 @@ public class PackageBackwardCompatibility { return ArrayUtils.contains(usesLibraries, apacheHttpLegacy) || ArrayUtils.contains(usesOptionalLibraries, apacheHttpLegacy); } + + private static @NonNull ArrayList prefix(@Nullable ArrayList cur, T val) { + if (cur == null) { + cur = new ArrayList<>(); + } + cur.add(0, val); + return cur; + } } diff --git a/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java index 1a54bd608d48b..63a5e4cc1dd8a 100644 --- a/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java +++ b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java @@ -41,6 +41,8 @@ public class PackageBackwardCompatibilityTest { private static final String ANDROID_TEST_MOCK = "android.test.mock"; + private static final String OTHER_LIBRARY = "other.library"; + private Package mPackage; private static ArrayList arrayList(String... strings) { @@ -77,6 +79,18 @@ public class PackageBackwardCompatibilityTest { assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries); } + @Test + public void targeted_at_O_not_empty_usesLibraries() { + mPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.O; + mPackage.usesLibraries = arrayList(OTHER_LIBRARY); + PackageBackwardCompatibility.modifySharedLibraries(mPackage); + // The org.apache.http.legacy jar should be added at the start of the list. + assertEquals("usesLibraries not updated correctly", + arrayList(ORG_APACHE_HTTP_LEGACY, OTHER_LIBRARY), + mPackage.usesLibraries); + assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries); + } + @Test public void targeted_at_O_org_apache_http_legacy_in_usesLibraries() { mPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.O;