Merge "Disable prebuilt apps without an apk later" into main am: 535f739153 am: 731c981258

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2909137

Change-Id: I92c58414ee2825f327c3f5475d1216e497272490
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2024-01-16 21:50:25 +00:00
committed by Automerger Merge Worker
4 changed files with 147 additions and 21 deletions

View File

@@ -151,7 +151,9 @@ func (a *AndroidAppImport) IsInstallable() bool {
}
// Updates properties with variant-specific values.
func (a *AndroidAppImport) processVariants(ctx android.LoadHookContext) {
// This happens as a DefaultableHook instead of a LoadHook because we want to run it after
// soong config variables are applied.
func (a *AndroidAppImport) processVariants(ctx android.DefaultableHookContext) {
config := ctx.Config()
dpiProps := reflect.ValueOf(a.dpiVariants).Elem().FieldByName("Dpi_variants")
@@ -543,7 +545,7 @@ func AndroidAppImportFactory() android.Module {
module.AddProperties(&module.dexpreoptProperties)
module.AddProperties(&module.usesLibrary.usesLibraryProperties)
module.populateAllVariantStructs()
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
module.SetDefaultableHook(func(ctx android.DefaultableHookContext) {
module.processVariants(ctx)
})
@@ -594,7 +596,7 @@ func AndroidTestImportFactory() android.Module {
module.AddProperties(&module.dexpreoptProperties)
module.AddProperties(&module.testProperties)
module.populateAllVariantStructs()
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
module.SetDefaultableHook(func(ctx android.DefaultableHookContext) {
module.processVariants(ctx)
})

View File

@@ -410,6 +410,27 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
artifactPath: "prebuilts/apk/app_arm64.apk",
installPath: "/system/app/foo/foo.apk",
},
{
name: "matching arch without default",
bp: `
android_app_import {
name: "foo",
apk: "prebuilts/apk/app.apk",
arch: {
arm64: {
apk: "prebuilts/apk/app_arm64.apk",
},
},
presigned: true,
dex_preopt: {
enabled: true,
},
}
`,
expected: "verify_uses_libraries/apk/app_arm64.apk",
artifactPath: "prebuilts/apk/app_arm64.apk",
installPath: "/system/app/foo/foo.apk",
},
{
name: "no matching arch",
bp: `
@@ -454,26 +475,105 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
}
for _, test := range testCases {
ctx, _ := testJava(t, test.bp)
t.Run(test.name, func(t *testing.T) {
ctx, _ := testJava(t, test.bp)
variant := ctx.ModuleForTests("foo", "android_common")
if test.expected == "" {
if variant.Module().Enabled() {
t.Error("module should have been disabled, but wasn't")
variant := ctx.ModuleForTests("foo", "android_common")
if test.expected == "" {
if variant.Module().Enabled() {
t.Error("module should have been disabled, but wasn't")
}
rule := variant.MaybeRule("genProvenanceMetaData")
android.AssertDeepEquals(t, "Provenance metadata is not empty", android.TestingBuildParams{}, rule)
return
}
rule := variant.MaybeRule("genProvenanceMetaData")
android.AssertDeepEquals(t, "Provenance metadata is not empty", android.TestingBuildParams{}, rule)
continue
}
input := variant.Output("jnis-uncompressed/foo.apk").Input.String()
if strings.HasSuffix(input, test.expected) {
t.Errorf("wrong src apk, expected: %q got: %q", test.expected, input)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.artifactPath, rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", test.installPath, rule.Args["install_path"])
input := variant.Output("jnis-uncompressed/foo.apk").Input.String()
if strings.HasSuffix(input, test.expected) {
t.Errorf("wrong src apk, expected: %q got: %q", test.expected, input)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.artifactPath, rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", test.installPath, rule.Args["install_path"])
})
}
}
func TestAndroidAppImport_SoongConfigVariables(t *testing.T) {
testCases := []struct {
name string
bp string
expected string
artifactPath string
metaDataPath string
installPath string
}{
{
name: "matching arch",
bp: `
soong_config_module_type {
name: "my_android_app_import",
module_type: "android_app_import",
config_namespace: "my_namespace",
value_variables: ["my_apk_var"],
properties: ["apk"],
}
soong_config_value_variable {
name: "my_apk_var",
}
my_android_app_import {
name: "foo",
soong_config_variables: {
my_apk_var: {
apk: "prebuilts/apk/%s.apk",
},
},
presigned: true,
dex_preopt: {
enabled: true,
},
}
`,
expected: "verify_uses_libraries/apk/name_from_soong_config.apk",
artifactPath: "prebuilts/apk/name_from_soong_config.apk",
installPath: "/system/app/foo/foo.apk",
},
}
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
ctx := android.GroupFixturePreparers(
prepareForJavaTest,
android.PrepareForTestWithSoongConfigModuleBuildComponents,
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
variables.VendorVars = map[string]map[string]string{
"my_namespace": {
"my_apk_var": "name_from_soong_config",
},
}
}),
).RunTestWithBp(t, test.bp).TestContext
variant := ctx.ModuleForTests("foo", "android_common")
if test.expected == "" {
if variant.Module().Enabled() {
t.Error("module should have been disabled, but wasn't")
}
rule := variant.MaybeRule("genProvenanceMetaData")
android.AssertDeepEquals(t, "Provenance metadata is not empty", android.TestingBuildParams{}, rule)
return
}
input := variant.Output("jnis-uncompressed/foo.apk").Input.String()
if strings.HasSuffix(input, test.expected) {
t.Errorf("wrong src apk, expected: %q got: %q", test.expected, input)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.artifactPath, rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", test.installPath, rule.Args["install_path"])
})
}
}