ensure that privapp_allowlist is installed before android_app

AndroidMk assumes that the app is the last file installed, and it uses
this assumption to populate the LOCAL_SOONG_INSTALLED_MODULE entry. This
CL moves the privapp_allowlist installation to before the app
installation to respect this assumption.

Bug: 242509786
Test: go test
Test: OUT_DIR=out.ref m nothing &&
  cp aosp/2562351 && OUT_DIR=out.change m nothing &&
  GOWORK=$PWD/build/bazel/mkcompare/go.work \
  go run android/bazel/mkcompare/cmd -json \
  <(sed -e "s/out\.ref/out/g" out.ref/soong/Android-aosp_cheetah.mk) \
  <(sed -e "s/out\.change/out/g" out.change/soong/Android-aosp_cheetah.mk)
  && verify manually that the only diffs are related to the removal of
  the prebuilt_etc module.
Change-Id: I95ec27070f575e79fb976de68493a219717ed89a
This commit is contained in:
Sam Delmerico
2023-05-25 14:45:30 -04:00
parent 15809f8101
commit b1daccdc97
5 changed files with 116 additions and 8 deletions

View File

@@ -3589,3 +3589,82 @@ func TestPrivappAllowlist(t *testing.T) {
app.Output("out/soong/target/product/test_device/system/etc/permissions/privapp_allowlist_com.android.foo.xml")
overrideApp.Output("out/soong/target/product/test_device/system/etc/permissions/privapp_allowlist_com.google.android.foo.xml")
}
func TestPrivappAllowlistAndroidMk(t *testing.T) {
result := android.GroupFixturePreparers(
PrepareForTestWithJavaDefaultModules,
android.PrepareForTestWithAndroidMk,
).RunTestWithBp(
t,
`
android_app {
name: "foo",
srcs: ["a.java"],
privapp_allowlist: "privapp_allowlist_com.android.foo.xml",
privileged: true,
sdk_version: "current",
}
override_android_app {
name: "bar",
base: "foo",
package_name: "com.google.android.foo",
}
`,
)
baseApp := result.ModuleForTests("foo", "android_common")
overrideApp := result.ModuleForTests("foo", "android_common_bar")
baseAndroidApp := baseApp.Module().(*AndroidApp)
baseEntries := android.AndroidMkEntriesForTest(t, result.TestContext, baseAndroidApp)[0]
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALLED_MODULE; expected to find foo.apk",
baseEntries.EntryMap["LOCAL_SOONG_INSTALLED_MODULE"][0],
"\\S+foo.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include foo.apk",
baseEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"\\S+foo.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include app",
baseEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"\\S+foo.apk:\\S+/target/product/test_device/system/priv-app/foo/foo.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include privapp_allowlist",
baseEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"privapp_allowlist_com.android.foo.xml:\\S+/target/product/test_device/system/etc/permissions/privapp_allowlist_com.android.foo.xml",
)
overrideAndroidApp := overrideApp.Module().(*AndroidApp)
overrideEntries := android.AndroidMkEntriesForTest(t, result.TestContext, overrideAndroidApp)[0]
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALLED_MODULE; expected to find bar.apk",
overrideEntries.EntryMap["LOCAL_SOONG_INSTALLED_MODULE"][0],
"\\S+bar.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include bar.apk",
overrideEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"\\S+bar.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include app",
overrideEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"\\S+bar.apk:\\S+/target/product/test_device/system/priv-app/bar/bar.apk",
)
android.AssertStringMatches(
t,
"androidmk has incorrect LOCAL_SOONG_INSTALL_PAIRS; expected to it to include privapp_allowlist",
overrideEntries.EntryMap["LOCAL_SOONG_INSTALL_PAIRS"][0],
"\\S+soong/.intermediates/foo/android_common_bar/privapp_allowlist_com.google.android.foo.xml:\\S+/target/product/test_device/system/etc/permissions/privapp_allowlist_com.google.android.foo.xml",
)
}