diff options
Diffstat (limited to 'apex')
-rw-r--r-- | apex/aconfig_test.go | 701 | ||||
-rw-r--r-- | apex/apex.go | 31 | ||||
-rw-r--r-- | apex/apex_singleton.go | 4 | ||||
-rw-r--r-- | apex/apex_test.go | 4 | ||||
-rw-r--r-- | apex/prebuilt.go | 6 |
5 files changed, 719 insertions, 27 deletions
diff --git a/apex/aconfig_test.go b/apex/aconfig_test.go new file mode 100644 index 000000000..a179dbffd --- /dev/null +++ b/apex/aconfig_test.go @@ -0,0 +1,701 @@ +// Copyright 2024 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package apex + +import ( + "testing" + + "android/soong/aconfig/codegen" + "android/soong/android" + "android/soong/cc" + "android/soong/genrule" + "android/soong/java" + "android/soong/rust" + "github.com/google/blueprint/proptools" +) + +var withAconfigValidationError = android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.AconfigContainerValidation = "error" + variables.BuildId = proptools.StringPtr("TEST.BUILD_ID") +}) + +func TestValidationAcrossContainersExportedPass(t *testing.T) { + testCases := []struct { + name string + bp string + }{ + { + name: "Java lib passes for exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + java_libs: [ + "my_java_library_foo", + ], + updatable: false, + } + java_library { + name: "my_java_library_foo", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + static_libs: ["my_java_aconfig_library_foo"], + apex_available: [ + "myapex", + ], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + exportable: true, + } + java_aconfig_library { + name: "my_java_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + mode: "exported", + apex_available: [ + "myapex", + ], + }`, + }, + { + name: "Android app passes for exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + apps: [ + "my_android_app_foo", + ], + updatable: false, + } + android_app { + name: "my_android_app_foo", + srcs: ["foo/MyClass.java"], + sdk_version: "none", + system_modules: "none", + stl: "none", + static_libs: ["my_java_library_bar"], + apex_available: [ "myapex" ], + } + java_library { + name: "my_java_library_bar", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + static_libs: ["my_java_aconfig_library_bar"], + apex_available: [ + "myapex", + ], + } + aconfig_declarations { + name: "my_aconfig_declarations_bar", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + exportable: true, + } + java_aconfig_library { + name: "my_java_aconfig_library_bar", + aconfig_declarations: "my_aconfig_declarations_bar", + mode: "exported", + apex_available: [ + "myapex", + ], + }`, + }, + { + name: "Cc lib passes for exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + native_shared_libs: [ + "my_cc_library_bar", + ], + binaries: [ + "my_cc_binary_baz", + ], + updatable: false, + } + cc_library { + name: "my_cc_library_bar", + srcs: ["foo/bar/MyClass.cc"], + static_libs: [ + "my_cc_aconfig_library_bar", + "my_cc_aconfig_library_baz", + ], + apex_available: [ + "myapex", + ], + } + cc_binary { + name: "my_cc_binary_baz", + srcs: ["foo/bar/MyClass.cc"], + static_libs: ["my_cc_aconfig_library_baz"], + apex_available: [ + "myapex", + ], + } + cc_library { + name: "server_configurable_flags", + srcs: ["server_configurable_flags.cc"], + } + aconfig_declarations { + name: "my_aconfig_declarations_bar", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + exportable: true, + } + cc_aconfig_library { + name: "my_cc_aconfig_library_bar", + aconfig_declarations: "my_aconfig_declarations_bar", + apex_available: [ + "myapex", + ], + mode: "exported", + } + aconfig_declarations { + name: "my_aconfig_declarations_baz", + package: "com.example.package", + container: "otherapex", + srcs: ["baz.aconfig"], + exportable: true, + } + cc_aconfig_library { + name: "my_cc_aconfig_library_baz", + aconfig_declarations: "my_aconfig_declarations_baz", + apex_available: [ + "myapex", + ], + mode: "exported", + }`, + }, + { + name: "Rust lib passes for exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + native_shared_libs: ["libmy_rust_library"], + binaries: ["my_rust_binary"], + updatable: false, + } + rust_library { + name: "libflags_rust", // test mock + crate_name: "flags_rust", + srcs: ["lib.rs"], + apex_available: ["myapex"], + } + rust_library { + name: "liblazy_static", // test mock + crate_name: "lazy_static", + srcs: ["src/lib.rs"], + apex_available: ["myapex"], + } + rust_ffi_shared { + name: "libmy_rust_library", + srcs: ["src/lib.rs"], + rustlibs: ["libmy_rust_aconfig_library_foo"], + crate_name: "my_rust_library", + apex_available: ["myapex"], + } + rust_binary { + name: "my_rust_binary", + srcs: ["foo/bar/MyClass.rs"], + rustlibs: ["libmy_rust_aconfig_library_bar"], + apex_available: ["myapex"], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + aconfig_declarations { + name: "my_aconfig_declarations_bar", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + } + rust_aconfig_library { + name: "libmy_rust_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + crate_name: "my_rust_aconfig_library_foo", + apex_available: ["myapex"], + mode: "exported", + } + rust_aconfig_library { + name: "libmy_rust_aconfig_library_bar", + aconfig_declarations: "my_aconfig_declarations_bar", + crate_name: "my_rust_aconfig_library_bar", + apex_available: ["myapex"], + mode: "exported", + }`, + }, + } + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + android.GroupFixturePreparers( + java.PrepareForTestWithJavaDefaultModules, + cc.PrepareForTestWithCcBuildComponents, + rust.PrepareForTestWithRustDefaultModules, + codegen.PrepareForTestWithAconfigBuildComponents, + PrepareForTestWithApexBuildComponents, + prepareForTestWithMyapex, + withAconfigValidationError, + ). + RunTestWithBp(t, test.bp) + }) + } +} + +func TestValidationAcrossContainersNotExportedFail(t *testing.T) { + testCases := []struct { + name string + expectedError string + bp string + }{ + { + name: "Java lib fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + java_libs: [ + "my_java_library_foo", + ], + updatable: false, + } + java_library { + name: "my_java_library_foo", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + static_libs: ["my_java_aconfig_library_foo"], + apex_available: [ + "myapex", + ], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + java_aconfig_library { + name: "my_java_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + expectedError: `.*my_java_library_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, + }, + { + name: "Android app fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + apps: [ + "my_android_app_foo", + ], + updatable: false, + } + android_app { + name: "my_android_app_foo", + srcs: ["foo/MyClass.java"], + sdk_version: "none", + system_modules: "none", + stl: "none", + static_libs: ["my_java_library_foo"], + apex_available: [ "myapex" ], + } + java_library { + name: "my_java_library_foo", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + static_libs: ["my_java_aconfig_library_foo"], + apex_available: [ + "myapex", + ], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + } + java_aconfig_library { + name: "my_java_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, + }, + { + name: "Cc lib fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + native_shared_libs: [ + "my_cc_library_foo", + ], + updatable: false, + } + cc_library { + name: "my_cc_library_foo", + srcs: ["foo/bar/MyClass.cc"], + shared_libs: [ + "my_cc_aconfig_library_foo", + ], + apex_available: [ + "myapex", + ], + } + cc_library { + name: "server_configurable_flags", + srcs: ["server_configurable_flags.cc"], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + cc_aconfig_library { + name: "my_cc_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + expectedError: `.*my_cc_library_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`, + }, + { + name: "Cc binary fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + binaries: [ + "my_cc_binary_foo", + ], + updatable: false, + } + cc_library { + name: "my_cc_library_foo", + srcs: ["foo/bar/MyClass.cc"], + static_libs: [ + "my_cc_aconfig_library_foo", + ], + apex_available: [ + "myapex", + ], + } + cc_binary { + name: "my_cc_binary_foo", + srcs: ["foo/bar/MyClass.cc"], + static_libs: ["my_cc_library_foo"], + apex_available: [ + "myapex", + ], + } + cc_library { + name: "server_configurable_flags", + srcs: ["server_configurable_flags.cc"], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + cc_aconfig_library { + name: "my_cc_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + expectedError: `.*my_cc_binary_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`, + }, + { + name: "Rust lib fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + native_shared_libs: ["libmy_rust_library"], + updatable: false, + } + rust_library { + name: "libflags_rust", // test mock + crate_name: "flags_rust", + srcs: ["lib.rs"], + apex_available: ["myapex"], + } + rust_library { + name: "liblazy_static", // test mock + crate_name: "lazy_static", + srcs: ["src/lib.rs"], + apex_available: ["myapex"], + } + rust_ffi_shared { + name: "libmy_rust_library", + srcs: ["src/lib.rs"], + rustlibs: ["libmy_rust_aconfig_library_foo"], + crate_name: "my_rust_library", + apex_available: ["myapex"], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + rust_aconfig_library { + name: "libmy_rust_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + crate_name: "my_rust_aconfig_library_foo", + apex_available: ["myapex"], + }`, + expectedError: `.*libmy_rust_aconfig_library_foo/myapex depends on libmy_rust_aconfig_library_foo/otherapex/production across containers`, + }, + { + name: "Rust binary fails for non-exported containers cross", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + binaries: ["my_rust_binary"], + updatable: false, + } + rust_library { + name: "libflags_rust", // test mock + crate_name: "flags_rust", + srcs: ["lib.rs"], + apex_available: ["myapex"], + } + rust_library { + name: "liblazy_static", // test mock + crate_name: "lazy_static", + srcs: ["src/lib.rs"], + apex_available: ["myapex"], + } + rust_binary { + name: "my_rust_binary", + srcs: ["foo/bar/MyClass.rs"], + rustlibs: ["libmy_rust_aconfig_library_bar"], + apex_available: ["myapex"], + } + aconfig_declarations { + name: "my_aconfig_declarations_bar", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + } + rust_aconfig_library { + name: "libmy_rust_aconfig_library_bar", + aconfig_declarations: "my_aconfig_declarations_bar", + crate_name: "my_rust_aconfig_library_bar", + apex_available: ["myapex"], + }`, + expectedError: `.*libmy_rust_aconfig_library_bar/myapex depends on libmy_rust_aconfig_library_bar/otherapex/production across containers`, + }, + { + name: "Aconfig validation propagate along sourceOrOutputDependencyTag", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + apps: [ + "my_android_app_foo", + ], + updatable: false, + } + android_app { + name: "my_android_app_foo", + srcs: ["foo/MyClass.java"], + sdk_version: "none", + system_modules: "none", + stl: "none", + static_libs: ["my_java_library_foo"], + apex_available: [ "myapex" ], + } + java_library { + name: "my_java_library_foo", + srcs: [":my_genrule_foo"], + sdk_version: "none", + system_modules: "none", + apex_available: [ + "myapex", + ], + } + aconfig_declarations_group { + name: "my_aconfig_declarations_group_foo", + java_aconfig_libraries: [ + "my_java_aconfig_library_foo", + ], + } + filegroup { + name: "my_filegroup_foo_srcjars", + srcs: [ + ":my_aconfig_declarations_group_foo{.srcjars}", + ], + } + genrule { + name: "my_genrule_foo", + srcs: [":my_filegroup_foo_srcjars"], + cmd: "cp $(in) $(out)", + out: ["my_genrule_foo.srcjar"], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["bar.aconfig"], + } + java_aconfig_library { + name: "my_java_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, + }, + } + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + errorHandler := android.FixtureExpectsNoErrors + if test.expectedError != "" { + errorHandler = android.FixtureExpectsAtLeastOneErrorMatchingPattern(test.expectedError) + } + android.GroupFixturePreparers( + java.PrepareForTestWithJavaDefaultModules, + cc.PrepareForTestWithCcBuildComponents, + rust.PrepareForTestWithRustDefaultModules, + codegen.PrepareForTestWithAconfigBuildComponents, + genrule.PrepareForIntegrationTestWithGenrule, + PrepareForTestWithApexBuildComponents, + prepareForTestWithMyapex, + withAconfigValidationError, + ). + ExtendWithErrorHandler(errorHandler). + RunTestWithBp(t, test.bp) + }) + } +} + +func TestValidationNotPropagateAcrossShared(t *testing.T) { + testCases := []struct { + name string + bp string + }{ + { + name: "Java shared lib not propagate aconfig validation", + bp: apex_default_bp + ` + apex { + name: "myapex", + manifest: ":myapex.manifest", + androidManifest: ":myapex.androidmanifest", + key: "myapex.key", + java_libs: [ + "my_java_library_bar", + ], + updatable: false, + } + java_library { + name: "my_java_library_bar", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + libs: ["my_java_library_foo"], + apex_available: [ + "myapex", + ], + } + java_library { + name: "my_java_library_foo", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + static_libs: ["my_java_aconfig_library_foo"], + apex_available: [ + "myapex", + ], + } + aconfig_declarations { + name: "my_aconfig_declarations_foo", + package: "com.example.package", + container: "otherapex", + srcs: ["foo.aconfig"], + } + java_aconfig_library { + name: "my_java_aconfig_library_foo", + aconfig_declarations: "my_aconfig_declarations_foo", + apex_available: [ + "myapex", + ], + }`, + }, + } + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + android.GroupFixturePreparers( + java.PrepareForTestWithJavaDefaultModules, + cc.PrepareForTestWithCcBuildComponents, + rust.PrepareForTestWithRustDefaultModules, + codegen.PrepareForTestWithAconfigBuildComponents, + PrepareForTestWithApexBuildComponents, + prepareForTestWithMyapex, + withAconfigValidationError, + ). + RunTestWithBp(t, test.bp) + }) + } +} diff --git a/apex/apex.go b/apex/apex.go index c6884387a..32a3638ed 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2321,9 +2321,15 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext, } func addAconfigFiles(vctx *visitorContext, ctx android.ModuleContext, module blueprint.Module) { - dep, _ := android.OtherModuleProvider(ctx, module, android.AconfigTransitiveDeclarationsInfoProvider) - if len(dep.AconfigFiles) > 0 && dep.AconfigFiles[ctx.ModuleName()] != nil { - vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()]...) + if dep, ok := android.OtherModuleProvider(ctx, module, android.AconfigTransitiveDeclarationsInfoProvider); ok { + if len(dep.AconfigFiles) > 0 && dep.AconfigFiles[ctx.ModuleName()] != nil { + vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()]...) + } + } + + validationFlag := ctx.DeviceConfig().AconfigContainerValidation() + if validationFlag == "error" || validationFlag == "warning" { + android.VerifyAconfigBuildMode(ctx, ctx.ModuleName(), module, validationFlag == "error") } } @@ -2428,29 +2434,14 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.providePrebuiltInfo(ctx) } -var prebuiltInfoProvider = blueprint.NewProvider[prebuiltInfo]() - -// contents of prebuilt_info.json -type prebuiltInfo struct { - // Name of the apex, without the prebuilt_ prefix - Name string - - Is_prebuilt bool - - // This is relative to root of the workspace. - // In case of mainline modules, this file contains the build_id that was used - // to generate the mainline module prebuilt. - Prebuilt_info_file_path string `json:",omitempty"` -} - // Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file // with information about whether source or prebuilt of an apex was used during the build. func (a *apexBundle) providePrebuiltInfo(ctx android.ModuleContext) { - info := prebuiltInfo{ + info := android.PrebuiltInfo{ Name: a.Name(), Is_prebuilt: false, } - android.SetProvider(ctx, prebuiltInfoProvider, info) + android.SetProvider(ctx, android.PrebuiltInfoProvider, info) } // Set a provider containing information about the jars and .prof provided by the apex diff --git a/apex/apex_singleton.go b/apex/apex_singleton.go index 8aaddbe25..e6ebff2c1 100644 --- a/apex/apex_singleton.go +++ b/apex/apex_singleton.go @@ -149,10 +149,10 @@ type apexPrebuiltInfo struct { } func (a *apexPrebuiltInfo) GenerateBuildActions(ctx android.SingletonContext) { - prebuiltInfos := []prebuiltInfo{} + prebuiltInfos := []android.PrebuiltInfo{} ctx.VisitAllModules(func(m android.Module) { - prebuiltInfo, exists := android.SingletonModuleProvider(ctx, m, prebuiltInfoProvider) + prebuiltInfo, exists := android.SingletonModuleProvider(ctx, m, android.PrebuiltInfoProvider) // Use prebuiltInfoProvider to filter out non apex soong modules. // Use HideFromMake to filter out the unselected variants of a specific apex. if exists && !m.IsHideFromMake() { diff --git a/apex/apex_test.go b/apex/apex_test.go index 54d2d08ff..add6083c9 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -2068,7 +2068,7 @@ func TestApexMinSdkVersion_InVendorApex(t *testing.T) { // Ensure that mylib links with "current" LLNDK libFlags := names(mylib.Rule("ld").Args["libFlags"]) - ensureListContains(t, libFlags, "out/soong/.intermediates/libbar/"+vendorVariant+"_shared_current/libbar.so") + ensureListContains(t, libFlags, "out/soong/.intermediates/libbar/"+vendorVariant+"_shared/libbar.so") // Ensure that mylib is targeting 29 ccRule := ctx.ModuleForTests("mylib", vendorVariant+"_static_apex29").Output("obj/mylib.o") @@ -11022,7 +11022,7 @@ func TestFileSystemShouldSkipApexLibraries(t *testing.T) { } `) - inputs := result.ModuleForTests("myfilesystem", "android_common").Output("deps.zip").Implicits + inputs := result.ModuleForTests("myfilesystem", "android_common").Output("myfilesystem.img").Implicits android.AssertStringListDoesNotContain(t, "filesystem should not have libbar", inputs.Strings(), "out/soong/.intermediates/libbar/android_arm64_armv8-a_shared/libbar.so") diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 34dfc467b..ea847e15c 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -827,15 +827,15 @@ func (p *prebuiltCommon) provideApexExportsInfo(ctx android.ModuleContext) { // Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file // with information about whether source or prebuilt of an apex was used during the build. func (p *prebuiltCommon) providePrebuiltInfo(ctx android.ModuleContext) { - info := prebuiltInfo{ - Name: p.BaseModuleName(), // BaseModuleName ensures that this will not contain the prebuilt_ prefix. + info := android.PrebuiltInfo{ + Name: p.BaseModuleName(), Is_prebuilt: true, } // If Prebuilt_info information is available in the soong module definition, add it to prebuilt_info.json. if p.prebuiltCommonProperties.Prebuilt_info != nil { info.Prebuilt_info_file_path = android.PathForModuleSrc(ctx, *p.prebuiltCommonProperties.Prebuilt_info).String() } - android.SetProvider(ctx, prebuiltInfoProvider, info) + android.SetProvider(ctx, android.PrebuiltInfoProvider, info) } func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) { |