diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index bea4ae3af1fd7..68f547979ce0e 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -181,9 +181,12 @@ java_genrule {
":FrameworksServicesTests_install_split_feature_a",
":FrameworksServicesTests_install_uses_sdk_0",
":FrameworksServicesTests_install_uses_sdk_q0",
- ":FrameworksServicesTests_install_uses_sdk_r",
+ ":FrameworksServicesTests_install_uses_sdk_q0_r0",
+ ":FrameworksServicesTests_install_uses_sdk_r_none",
":FrameworksServicesTests_install_uses_sdk_r0",
":FrameworksServicesTests_install_uses_sdk_r5",
+ ":FrameworksServicesTests_install_uses_sdk_r0_s0",
+ ":FrameworksServicesTests_install_uses_sdk_r0_s5",
],
out: ["FrameworkServicesTests_apks_as_resources.res.zip"],
tools: ["soong_zip"],
diff --git a/services/tests/servicestests/apks/install_uses_sdk/Android.bp b/services/tests/servicestests/apks/install_uses_sdk/Android.bp
index feb152c49eb39..a51293dc19974 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/Android.bp
+++ b/services/tests/servicestests/apks/install_uses_sdk/Android.bp
@@ -7,42 +7,50 @@ package {
default_applicable_licenses: ["frameworks_base_license"],
}
+android_test_helper_app {
+ name: "FrameworksServicesTests_install_uses_sdk_q0",
+ defaults: ["FrameworksServicesTests_apks_defaults"],
+ manifest: "AndroidManifest-q0.xml",
+}
+
+android_test_helper_app {
+ name: "FrameworksServicesTests_install_uses_sdk_q0_r0",
+ defaults: ["FrameworksServicesTests_apks_defaults"],
+ manifest: "AndroidManifest-q0-r0.xml",
+}
+
+android_test_helper_app {
+ name: "FrameworksServicesTests_install_uses_sdk_r_none",
+ defaults: ["FrameworksServicesTests_apks_defaults"],
+ manifest: "AndroidManifest-r-none.xml",
+}
+
android_test_helper_app {
name: "FrameworksServicesTests_install_uses_sdk_r0",
defaults: ["FrameworksServicesTests_apks_defaults"],
manifest: "AndroidManifest-r0.xml",
-
- srcs: ["**/*.java"],
}
android_test_helper_app {
name: "FrameworksServicesTests_install_uses_sdk_r5",
defaults: ["FrameworksServicesTests_apks_defaults"],
manifest: "AndroidManifest-r5.xml",
-
- srcs: ["**/*.java"],
}
android_test_helper_app {
- name: "FrameworksServicesTests_install_uses_sdk_q0",
+ name: "FrameworksServicesTests_install_uses_sdk_r0_s0",
defaults: ["FrameworksServicesTests_apks_defaults"],
- manifest: "AndroidManifest-q0.xml",
-
- srcs: ["**/*.java"],
+ manifest: "AndroidManifest-r0-s0.xml",
}
android_test_helper_app {
- name: "FrameworksServicesTests_install_uses_sdk_r",
+ name: "FrameworksServicesTests_install_uses_sdk_r0_s5",
defaults: ["FrameworksServicesTests_apks_defaults"],
- manifest: "AndroidManifest-r.xml",
-
- srcs: ["**/*.java"],
+ manifest: "AndroidManifest-r0-s5.xml",
}
android_test_helper_app {
name: "FrameworksServicesTests_install_uses_sdk_0",
defaults: ["FrameworksServicesTests_apks_defaults"],
manifest: "AndroidManifest-0.xml",
-
- srcs: ["**/*.java"],
}
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml
index 215384b2831c8..90b13d45fc05e 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml
new file mode 100644
index 0000000000000..2a32276606862
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml
similarity index 95%
rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
rename to services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml
index 5d22577d118a4..c79c61c3dc324 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml
new file mode 100644
index 0000000000000..af30915b4f0bb
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml
new file mode 100644
index 0000000000000..bafe4c4faa3f6
--- /dev/null
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml
index c1244f2463553..2920b86415862 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml
@@ -17,7 +17,7 @@
package="com.android.frameworks.servicestests.install_uses_sdk">
-
+
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml
index 3410938b3c2d4..7723d051a0418 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
index fb13d8707a44c..c2b385889802b 100644
--- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
@@ -17,10 +17,10 @@
package com.android.server.pm.parsing;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
import android.apex.ApexInfo;
import android.content.Context;
@@ -39,6 +39,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.FileUtils;
import android.platform.test.annotations.Presubmit;
+import android.util.Pair;
import android.util.SparseIntArray;
import androidx.test.InstrumentationRegistry;
@@ -50,12 +51,17 @@ import com.android.internal.util.ArrayUtils;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.parsing.pkg.ParsedPackage;
+import com.google.common.truth.Expect;
+
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.File;
import java.io.InputStream;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import java.util.function.Function;
/**
@@ -89,6 +95,8 @@ public class PackageParserLegacyCoreTest {
private static final int PLATFORM_VERSION = 20;
private static final int NEWER_VERSION = 30;
+ @Rule public final Expect expect = Expect.create();
+
private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
boolean isPlatformReleased, int expectedMinSdk) {
final String[] outError = new String[1];
@@ -553,36 +561,44 @@ public class PackageParserLegacyCoreTest {
@Test
public void testUsesSdk() throws Exception {
- ParsedPackage pkg =
- parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
- SparseIntArray minExtVers = pkg.getMinExtensionVersions();
+ ParsedPackage pkg;
+ SparseIntArray minExtVers;
+ pkg = parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
+ minExtVers = pkg.getMinExtensionVersions();
assertEquals(1, minExtVers.size());
- assertEquals(0, minExtVers.get(10000, -1));
+ assertEquals(0, minExtVers.get(30, -1));
- try {
- parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
- fail("Expected parsing exception due to incompatible extension SDK version");
- } catch (PackageParser.PackageParserException expected) {
- assertEquals(PackageManager.INSTALL_FAILED_OLDER_SDK, expected.error);
- }
- try {
- parsePackage("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0, x -> x);
- fail("Expected parsing exception due to non-existent extension SDK");
- } catch (PackageParser.PackageParserException expected) {
- assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
- }
- try {
- parsePackage("install_uses_sdk.apk_r", R.raw.install_uses_sdk_r, x -> x);
- fail("Expected parsing exception due to unspecified extension SDK version");
- } catch (PackageParser.PackageParserException expected) {
- assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
- }
- try {
- parsePackage("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0, x -> x);
- fail("Expected parsing exception due to unspecified extension SDK");
- } catch (PackageParser.PackageParserException expected) {
- assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error);
- }
+ pkg = parsePackage("install_uses_sdk.apk_r0_s0", R.raw.install_uses_sdk_r0_s0, x -> x);
+ minExtVers = pkg.getMinExtensionVersions();
+ assertEquals(2, minExtVers.size());
+ assertEquals(0, minExtVers.get(30, -1));
+ assertEquals(0, minExtVers.get(31, -1));
+ Map, Integer> appToError = new HashMap<>();
+ appToError.put(Pair.create("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5),
+ PackageManager.INSTALL_FAILED_OLDER_SDK);
+ appToError.put(Pair.create("install_uses_sdk.apk_r0_s5", R.raw.install_uses_sdk_r0_s5),
+ PackageManager.INSTALL_FAILED_OLDER_SDK);
+
+ appToError.put(Pair.create("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0),
+ PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED);
+ appToError.put(Pair.create("install_uses_sdk.apk_q0_r0", R.raw.install_uses_sdk_q0_r0),
+ PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED);
+ appToError.put(Pair.create("install_uses_sdk.apk_r_none", R.raw.install_uses_sdk_r_none),
+ PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED);
+ appToError.put(Pair.create("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0),
+ PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED);
+
+ for (Map.Entry, Integer> entry : appToError.entrySet()) {
+ String filename = entry.getKey().first;
+ int resId = entry.getKey().second;
+ int result = entry.getValue();
+ try {
+ parsePackage(filename, resId, x -> x);
+ expect.withMessage("Expected parsing error %d from %s", result, filename).fail();
+ } catch (PackageParser.PackageParserException expected) {
+ expect.that(expected.error).isEqualTo(result);
+ }
+ }
}
}