Enforce partition property on apex system server jars
This is a followup AI from https://r.android.com/3288083, which installs
dexpreopt files of apex system server jars in the same partition as the
top-level apex. This CL enforces that the partition properties of the
apex and the java library match.
This has been implemented in a bottomup manner.
systemserverclasspath_fragment module sets
`LibraryNameToPartitionInfoProvider`. The top-level apex uses this info
and raies an exception if the partition properties do not match.
This enforcement is done only for source apexes for now. It is not
needed for prebuilts since
- The dexpreopt rules of jars in prebuilt apexes are generated in the
top-level `prebuiltApex`/ `apexSet`
- We do not have prebuilts of system_ext apexes today
(com.android.compos is not part of mainline)
Test: m nothing --no-skip-soong-tests
Change-Id: Ib4df634457f315d5421681bdb0afebc2b1bf92d9
diff --git a/apex/apex_test.go b/apex/apex_test.go
index da6214d..153ee31 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -11670,3 +11670,48 @@
}
`)
}
+
+// If an apex sets system_ext_specific: true, its systemserverclasspath libraries must set this property as well.
+func TestApexSSCPJarMustBeInSamePartitionAsApex(t *testing.T) {
+ testApexError(t, `foo is an apex systemserver jar, but its partition does not match the partition of its containing apex`, `
+ apex {
+ name: "myapex",
+ key: "myapex.key",
+ systemserverclasspath_fragments: [
+ "mysystemserverclasspathfragment",
+ ],
+ min_sdk_version: "29",
+ updatable: true,
+ system_ext_specific: true,
+ }
+
+ apex_key {
+ name: "myapex.key",
+ public_key: "testkey.avbpubkey",
+ private_key: "testkey.pem",
+ }
+
+ java_library {
+ name: "foo",
+ srcs: ["b.java"],
+ min_sdk_version: "29",
+ installable: true,
+ apex_available: [
+ "myapex",
+ ],
+ sdk_version: "current",
+ }
+
+ systemserverclasspath_fragment {
+ name: "mysystemserverclasspathfragment",
+ contents: [
+ "foo",
+ ],
+ apex_available: [
+ "myapex",
+ ],
+ }
+ `,
+ dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"),
+ )
+}