diff options
author | 2025-01-24 00:25:30 +0000 | |
---|---|---|
committer | 2025-01-28 06:19:58 +0000 | |
commit | d406381eadbbd411833a3e6829c9f2ade29da7ba (patch) | |
tree | e67c2f15267feb885d4fe6de6bbfcdffa3f66c9c | |
parent | f83bfb1ef01fc8eb46dfc400dcdefe6713e72306 (diff) |
Convert java modules' module-info.json to Soong
This change converts the module-info.json of java_library
and other java modules that call java_library's
GenerateAndroidBuildActions() in its
GenerateAndroidBuildActions() to Soong.
Bug: 389720048
Test: Inspect module-info.json diff, CI
Change-Id: I0db5ae3a5fb41bb60dc538aea2d8e614c9ae23d4
-rw-r--r-- | android/androidmk.go | 23 | ||||
-rw-r--r-- | android/module.go | 121 | ||||
-rw-r--r-- | android/module_context.go | 33 | ||||
-rw-r--r-- | android/module_info_json.go | 9 | ||||
-rw-r--r-- | java/androidmk.go | 11 | ||||
-rw-r--r-- | java/dexpreopt.go | 20 | ||||
-rw-r--r-- | java/java.go | 72 | ||||
-rw-r--r-- | java/ravenwood.go | 9 |
8 files changed, 218 insertions, 80 deletions
diff --git a/android/androidmk.go b/android/androidmk.go index 6f094e557..f862a9628 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -838,7 +838,7 @@ func getSoongOnlyDataFromMods(ctx fillInEntriesContext, mods []blueprint.Module) continue } if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON) + moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON...) } if contribution := info.PrimaryInfo.getDistContributions(ctx, mod); contribution != nil { allDistContributions = append(allDistContributions, *contribution) @@ -866,7 +866,7 @@ func getSoongOnlyDataFromMods(ctx fillInEntriesContext, mods []blueprint.Module) continue } if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON) + moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON...) } if contribution := data.Entries.getDistContributions(mod); contribution != nil { allDistContributions = append(allDistContributions, *contribution) @@ -879,7 +879,7 @@ func getSoongOnlyDataFromMods(ctx fillInEntriesContext, mods []blueprint.Module) continue } if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON) + moduleInfoJSONs = append(moduleInfoJSONs, moduleInfoJSON...) } if contribution := entries.getDistContributions(mod); contribution != nil { allDistContributions = append(allDistContributions, *contribution) @@ -1077,7 +1077,7 @@ func translateAndroidModule(ctx SingletonContext, w io.Writer, moduleInfoJSONs * if !data.Entries.disabled() { if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - *moduleInfoJSONs = append(*moduleInfoJSONs, moduleInfoJSON) + *moduleInfoJSONs = append(*moduleInfoJSONs, moduleInfoJSON...) } } @@ -1111,15 +1111,20 @@ func translateAndroidMkEntriesModule(ctx SingletonContext, w io.Writer, moduleIn entriesList := provider.AndroidMkEntries() aconfigUpdateAndroidMkEntries(ctx, mod.(Module), &entriesList) + moduleInfoJSON, providesModuleInfoJSON := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider) + // Any new or special cases here need review to verify correct propagation of license information. for _, entries := range entriesList { entries.fillInEntries(ctx, mod) entries.write(w) - } - if len(entriesList) > 0 && !entriesList[0].disabled() { - if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - *moduleInfoJSONs = append(*moduleInfoJSONs, moduleInfoJSON) + if providesModuleInfoJSON && !entries.disabled() { + // append only the name matching moduleInfoJSON entry + for _, m := range moduleInfoJSON { + if m.RegisterNameOverride == entries.OverrideName && m.SubName == entries.SubName { + *moduleInfoJSONs = append(*moduleInfoJSONs, m) + } + } } } @@ -1286,7 +1291,7 @@ func translateAndroidMkEntriesInfoModule(ctx SingletonContext, w io.Writer, modu if !info.PrimaryInfo.disabled() { if moduleInfoJSON, ok := OtherModuleProvider(ctx, mod, ModuleInfoJSONProvider); ok { - *moduleInfoJSONs = append(*moduleInfoJSONs, moduleInfoJSON) + *moduleInfoJSONs = append(*moduleInfoJSONs, moduleInfoJSON...) } } diff --git a/android/module.go b/android/module.go index 56fa05df1..788c21b59 100644 --- a/android/module.go +++ b/android/module.go @@ -2134,63 +2134,84 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) SetProvider(ctx, InstallFilesProvider, installFiles) buildLicenseMetadata(ctx, ctx.licenseMetadataFile) - if ctx.moduleInfoJSON != nil { - var installed InstallPaths - installed = append(installed, ctx.katiInstalls.InstallPaths()...) - installed = append(installed, ctx.katiSymlinks.InstallPaths()...) - installed = append(installed, ctx.katiInitRcInstalls.InstallPaths()...) - installed = append(installed, ctx.katiVintfInstalls.InstallPaths()...) - installedStrings := installed.Strings() - - var targetRequired, hostRequired []string - if ctx.Host() { - targetRequired = m.baseProperties.Target_required - } else { - hostRequired = m.baseProperties.Host_required - } + if len(ctx.moduleInfoJSON) > 0 { + for _, moduleInfoJSON := range ctx.moduleInfoJSON { + if moduleInfoJSON.Disabled { + continue + } + var installed InstallPaths + installed = append(installed, ctx.katiInstalls.InstallPaths()...) + installed = append(installed, ctx.katiSymlinks.InstallPaths()...) + installed = append(installed, ctx.katiInitRcInstalls.InstallPaths()...) + installed = append(installed, ctx.katiVintfInstalls.InstallPaths()...) + installedStrings := installed.Strings() + + var targetRequired, hostRequired []string + if ctx.Host() { + targetRequired = m.baseProperties.Target_required + } else { + hostRequired = m.baseProperties.Host_required + } - var data []string - for _, d := range ctx.testData { - data = append(data, d.ToRelativeInstallPath()) - } + var data []string + for _, d := range ctx.testData { + data = append(data, d.ToRelativeInstallPath()) + } - if ctx.moduleInfoJSON.Uninstallable { - installedStrings = nil - if len(ctx.moduleInfoJSON.CompatibilitySuites) == 1 && ctx.moduleInfoJSON.CompatibilitySuites[0] == "null-suite" { - ctx.moduleInfoJSON.CompatibilitySuites = nil - ctx.moduleInfoJSON.TestConfig = nil - ctx.moduleInfoJSON.AutoTestConfig = nil - data = nil + if moduleInfoJSON.Uninstallable { + installedStrings = nil + if len(moduleInfoJSON.CompatibilitySuites) == 1 && moduleInfoJSON.CompatibilitySuites[0] == "null-suite" { + moduleInfoJSON.CompatibilitySuites = nil + moduleInfoJSON.TestConfig = nil + moduleInfoJSON.AutoTestConfig = nil + data = nil + } } - } - // M(C)TS supports a full test suite and partial per-module MTS test suites, with naming mts-${MODULE}. - // To reduce repetition, if we find a partial M(C)TS test suite without an full M(C)TS test suite, - // we add the full test suite to our list. This was inherited from - // AndroidMkEntries.AddCompatibilityTestSuites. - suites := ctx.moduleInfoJSON.CompatibilitySuites - if PrefixInList(suites, "mts-") && !InList("mts", suites) { - suites = append(suites, "mts") - } - if PrefixInList(suites, "mcts-") && !InList("mcts", suites) { - suites = append(suites, "mcts") - } - ctx.moduleInfoJSON.CompatibilitySuites = suites + // M(C)TS supports a full test suite and partial per-module MTS test suites, with naming mts-${MODULE}. + // To reduce repetition, if we find a partial M(C)TS test suite without an full M(C)TS test suite, + // we add the full test suite to our list. This was inherited from + // AndroidMkEntries.AddCompatibilityTestSuites. + suites := moduleInfoJSON.CompatibilitySuites + if PrefixInList(suites, "mts-") && !InList("mts", suites) { + suites = append(suites, "mts") + } + if PrefixInList(suites, "mcts-") && !InList("mcts", suites) { + suites = append(suites, "mcts") + } + moduleInfoJSON.CompatibilitySuites = suites - required := append(m.RequiredModuleNames(ctx), m.VintfFragmentModuleNames(ctx)...) - required = append(required, ctx.moduleInfoJSON.ExtraRequired...) + required := append(m.RequiredModuleNames(ctx), m.VintfFragmentModuleNames(ctx)...) + required = append(required, moduleInfoJSON.ExtraRequired...) - ctx.moduleInfoJSON.core = CoreModuleInfoJSON{ - RegisterName: m.moduleInfoRegisterName(ctx, ctx.moduleInfoJSON.SubName), - Path: []string{ctx.ModuleDir()}, - Installed: installedStrings, - ModuleName: m.BaseModuleName() + ctx.moduleInfoJSON.SubName, - SupportedVariants: []string{m.moduleInfoVariant(ctx)}, - TargetDependencies: targetRequired, - HostDependencies: hostRequired, - Data: data, - Required: required, + registerName := moduleInfoJSON.RegisterNameOverride + if len(registerName) == 0 { + registerName = m.moduleInfoRegisterName(ctx, moduleInfoJSON.SubName) + } + + moduleName := moduleInfoJSON.ModuleNameOverride + if len(moduleName) == 0 { + moduleName = m.BaseModuleName() + moduleInfoJSON.SubName + } + + supportedVariants := moduleInfoJSON.SupportedVariantsOverride + if moduleInfoJSON.SupportedVariantsOverride == nil { + supportedVariants = []string{m.moduleInfoVariant(ctx)} + } + + moduleInfoJSON.core = CoreModuleInfoJSON{ + RegisterName: registerName, + Path: []string{ctx.ModuleDir()}, + Installed: installedStrings, + ModuleName: moduleName, + SupportedVariants: supportedVariants, + TargetDependencies: targetRequired, + HostDependencies: hostRequired, + Data: data, + Required: required, + } } + SetProvider(ctx, ModuleInfoJSONProvider, ctx.moduleInfoJSON) } diff --git a/android/module_context.go b/android/module_context.go index e63c672e9..1f4758c04 100644 --- a/android/module_context.go +++ b/android/module_context.go @@ -231,6 +231,10 @@ type ModuleContext interface { // the module-info.json generated by Make, and Make will not generate its own data for this module. ModuleInfoJSON() *ModuleInfoJSON + // Simiar to ModuleInfoJSON, ExtraModuleInfoJSON also returns a pointer to the ModuleInfoJSON struct. + // This should only be called by a module that generates multiple AndroidMkEntries struct. + ExtraModuleInfoJSON() *ModuleInfoJSON + // SetOutputFiles stores the outputFiles to outputFiles property, which is used // to set the OutputFilesProvider later. SetOutputFiles(outputFiles Paths, tag string) @@ -296,7 +300,7 @@ type moduleContext struct { // moduleInfoJSON can be filled out by GenerateAndroidBuildActions to write a JSON file that will // be included in the final module-info.json produced by Make. - moduleInfoJSON *ModuleInfoJSON + moduleInfoJSON []*ModuleInfoJSON // containersInfo stores the information about the containers and the information of the // apexes the module belongs to. @@ -624,8 +628,8 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e skipInstall: m.skipInstall(), aconfigPaths: uniquelist.Make(m.getAconfigPaths()), archType: m.target.Arch.ArchType, - overrides: uniquelist.Make(overrides), - owner: owner, + overrides: uniquelist.Make(overrides), + owner: owner, } m.packagingSpecs = append(m.packagingSpecs, spec) return spec @@ -759,8 +763,8 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src skipInstall: m.skipInstall(), aconfigPaths: uniquelist.Make(m.getAconfigPaths()), archType: m.target.Arch.ArchType, - overrides: uniquelist.Make(overrides), - owner: owner, + overrides: uniquelist.Make(overrides), + owner: owner, }) return fullInstallPath @@ -807,8 +811,8 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str skipInstall: m.skipInstall(), aconfigPaths: uniquelist.Make(m.getAconfigPaths()), archType: m.target.Arch.ArchType, - overrides: uniquelist.Make(overrides), - owner: owner, + overrides: uniquelist.Make(overrides), + owner: owner, }) return fullInstallPath @@ -846,11 +850,20 @@ func (m *moduleContext) LicenseMetadataFile() Path { } func (m *moduleContext) ModuleInfoJSON() *ModuleInfoJSON { - if moduleInfoJSON := m.moduleInfoJSON; moduleInfoJSON != nil { - return moduleInfoJSON + if len(m.moduleInfoJSON) == 0 { + moduleInfoJSON := &ModuleInfoJSON{} + m.moduleInfoJSON = append(m.moduleInfoJSON, moduleInfoJSON) } + return m.moduleInfoJSON[0] +} + +func (m *moduleContext) ExtraModuleInfoJSON() *ModuleInfoJSON { + if len(m.moduleInfoJSON) == 0 { + panic("call ModuleInfoJSON() instead") + } + moduleInfoJSON := &ModuleInfoJSON{} - m.moduleInfoJSON = moduleInfoJSON + m.moduleInfoJSON = append(m.moduleInfoJSON, moduleInfoJSON) return moduleInfoJSON } diff --git a/android/module_info_json.go b/android/module_info_json.go index 27120ef6f..f7bffdb51 100644 --- a/android/module_info_json.go +++ b/android/module_info_json.go @@ -34,7 +34,7 @@ type ExtraModuleInfoJSON struct { SrcJars []string `json:"srcjars,omitempty"` // $(sort $(ALL_MODULES.$(m).SRCJARS)) ClassesJar []string `json:"classes_jar,omitempty"` // $(sort $(ALL_MODULES.$(m).CLASSES_JAR)) TestMainlineModules []string `json:"test_mainline_modules,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_MAINLINE_MODULES)) - IsUnitTest bool `json:"is_unit_test,omitempty"` // $(ALL_MODULES.$(m).IS_UNIT_TEST) + IsUnitTest string `json:"is_unit_test,omitempty"` // $(ALL_MODULES.$(m).IS_UNIT_TEST) TestOptionsTags []string `json:"test_options_tags,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_OPTIONS_TAGS)) RuntimeDependencies []string `json:"runtime_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).LOCAL_RUNTIME_LIBRARIES)) StaticDependencies []string `json:"static_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).LOCAL_STATIC_LIBRARIES)) @@ -44,6 +44,11 @@ type ExtraModuleInfoJSON struct { AutoTestConfig []string `json:"auto_test_config,omitempty"` // $(ALL_MODULES.$(m).auto_test_config) TestConfig []string `json:"test_config,omitempty"` // $(strip $(ALL_MODULES.$(m).TEST_CONFIG) $(ALL_MODULES.$(m).EXTRA_TEST_CONFIGS) ExtraRequired []string `json:"-"` + + SupportedVariantsOverride []string `json:"-"` + Disabled bool `json:"-"` + RegisterNameOverride string `json:"-"` + ModuleNameOverride string `json:"-"` } type ModuleInfoJSON struct { @@ -128,4 +133,4 @@ func (m *ModuleInfoJSON) GobDecode(data []byte) error { return gobtools.CustomGobDecode[combinedModuleInfoJSON](data, m) } -var ModuleInfoJSONProvider = blueprint.NewProvider[*ModuleInfoJSON]() +var ModuleInfoJSONProvider = blueprint.NewProvider[[]*ModuleInfoJSON]() diff --git a/java/androidmk.go b/java/androidmk.go index 039e847a7..e0a86b597 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -23,13 +23,12 @@ import ( "github.com/google/blueprint/proptools" ) -func (library *Library) AndroidMkEntriesHostDex() android.AndroidMkEntries { - hostDexNeeded := Bool(library.deviceProperties.Hostdex) && !library.Host() - if library.hideApexVariantFromMake { - hostDexNeeded = false - } +func (library *Library) hostDexNeeded() bool { + return Bool(library.deviceProperties.Hostdex) && !library.Host() && !library.hideApexVariantFromMake +} - if hostDexNeeded { +func (library *Library) AndroidMkEntriesHostDex() android.AndroidMkEntries { + if library.hostDexNeeded() { var output android.Path if library.dexJarFile.IsSet() { output = library.dexJarFile.Path() diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 24e5f50a5..f52ce5d10 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -80,11 +80,11 @@ func (install *dexpreopterInstall) SubModuleName() string { // safe to use in `android.AndroidMkExtraEntriesFunc`. func (install dexpreopterInstall) ToMakeEntries() android.AndroidMkEntries { return android.AndroidMkEntries{ - Class: "ETC", - OutputFile: android.OptionalPathForPath(install.outputPathOnHost), + OverrideName: install.FullModuleName(), + Class: "ETC", + OutputFile: android.OptionalPathForPath(install.outputPathOnHost), ExtraEntries: []android.AndroidMkExtraEntriesFunc{ func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { - entries.SetString("LOCAL_MODULE", install.FullModuleName()) entries.SetString("LOCAL_MODULE_PATH", install.installDirOnDevice.String()) entries.SetString("LOCAL_INSTALLED_MODULE_STEM", install.installFileOnDevice) entries.SetString("LOCAL_NOT_AVAILABLE_FOR_PLATFORM", "false") @@ -93,6 +93,14 @@ func (install dexpreopterInstall) ToMakeEntries() android.AndroidMkEntries { } } +func (install dexpreopterInstall) AddModuleInfoJSONForApex(ctx android.ModuleContext) { + moduleInfoJSON := ctx.ExtraModuleInfoJSON() + moduleInfoJSON.RegisterNameOverride = install.FullModuleName() + moduleInfoJSON.ModuleNameOverride = install.FullModuleName() + moduleInfoJSON.Class = []string{"ETC"} + moduleInfoJSON.SystemSharedLibs = []string{"none"} +} + type Dexpreopter struct { dexpreopter } @@ -660,6 +668,12 @@ func (d *dexpreopter) AndroidMkEntriesForApex() []android.AndroidMkEntries { return entries } +func (d *dexpreopter) ModuleInfoJSONForApex(ctx android.ModuleContext) { + for _, install := range d.builtInstalledForApex { + install.AddModuleInfoJSONForApex(ctx) + } +} + func (d *dexpreopter) OutputProfilePathOnHost() android.Path { return d.outputProfilePathOnHost } diff --git a/java/java.go b/java/java.go index 70ebebeb9..66550d562 100644 --- a/java/java.go +++ b/java/java.go @@ -1069,6 +1069,29 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { } setOutputFiles(ctx, j.Module) + + moduleInfoJSON := ctx.ModuleInfoJSON() + moduleInfoJSON.Class = []string{"JAVA_LIBRARIES"} + if j.implementationAndResourcesJar != nil { + moduleInfoJSON.ClassesJar = []string{j.implementationAndResourcesJar.String()} + } + moduleInfoJSON.SystemSharedLibs = []string{"none"} + + if j.hostDexNeeded() { + hostDexModuleInfoJSON := ctx.ExtraModuleInfoJSON() + hostDexModuleInfoJSON.SubName = "-hostdex" + hostDexModuleInfoJSON.Class = []string{"JAVA_LIBRARIES"} + if j.implementationAndResourcesJar != nil { + hostDexModuleInfoJSON.ClassesJar = []string{j.implementationAndResourcesJar.String()} + } + hostDexModuleInfoJSON.SystemSharedLibs = []string{"none"} + hostDexModuleInfoJSON.SupportedVariantsOverride = []string{"HOST"} + } + + if j.hideApexVariantFromMake { + moduleInfoJSON.Disabled = true + j.dexpreopter.ModuleInfoJSONForApex(ctx) + } } func (j *Library) getJarInstallDir(ctx android.ModuleContext) android.InstallPath { @@ -1627,6 +1650,11 @@ func (j *TestHost) GenerateAndroidBuildActions(ctx android.ModuleContext) { MkInclude: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk", MkAppClass: "JAVA_LIBRARIES", }) + + moduleInfoJSON := ctx.ModuleInfoJSON() + if proptools.Bool(j.testProperties.Test_options.Unit_test) { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "host-unit-tests") + } } func (j *Test) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -1704,10 +1732,54 @@ func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext, }) j.Library.GenerateAndroidBuildActions(ctx) + + moduleInfoJSON := ctx.ModuleInfoJSON() + // LOCAL_MODULE_TAGS + moduleInfoJSON.Tags = append(moduleInfoJSON.Tags, "tests") + var allTestConfigs android.Paths + if j.testConfig != nil { + allTestConfigs = append(allTestConfigs, j.testConfig) + } + allTestConfigs = append(allTestConfigs, j.extraTestConfigs...) + if len(allTestConfigs) > 0 { + moduleInfoJSON.TestConfig = allTestConfigs.Strings() + } else { + optionalConfig := android.ExistentPathForSource(ctx, ctx.ModuleDir(), "AndroidTest.xml") + if optionalConfig.Valid() { + moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, optionalConfig.String()) + } + } + if len(j.testProperties.Test_suites) > 0 { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, j.testProperties.Test_suites...) + } else { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "null-suite") + } + if _, ok := j.testConfig.(android.WritablePath); ok { + moduleInfoJSON.AutoTestConfig = []string{"true"} + } + if proptools.Bool(j.testProperties.Test_options.Unit_test) { + moduleInfoJSON.IsUnitTest = "true" + if ctx.Host() { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "host-unit-tests") + } + } + moduleInfoJSON.TestMainlineModules = append(moduleInfoJSON.TestMainlineModules, j.testProperties.Test_mainline_modules...) } func (j *TestHelperLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.Library.GenerateAndroidBuildActions(ctx) + + moduleInfoJSON := ctx.ModuleInfoJSON() + moduleInfoJSON.Tags = append(moduleInfoJSON.Tags, "tests") + if len(j.testHelperLibraryProperties.Test_suites) > 0 { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, j.testHelperLibraryProperties.Test_suites...) + } else { + moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "null-suite") + } + optionalConfig := android.ExistentPathForSource(ctx, ctx.ModuleDir(), "AndroidTest.xml") + if optionalConfig.Valid() { + moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, optionalConfig.String()) + } } func (j *JavaTestImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/java/ravenwood.go b/java/ravenwood.go index 8c8d8e99a..3b6c80bc6 100644 --- a/java/ravenwood.go +++ b/java/ravenwood.go @@ -258,6 +258,15 @@ func (r *ravenwoodTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Install our JAR with all dependencies ctx.InstallFile(installPath, ctx.ModuleName()+".jar", r.outputFile, installDeps...) + + moduleInfoJSON := ctx.ModuleInfoJSON() + if _, ok := r.testConfig.(android.WritablePath); ok { + moduleInfoJSON.AutoTestConfig = []string{"true"} + } + if r.testConfig != nil { + moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, r.testConfig.String()) + } + moduleInfoJSON.CompatibilitySuites = []string{"general-tests", "ravenwood-tests"} } func (r *ravenwoodTest) AndroidMkEntries() []android.AndroidMkEntries { |